Index: chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
index 10c5ebf756abeb35131d2d3f01f5fc4620017ec5..89f663a425f09cdcab16893c74d36bec73f68781 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
@@ -9,6 +9,8 @@ import android.preference.Preference; |
import android.preference.Preference.OnPreferenceChangeListener; |
import android.text.TextUtils; |
+import org.chromium.base.Callback; |
+import org.chromium.base.Promise; |
import org.chromium.chrome.browser.preferences.SyncedAccountPreference; |
import org.chromium.chrome.browser.signin.SigninManager; |
import org.chromium.chrome.browser.signin.SigninManager.SignInCallback; |
@@ -66,27 +68,23 @@ public class SyncAccountSwitcher |
public void onConfirm(final boolean wipeData) { |
assert mNewAccountName != null; |
- final SigninManager.SignInCallback callback = this; |
- |
- // Sign out first to get sync working correctly. |
- SigninManager.get(mActivity).signOut(new Runnable() { |
- @Override |
- public void run() { |
- SigninManager.get(mActivity).clearLastSignedInUser(); |
- |
- if (wipeData) { |
- SyncUserDataWiper.wipeSyncUserData(new Runnable() { |
- @Override |
- public void run() { |
- SigninManager.get(mActivity) |
- .signIn(mNewAccountName, mActivity, callback); |
- } |
- }); |
- } else { |
- SigninManager.get(mActivity).signIn(mNewAccountName, mActivity, callback); |
- } |
- } |
- }); |
+ // Sign out first to ensure we don't wipe the data when sync is still on. |
+ SigninManager.get(mActivity).signOutPromise() |
+ .then(new Promise.AsyncFunction<Void, Void>(){ |
+ @Override |
+ public Promise<Void> apply(Void argument) { |
+ // Once signed out, clear the last signed in user and wipe data if needed. |
+ SigninManager.get(mActivity).clearLastSignedInUser(); |
+ return SigninManager.wipeSyncUserDataIfRequired(wipeData); |
+ } |
+ }).then(new Callback<Void>(){ |
+ @Override |
+ public void onResult(Void result) { |
+ // Once the data has been wiped (if needed), sign in to the next account. |
+ SigninManager.get(mActivity) |
+ .signIn(mNewAccountName, mActivity, SyncAccountSwitcher.this); |
+ } |
+ }); |
} |
@Override |