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 |