| Index: sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
|
| diff --git a/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java b/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
|
| index ccdee86ca3dff3a33737e28d06e32ddea2490476..3587e76bb1dfc41b24d7a037e5cb8d8a3ebca4dc 100644
|
| --- a/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
|
| +++ b/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
|
| @@ -160,6 +160,7 @@ public class AndroidSyncSettings {
|
| public void updateAccount(Account account) {
|
| synchronized (mLock) {
|
| mAccount = account;
|
| + updateSyncability();
|
| }
|
| if (updateCachedSettings()) {
|
| notifyObservers();
|
| @@ -193,9 +194,8 @@ public class AndroidSyncSettings {
|
|
|
| private void setChromeSyncEnabled(boolean value) {
|
| synchronized (mLock) {
|
| - if (mAccount == null) return;
|
| - ensureSyncable();
|
| - if (value == mChromeSyncEnabled) return;
|
| + updateSyncability();
|
| + if (value == mChromeSyncEnabled || mAccount == null) return;
|
| mChromeSyncEnabled = value;
|
|
|
| StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
|
| @@ -206,18 +206,22 @@ public class AndroidSyncSettings {
|
| }
|
|
|
| /**
|
| - * Ensure Chrome is registered with the Android Sync Manager.
|
| + * Ensure Chrome is registered with the Android Sync Manager iff signed in.
|
| *
|
| * This is what causes the "Chrome" option to appear in Settings -> Accounts -> Sync .
|
| * This function must be called within a synchronized block.
|
| */
|
| - private void ensureSyncable() {
|
| - if (mIsSyncable || mAccount == null) return;
|
| + private void updateSyncability() {
|
| + boolean shouldBeSyncable = mAccount != null;
|
| + if (mIsSyncable == shouldBeSyncable) return;
|
|
|
| - mIsSyncable = true;
|
| + mIsSyncable = shouldBeSyncable;
|
|
|
| StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
|
| - mSyncContentResolverDelegate.setIsSyncable(mAccount, mContractAuthority, 1);
|
| + // Make account syncable if there is one.
|
| + if (shouldBeSyncable) {
|
| + mSyncContentResolverDelegate.setIsSyncable(mAccount, mContractAuthority, 1);
|
| + }
|
|
|
| // Disable the syncability of Chrome for all other accounts. Don't use
|
| // our cache as we're touching many accounts that aren't signed in, so this saves
|
|
|