93 lines
3.2 KiB
Java
93 lines
3.2 KiB
Java
package com.smarthomies.realtimetalk.views.activities;
|
|
|
|
import android.databinding.DataBindingUtil;
|
|
import android.os.Bundle;
|
|
import android.widget.Toast;
|
|
|
|
import com.smarthomies.realtimetalk.R;
|
|
import com.smarthomies.realtimetalk.RTTActivity;
|
|
import com.smarthomies.realtimetalk.databinding.ActivityLoginBinding;
|
|
import com.smarthomies.realtimetalk.models.network.AuthenticationResponse;
|
|
import com.smarthomies.realtimetalk.utils.RTTErrorUtil;
|
|
import com.smarthomies.realtimetalk.viewmodels.LoginViewModel;
|
|
import com.smarthomies.realtimetalk.views.activities.bindingutils.OnErrorChangedCallback;
|
|
|
|
|
|
import rx.Observable;
|
|
import rx.Subscriber;
|
|
import rx.Subscription;
|
|
import rx.android.schedulers.AndroidSchedulers;
|
|
import rx.exceptions.CompositeException;
|
|
import rx.functions.Func0;
|
|
import rx.functions.Func1;
|
|
import rx.schedulers.Schedulers;
|
|
|
|
public class LoginActivity extends RTTActivity {
|
|
|
|
private LoginViewModel viewModel;
|
|
private Subscription loginSubscription;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
|
|
viewModel = new LoginViewModel();
|
|
binding.setViewModel(viewModel);
|
|
|
|
viewModel.getPasswordError().addOnPropertyChangedCallback(new OnErrorChangedCallback(binding.tilPassword));
|
|
viewModel.getUsernameError().addOnPropertyChangedCallback(new OnErrorChangedCallback(binding.tilUsername));
|
|
}
|
|
|
|
@Override
|
|
protected void subscribeToSubjects() {
|
|
super.subscribeToSubjects();
|
|
loginSubscription = viewModel.getLoginSubject().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new LoginSubscriber());
|
|
}
|
|
|
|
@Override
|
|
protected void unsubscribeFromSubjects() {
|
|
super.unsubscribeFromSubjects();
|
|
if(loginSubscription != null && !loginSubscription.isUnsubscribed()) {
|
|
loginSubscription.unsubscribe();
|
|
}
|
|
}
|
|
|
|
private void reconnectToLoginSubject() {
|
|
loginSubscription = viewModel.createLoginSubject().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new LoginSubscriber());
|
|
}
|
|
|
|
private class LoginSubscriber extends Subscriber<AuthenticationResponse> {
|
|
@Override
|
|
public void onCompleted() {
|
|
reconnectToLoginSubject();
|
|
viewModel.onRequestCompleted();
|
|
}
|
|
|
|
@Override
|
|
public void onError(Throwable e) {
|
|
reconnectToLoginSubject();
|
|
viewModel.onRequestCompleted();
|
|
|
|
if (e instanceof CompositeException) {
|
|
for (Throwable ex : ((CompositeException) e).getExceptions()) {
|
|
if(ex instanceof RuntimeException) {
|
|
handleException(ex.getCause());
|
|
}
|
|
}
|
|
} else {
|
|
handleException(e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onNext(AuthenticationResponse authenticationResponse) {
|
|
viewModel.onLoginDone();
|
|
}
|
|
}
|
|
|
|
private void handleException(Throwable e) {
|
|
Toast.makeText(this, RTTErrorUtil.getErrorString(e), Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
|