| Index: components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java
|
| diff --git a/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java b/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java
|
| index a54b293c16be11d25fd00b5ad8eea1042f5eb284..7876df104acddd124c7182e8191fa1d5440a78a0 100644
|
| --- a/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java
|
| +++ b/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java
|
| @@ -17,6 +17,7 @@ import org.chromium.base.VisibleForTesting;
|
| import org.chromium.components.signin.AccountManagerHelper;
|
| import org.chromium.components.signin.ChromeSigninController;
|
|
|
| +import javax.annotation.Nullable;
|
| import javax.annotation.concurrent.ThreadSafe;
|
|
|
| /**
|
| @@ -94,7 +95,7 @@ public class AndroidSyncSettings {
|
| mContractAuthority = getContractAuthority();
|
|
|
| mAccount = ChromeSigninController.get().getSignedInUser();
|
| - updateSyncability();
|
| + updateSyncability(null);
|
| updateCachedSettings();
|
|
|
| mSyncContentResolverDelegate.addStatusChangeListener(
|
| @@ -157,10 +158,21 @@ public class AndroidSyncSettings {
|
| * Must be called when a new account is signed in.
|
| */
|
| public static void updateAccount(Context context, Account account) {
|
| + updateAccount(context, account, null);
|
| + }
|
| +
|
| + /**
|
| + * Must be called when a new account is signed in.
|
| + * @param callback Callback that will be called after updating account is finished. Boolean
|
| + * passed to the callback indicates whether syncability was changed.
|
| + */
|
| + @VisibleForTesting
|
| + public static void updateAccount(
|
| + Context context, Account account, @Nullable Callback<Boolean> callback) {
|
| ensureInitialized(context);
|
| synchronized (sInstance.mLock) {
|
| sInstance.mAccount = account;
|
| - sInstance.updateSyncability();
|
| + sInstance.updateSyncability(callback);
|
| }
|
| if (sInstance.updateCachedSettings()) {
|
| sInstance.notifyObservers();
|
| @@ -197,7 +209,7 @@ public class AndroidSyncSettings {
|
|
|
| private void setChromeSyncEnabled(boolean value) {
|
| synchronized (mLock) {
|
| - updateSyncability();
|
| + updateSyncability(null);
|
| if (value == mChromeSyncEnabled || mAccount == null) return;
|
| mChromeSyncEnabled = value;
|
|
|
| @@ -214,9 +226,12 @@ public class AndroidSyncSettings {
|
| * This is what causes the "Chrome" option to appear in Settings -> Accounts -> Sync .
|
| * This function must be called within a synchronized block.
|
| */
|
| - private void updateSyncability() {
|
| + private void updateSyncability(@Nullable final Callback<Boolean> callback) {
|
| boolean shouldBeSyncable = mAccount != null;
|
| - if (mIsSyncable == shouldBeSyncable) return;
|
| + if (mIsSyncable == shouldBeSyncable) {
|
| + if (callback != null) callback.onResult(false);
|
| + return;
|
| + }
|
|
|
| mIsSyncable = shouldBeSyncable;
|
|
|
| @@ -244,6 +259,8 @@ public class AndroidSyncSettings {
|
| }
|
| }
|
| StrictMode.setThreadPolicy(oldPolicy);
|
| +
|
| + if (callback != null) callback.onResult(true);
|
| }
|
| });
|
| }
|
|
|