From a52f7fb5d506c0c612124b26dbf3cbd5ec320afb Mon Sep 17 00:00:00 2001 From: Satya Iyengar Date: Wed, 22 Feb 2017 07:23:16 +0530 Subject: [PATCH 1/2] Update user info in datamanager and not in presenter - Presenter should not be responsible for handling network reponse --- .../framework/mvp/data/AppDataManager.java | 76 +++++++++++++------ .../framework/mvp/data/DataManager.java | 6 +- .../mvp/data/network/LoginApiHelper.java | 20 +++++ .../mvp/ui/login/LoginPresenter.java | 72 +++--------------- .../framework/mvp/ui/main/MainPresenter.java | 57 +++++++------- 5 files changed, 114 insertions(+), 117 deletions(-) create mode 100644 app/src/main/java/com/mindorks/framework/mvp/data/network/LoginApiHelper.java diff --git a/app/src/main/java/com/mindorks/framework/mvp/data/AppDataManager.java b/app/src/main/java/com/mindorks/framework/mvp/data/AppDataManager.java index 83c7d0e..0c5a1d6 100644 --- a/app/src/main/java/com/mindorks/framework/mvp/data/AppDataManager.java +++ b/app/src/main/java/com/mindorks/framework/mvp/data/AppDataManager.java @@ -15,9 +15,7 @@ package com.mindorks.framework.mvp.data; - import android.content.Context; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.internal.$Gson$Types; @@ -26,7 +24,6 @@ import com.mindorks.framework.mvp.data.db.model.Option; import com.mindorks.framework.mvp.data.db.model.Question; import com.mindorks.framework.mvp.data.db.model.User; -import com.mindorks.framework.mvp.data.network.ApiHeader; import com.mindorks.framework.mvp.data.network.ApiHelper; import com.mindorks.framework.mvp.data.network.model.LoginRequest; import com.mindorks.framework.mvp.data.network.model.LoginResponse; @@ -35,13 +32,10 @@ import com.mindorks.framework.mvp.di.ApplicationContext; import com.mindorks.framework.mvp.utils.AppConstants; import com.mindorks.framework.mvp.utils.CommonUtils; - import java.lang.reflect.Type; import java.util.List; - import javax.inject.Inject; import javax.inject.Singleton; - import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.functions.Function; @@ -71,11 +65,6 @@ public AppDataManager(@ApplicationContext Context context, mApiHelper = apiHelper; } - @Override - public ApiHeader getApiHeader() { - return mApiHelper.getApiHeader(); - } - @Override public String getAccessToken() { return mPreferencesHelper.getAccessToken(); @@ -98,26 +87,69 @@ public Observable> getAllUsers() { } @Override - public Observable doGoogleLoginApiCall(LoginRequest.GoogleLoginRequest - request) { - return mApiHelper.doGoogleLoginApiCall(request); + public Observable doGoogleLogin(LoginRequest.GoogleLoginRequest request) { + return mApiHelper.doGoogleLoginApiCall(request) + .map(new Function() { + @Override + public Object apply(LoginResponse loginResponse) throws Exception { + updateUserInfo( + loginResponse.getAccessToken(), + loginResponse.getUserId(), + DataManager.LoggedInMode.LOGGED_IN_MODE_GOOGLE, + loginResponse.getUserName(), + loginResponse.getUserEmail(), + loginResponse.getGoogleProfilePicUrl()); + return Observable.empty(); + } + }); } @Override - public Observable doFacebookLoginApiCall(LoginRequest.FacebookLoginRequest - request) { - return mApiHelper.doFacebookLoginApiCall(request); + public Observable doFacebookLogin(LoginRequest.FacebookLoginRequest request) { + return mApiHelper.doFacebookLoginApiCall(request) + .map(new Function() { + @Override + public Object apply(LoginResponse loginResponse) throws Exception { + updateUserInfo( + loginResponse.getAccessToken(), + loginResponse.getUserId(), + DataManager.LoggedInMode.LOGGED_IN_MODE_FB, + loginResponse.getUserName(), + loginResponse.getUserEmail(), + loginResponse.getGoogleProfilePicUrl()); + return Observable.empty(); + } + }); } @Override - public Observable doServerLoginApiCall(LoginRequest.ServerLoginRequest - request) { - return mApiHelper.doServerLoginApiCall(request); + public Observable doServerLogin(LoginRequest.ServerLoginRequest request) { + return mApiHelper.doServerLoginApiCall(request) + .map(new Function() { + @Override + public Object apply(LoginResponse loginResponse) throws Exception { + updateUserInfo( + getAccessToken(), + loginResponse.getUserId(), + DataManager.LoggedInMode.LOGGED_IN_MODE_SERVER, + loginResponse.getUserName(), + loginResponse.getUserEmail(), + loginResponse.getGoogleProfilePicUrl()); + return Observable.empty(); + } + }); } @Override - public Observable doLogoutApiCall() { - return mApiHelper.doLogoutApiCall(); + public Observable doLogout() { + return mApiHelper.doLogoutApiCall() + .map(new Function() { + @Override + public Object apply(LogoutResponse logoutResponse) throws Exception { + setUserAsLoggedOut(); + return Observable.empty(); + } + }); } @Override diff --git a/app/src/main/java/com/mindorks/framework/mvp/data/DataManager.java b/app/src/main/java/com/mindorks/framework/mvp/data/DataManager.java index 3a96826..7f04398 100644 --- a/app/src/main/java/com/mindorks/framework/mvp/data/DataManager.java +++ b/app/src/main/java/com/mindorks/framework/mvp/data/DataManager.java @@ -15,18 +15,16 @@ package com.mindorks.framework.mvp.data; - import com.mindorks.framework.mvp.data.db.DbHelper; -import com.mindorks.framework.mvp.data.network.ApiHelper; +import com.mindorks.framework.mvp.data.network.LoginApiHelper; import com.mindorks.framework.mvp.data.prefs.PreferencesHelper; - import io.reactivex.Observable; /** * Created by janisharali on 27/01/17. */ -public interface DataManager extends DbHelper, PreferencesHelper, ApiHelper { +public interface DataManager extends DbHelper, PreferencesHelper, LoginApiHelper { void updateApiHeader(Long userId, String accessToken); diff --git a/app/src/main/java/com/mindorks/framework/mvp/data/network/LoginApiHelper.java b/app/src/main/java/com/mindorks/framework/mvp/data/network/LoginApiHelper.java new file mode 100644 index 0000000..4744bb7 --- /dev/null +++ b/app/src/main/java/com/mindorks/framework/mvp/data/network/LoginApiHelper.java @@ -0,0 +1,20 @@ +package com.mindorks.framework.mvp.data.network; + +import com.mindorks.framework.mvp.data.network.model.LoginRequest; +import io.reactivex.Observable; + +/** + * Created on 20/02/17. + */ + +public interface LoginApiHelper { + + Observable doGoogleLogin(LoginRequest.GoogleLoginRequest request); + + Observable doFacebookLogin(LoginRequest.FacebookLoginRequest request); + + Observable doServerLogin(LoginRequest.ServerLoginRequest request); + + Observable doLogout(); + +} diff --git a/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java b/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java index 5751c82..8849ad9 100644 --- a/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java +++ b/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java @@ -19,7 +19,6 @@ import com.mindorks.framework.mvp.R; import com.mindorks.framework.mvp.data.DataManager; import com.mindorks.framework.mvp.data.network.model.LoginRequest; -import com.mindorks.framework.mvp.data.network.model.LoginResponse; import com.mindorks.framework.mvp.ui.base.BasePresenter; import com.mindorks.framework.mvp.utils.CommonUtils; @@ -62,36 +61,18 @@ public void onServerLoginClick(String email, String password) { getMvpView().showLoading(); getCompositeDisposable().add(getDataManager() - .doServerLoginApiCall(new LoginRequest.ServerLoginRequest(email, password)) + .doServerLogin(new LoginRequest.ServerLoginRequest(email, password)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { + .subscribe(new Consumer() { @Override - public void accept(LoginResponse response) throws Exception { - getDataManager().updateUserInfo( - response.getAccessToken(), - response.getUserId(), - DataManager.LoggedInMode.LOGGED_IN_MODE_SERVER, - response.getUserName(), - response.getUserEmail(), - response.getGoogleProfilePicUrl()); - - if(!isViewAttached()) { - return; - } - + public void accept(Object o) throws Exception { getMvpView().hideLoading(); getMvpView().openMainActivity(); - } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { - - if(!isViewAttached()) { - return; - } - getMvpView().hideLoading(); // handle the login error here @@ -101,6 +82,7 @@ public void accept(Throwable throwable) throws Exception { } } })); + } @Override @@ -109,35 +91,18 @@ public void onGoogleLoginClick() { getMvpView().showLoading(); getCompositeDisposable().add(getDataManager() - .doGoogleLoginApiCall(new LoginRequest.GoogleLoginRequest("test1", "test1")) + .doGoogleLogin(new LoginRequest.GoogleLoginRequest("test1", "test1")) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { + .subscribe(new Consumer() { @Override - public void accept(LoginResponse response) throws Exception { - getDataManager().updateUserInfo( - response.getAccessToken(), - response.getUserId(), - DataManager.LoggedInMode.LOGGED_IN_MODE_GOOGLE, - response.getUserName(), - response.getUserEmail(), - response.getGoogleProfilePicUrl()); - - if(!isViewAttached()) { - return; - } - + public void accept(Object aVoid) throws Exception { getMvpView().hideLoading(); getMvpView().openMainActivity(); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { - - if(!isViewAttached()) { - return; - } - getMvpView().hideLoading(); // handle the login error here @@ -155,35 +120,18 @@ public void onFacebookLoginClick() { getMvpView().showLoading(); getCompositeDisposable().add(getDataManager() - .doFacebookLoginApiCall(new LoginRequest.FacebookLoginRequest("test3", "test4")) + .doFacebookLogin(new LoginRequest.FacebookLoginRequest("test3", "test4")) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { + .subscribe(new Consumer() { @Override - public void accept(LoginResponse response) throws Exception { - getDataManager().updateUserInfo( - response.getAccessToken(), - response.getUserId(), - DataManager.LoggedInMode.LOGGED_IN_MODE_FB, - response.getUserName(), - response.getUserEmail(), - response.getGoogleProfilePicUrl()); - - if(!isViewAttached()) { - return; - } - + public void accept(Object aVoid) throws Exception { getMvpView().hideLoading(); getMvpView().openMainActivity(); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { - - if(!isViewAttached()) { - return; - } - getMvpView().hideLoading(); // handle the login error here diff --git a/app/src/main/java/com/mindorks/framework/mvp/ui/main/MainPresenter.java b/app/src/main/java/com/mindorks/framework/mvp/ui/main/MainPresenter.java index be20243..b42fb8c 100644 --- a/app/src/main/java/com/mindorks/framework/mvp/ui/main/MainPresenter.java +++ b/app/src/main/java/com/mindorks/framework/mvp/ui/main/MainPresenter.java @@ -18,7 +18,6 @@ import com.androidnetworking.error.ANError; import com.mindorks.framework.mvp.data.DataManager; import com.mindorks.framework.mvp.data.db.model.Question; -import com.mindorks.framework.mvp.data.network.model.LogoutResponse; import com.mindorks.framework.mvp.ui.base.BasePresenter; import java.util.List; @@ -54,36 +53,36 @@ public void onDrawerOptionAboutClick() { public void onDrawerOptionLogoutClick() { getMvpView().showLoading(); - getCompositeDisposable().add(getDataManager().doLogoutApiCall() + getCompositeDisposable().add(getDataManager().doLogout() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(LogoutResponse response) throws Exception { - if(!isViewAttached()) { - return; - } - - getDataManager().setUserAsLoggedOut(); - getMvpView().hideLoading(); - getMvpView().openLoginActivity(); - } - }, new Consumer() { - @Override - public void accept(Throwable throwable) throws Exception { - if(!isViewAttached()) { - return; - } - - getMvpView().hideLoading(); - - // handle the login error here - if (throwable instanceof ANError) { - ANError anError = (ANError) throwable; - handleApiError(anError); - } - } - })); + .subscribe(new Consumer() { + @Override + public void accept(Object aVoid) throws Exception { + if(!isViewAttached()) { + return; + } + + getMvpView().hideLoading(); + getMvpView().openLoginActivity(); + } + }, + new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + if(!isViewAttached()) { + return; + } + + getMvpView().hideLoading(); + + // handle the login error here + if (throwable instanceof ANError) { + ANError anError = (ANError) throwable; + handleApiError(anError); + } + } + })); } From 286843e984d1b95eef4b0f0f2d573daf17fffe50 Mon Sep 17 00:00:00 2001 From: Satya Iyengar Date: Wed, 22 Feb 2017 07:28:38 +0530 Subject: [PATCH 2/2] Check if view is attached before updating view --- .../framework/mvp/ui/login/LoginPresenter.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java b/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java index 8849ad9..ec81452 100644 --- a/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java +++ b/app/src/main/java/com/mindorks/framework/mvp/ui/login/LoginPresenter.java @@ -67,12 +67,18 @@ public void onServerLoginClick(String email, String password) { .subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); getMvpView().openMainActivity(); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); // handle the login error here @@ -97,12 +103,18 @@ public void onGoogleLoginClick() { .subscribe(new Consumer() { @Override public void accept(Object aVoid) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); getMvpView().openMainActivity(); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); // handle the login error here @@ -126,12 +138,18 @@ public void onFacebookLoginClick() { .subscribe(new Consumer() { @Override public void accept(Object aVoid) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); getMvpView().openMainActivity(); } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { + if(!isViewAttached()){ + return; + } getMvpView().hideLoading(); // handle the login error here