package ua.kpi.ecampus.ui.presenter; import android.os.Bundle; import javax.inject.Inject; import ua.kpi.ecampus.Config; import ua.kpi.ecampus.api.response.BaseResponse; import ua.kpi.ecampus.model.pojo.Token; import ua.kpi.ecampus.model.pojo.User; import ua.kpi.ecampus.rx.UserRxLoader; import ua.kpi.ecampus.ui.Navigator; import ua.kpi.ecampus.ui.Preference; import javax.inject.Inject; /** * LoginPresenter created to manage LoginActivity. * <p> * Created by Administrator on 29.01.2016. */ public class LoginPresenter extends BasePresenter { private IView mView; private Navigator mNavigator; private Preference mPreference; private UserRxLoader mLoader; @Inject public LoginPresenter(Navigator navigator, Preference preference) { mNavigator = navigator; mPreference = preference; mLoader = new UserRxLoader(preference); } public void setView(IView view) { mView = view; } public void setLoader(UserRxLoader loader) { mLoader = loader; } @Override public void initializeViewComponent() { } /** * Set necessary View components to "login state" */ public void onStartLogin() { mView.showLoginProgressDialog(); mView.activateLoginButton(false); } /** * Set views to "initial (after login) state". */ public void onFinishLogin() { mView.dismissProgressDialog(); mView.activateLoginButton(true); } /** * If server returns success, start MainActivity. * If not, launch login failed logic. * * @param baseResponse response from loader */ public void setLoaderResult(BaseResponse baseResponse) { Token answer = baseResponse.getTypedAnswer(); if (answer != null) { onLoginSuccess(answer); } else { mView.onLoginFailed(baseResponse); } } /** * Save token to User instance for short storing and to the preferences * for long storing * * @param token */ private void saveToken(Token token) { User.getInstance().token = token.getAccessToken(); saveStateToPref(token); } /** * Init loader to load data for the user authentication. * * @param login login which is entered by the user * @param password password which is entered by the user */ public void initRequest(String login, String password) { Bundle args = new Bundle(); args.putString(Config.KEY_LOGIN, login); args.putString(Config.KEY_PASSWORD, password); mView.initLoader(args); } private void onLoginSuccess(Token token) { saveToken(token); loadInfoAboutUser(); mNavigator.startMainActivity(); } /** * Save login values to SharedPreferences. */ private void saveStateToPref(Token token) { mPreference.saveLoginInfo(token); } private void loadInfoAboutUser() { mLoader.apiCall(); } public interface IView { void showLoginProgressDialog(); void dismissProgressDialog(); void activateLoginButton(boolean shouldShow); void onLoginFailed(BaseResponse response); void initLoader(Bundle args); } }