فهرست منبع

Fix account switching

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 7 سال پیش
والد
کامیت
a621401520

+ 2 - 2
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() {

+ 1 - 1
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 -> {

+ 2 - 0
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())

+ 9 - 5
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<String> 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)

+ 5 - 0
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();
                                     }

+ 4 - 2
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<String, String> 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());

+ 16 - 6
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();