package com.badoo.chateau.example.ui.session.login;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import com.badoo.barf.mvp.BaseRxPresenter;
import com.badoo.barf.rx.ScheduleOn;
import com.badoo.chateau.core.model.User;
import com.badoo.chateau.example.usecases.session.SignIn;
import rx.Subscription;
public class LoginPresenterImpl<U extends User> extends BaseRxPresenter implements LoginPresenter {
private static final String TAG = LoginPresenterImpl.class.getSimpleName();
@NonNull
private final LoginView mView;
@NonNull
private final LoginFlowListener mFlowListener;
@NonNull
private final SignIn<U> mSignIn;
@VisibleForTesting
LoginPresenterImpl(@NonNull LoginView view, @NonNull LoginFlowListener flowListener, @NonNull SignIn<U> signIn) {
mView = view;
mFlowListener = flowListener;
mSignIn = signIn;
}
@Override
public void onSignIn(@NonNull String userName, @NonNull String password) {
mView.clearAllErrors();
boolean error = false;
if (TextUtils.isEmpty(userName)) {
mView.showUserNameEmptyError();
error = true;
}
if (TextUtils.isEmpty(password)) {
mView.showPasswordEmptyError();
error = true;
}
if (!error) {
mView.displayProgress();
final Subscription loginSub = mSignIn.execute(userName, password)
.compose(ScheduleOn.io()).subscribe(
user -> {
mFlowListener.userLoggedIn();
},
throwable -> {
mView.hideProgress();
onFatalError(throwable);
});
manage(loginSub);
}
}
@Override
public void onNotRegistered() {
mFlowListener.userNotRegistered();
}
private void onFatalError(Throwable throwable) {
Log.e(TAG, "Fatal error", throwable);
mView.showError(true, throwable);
}
}