From a62140152098a61c469f670da010fc68dfeb7950 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Tue, 28 Nov 2017 20:45:45 +0100 Subject: [PATCH] Fix account switching Signed-off-by: Mario Danic --- .../talk/api/helpers/api/ApiHelper.java | 4 ++-- .../AccountVerificationController.java | 2 +- .../talk/controllers/CallsListController.java | 2 ++ .../talk/controllers/SettingsController.java | 14 +++++++----- .../controllers/SwitchAccountController.java | 5 +++++ .../controllers/WebViewLoginController.java | 6 +++-- .../talk/dagger/modules/RestModule.java | 22 ++++++++++++++----- 7 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java b/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java index bbad8f515..ff66b1b8d 100644 --- a/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java +++ b/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java @@ -130,8 +130,8 @@ public class ApiHelper { return baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; } - public static String getUrlForUserProfile(String baseUrl, String username) { - return baseUrl + ocsApiVersion + "/cloud/users/" + username; + public static String getUrlForUserProfile(String baseUrl) { + return baseUrl + ocsApiVersion + "/cloud/user"; } public static String getUrlPostfixForStatus() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java index 33b7e03fa..09485ab44 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java @@ -114,7 +114,7 @@ public class AccountVerificationController extends BaseController { R.string.nc_nextcloud_talk_app_installed), getResources().getString(R.string.nc_app_name))); profileQueryDisposable = ncApi.getUserProfile(credentials, - ApiHelper.getUrlForUserProfile(baseUrl, username)) + ApiHelper.getUrlForUserProfile(baseUrl)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(userProfileOverall -> { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java index 388138b35..ab191605a 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java @@ -36,6 +36,7 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.text.InputType; import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -236,6 +237,7 @@ public class CallsListController extends BaseController implements SearchView.On callItems = new ArrayList<>(); + Log.d("MARIO", userEntity.getUsername()); roomsQueryDisposable = ncApi.getRooms(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()), ApiHelper.getUrlForGetRooms(userEntity.getBaseUrl())) .subscribeOn(Schedulers.newThread()) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java index 3337bed4f..80eccebc5 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java @@ -33,7 +33,6 @@ import android.view.ViewGroup; import android.widget.TextView; import com.bluelinelabs.conductor.RouterTransaction; -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; @@ -62,6 +61,7 @@ import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener; import org.greenrobot.eventbus.EventBus; +import java.net.CookieManager; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -140,6 +140,9 @@ public class SettingsController extends BaseController { @Inject UserUtils userUtils; + @Inject + CookieManager cookieManager; + private UserEntity userEntity; private OnPreferenceValueChangedListener proxyTypeChangeListener; @@ -282,7 +285,7 @@ public class SettingsController extends BaseController { profileQueryDisposable = ncApi.getUserProfile(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()), - ApiHelper.getUrlForUserProfile(userEntity.getBaseUrl(), userEntity.getUsername())) + ApiHelper.getUrlForUserProfile(userEntity.getBaseUrl())) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(userProfileOverall -> { @@ -318,15 +321,16 @@ public class SettingsController extends BaseController { }, () -> dispose(profileQueryDisposable)); removeAccountButton.setOnClickListener(view1 -> { + cookieManager.getCookieStore().removeAll(); boolean otherUserExists = userUtils.scheduleUserForDeletionWithId(userEntity.getId()); if (otherUserExists && getView() != null) { - onAttach(getView()); onViewBound(getView()); + onAttach(getView()); } else if (!otherUserExists) { getParentController().getRouter().setRoot(RouterTransaction.with( new ServerSelectionController()) - .pushChangeHandler(new HorizontalChangeHandler()) - .popChangeHandler(new HorizontalChangeHandler())); + .pushChangeHandler(new VerticalChangeHandler()) + .popChangeHandler(new VerticalChangeHandler())); } new JobRequest.Builder(AccountRemovalJob.TAG).setUpdateCurrent(true) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java index 3199eb6f7..532a881ed 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java @@ -37,6 +37,7 @@ import com.nextcloud.talk.controllers.base.BaseController; import com.nextcloud.talk.persistence.entities.UserEntity; import com.nextcloud.talk.utils.database.user.UserUtils; +import java.net.CookieManager; import java.util.ArrayList; import java.util.List; @@ -55,6 +56,9 @@ public class SwitchAccountController extends BaseController { @Inject UserUtils userUtils; + @Inject + CookieManager cookieManager; + @BindView(R.id.recycler_view) RecyclerView recyclerView; @@ -80,6 +84,7 @@ public class SwitchAccountController extends BaseController { @Override public void onNext(UserEntity userEntity) { + cookieManager.getCookieStore().removeAll(); userUtils.disableAllUsersWithoutId(userEntity.getId()); getRouter().popCurrentController(); } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java index a5ff401ca..b5ce5af62 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java @@ -29,7 +29,6 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.SslErrorHandler; import android.webkit.WebView; @@ -84,6 +83,8 @@ public class WebViewLoginController extends BaseController { MagicTrustManager magicTrustManager; @Inject EventBus eventBus; + @Inject + java.net.CookieManager cookieManager; @BindView(R.id.webview) WebView webView; @@ -140,7 +141,7 @@ public class WebViewLoginController extends BaseController { webView.clearHistory(); CookieSyncManager.createInstance(getActivity()); - CookieManager.getInstance().removeAllCookies(null); + android.webkit.CookieManager.getInstance().removeAllCookies(null); Map headers = new HashMap<>(); headers.put("OCS-APIRequest", "true"); @@ -244,6 +245,7 @@ public class WebViewLoginController extends BaseController { userQueryDisposable = userUtils.createOrUpdateUser(loginData.getUsername(), loginData.getToken(), baseUrl, null, null, true). subscribe(userEntity -> { + cookieManager.getCookieStore().removeAll(); if (!isPasswordUpdate && finalErrorMessageType == null) { BundleBuilder bundleBuilder = new BundleBuilder(new Bundle()); bundleBuilder.putString(BundleKeys.KEY_USERNAME, userEntity.getUsername()); diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java index 80e03594a..58dee126f 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java @@ -112,22 +112,32 @@ public class RestModule { return new SSLSocketFactoryCompat(magicTrustManager); } + @Provides + @Singleton + CookieManager provideCookieManager() { + return new CookieManager(); + } + @Provides + @Singleton + Cache provideCache() { + int cacheSize = 128 * 1024 * 1024; // 128 MB + return new Cache(NextcloudTalkApplication.getSharedApplication().getCacheDir(), cacheSize); + } + @Provides @Singleton OkHttpClient provideHttpClient(Proxy proxy, AppPreferences appPreferences, MagicTrustManager magicTrustManager, - SSLSocketFactoryCompat sslSocketFactoryCompat) { + SSLSocketFactoryCompat sslSocketFactoryCompat, Cache cache, + CookieManager cookieManager) { OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.connectTimeout(30, TimeUnit.SECONDS); httpClient.readTimeout(30, TimeUnit.SECONDS); httpClient.writeTimeout(30, TimeUnit.SECONDS); - httpClient.cookieJar(new JavaNetCookieJar(new CookieManager())); - - int cacheSize = 128 * 1024 * 1024; // 128 MB - - httpClient.cache(new Cache(NextcloudTalkApplication.getSharedApplication().getCacheDir(), cacheSize)); + httpClient.cookieJar(new JavaNetCookieJar(cookieManager)); + httpClient.cache(cache); if (BuildConfig.DEBUG) { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();