package cl.monsoon.s1next.view.dialog; import android.os.Bundle; import cl.monsoon.s1next.R; import cl.monsoon.s1next.data.api.model.Result; import cl.monsoon.s1next.data.api.model.wrapper.ResultWrapper; import rx.Observable; /** * A {@link ProgressDialogFragment} posts a request to login to server. */ public final class LoginDialogFragment extends ProgressDialogFragment<ResultWrapper> { public static final String TAG = LoginDialogFragment.class.getName(); private static final String ARG_USERNAME = "username"; private static final String ARG_PASSWORD = "password"; /** * For desktop is "login_succeed". * For mobile is "location_login_succeed_mobile". * "login_succeed" when already has logged in. */ private static final String STATUS_AUTH_SUCCESS = "location_login_succeed_mobile"; private static final String STATUS_AUTH_SUCCESS_ALREADY = "login_succeed"; public static LoginDialogFragment newInstance(String username, String password) { LoginDialogFragment fragment = new LoginDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(ARG_USERNAME, username); bundle.putString(ARG_PASSWORD, password); fragment.setArguments(bundle); return fragment; } @Override protected Observable<ResultWrapper> getSourceObservable() { String username = getArguments().getString(ARG_USERNAME); String password = getArguments().getString(ARG_PASSWORD); return mS1Service.login(username, password).map(resultWrapper -> { // the authenticity token is not fresh after login resultWrapper.getAccount().setAuthenticityToken(null); mUserValidator.validate(resultWrapper.getAccount()); return resultWrapper; }); } @Override protected void onNext(ResultWrapper data) { Result result = data.getResult(); if (result.getStatus().equals(STATUS_AUTH_SUCCESS) || result.getStatus().equals(STATUS_AUTH_SUCCESS_ALREADY)) { showShortTextAndFinishCurrentActivity(result.getMessage()); } else { showShortText(result.getMessage()); } } @Override protected CharSequence getProgressMessage() { return getText(R.string.dialog_progress_message_login); } }