Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/android/OWNERS ('k') | sync/android/java/src/org/chromium/sync/ModelTypeHelper.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
deleted file mode 100644
index 426abc5467f17b49f0482e6f5fb5a95e4b823ca3..0000000000000000000000000000000000000000
--- a/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
+++ /dev/null
@@ -1,304 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.sync;
-
-import android.accounts.Account;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.SyncStatusObserver;
-import android.os.Bundle;
-import android.os.StrictMode;
-
-import org.chromium.base.Callback;
-import org.chromium.base.ObserverList;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.sync.signin.AccountManagerHelper;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-/**
- * A helper class to handle the current status of sync for Chrome in Android settings.
- *
- * It also provides an observer to be used whenever Android sync settings change.
- *
- * This class is a collection of static methods so that no references to its object can be
- * stored. This is important because tests need to be able to overwrite the object with a
- * mock content resolver and know that no references to the old one are cached.
- *
- * This class must be initialized via updateAccount() on startup if the user is signed in.
- */
-@ThreadSafe
-public class AndroidSyncSettings {
-
- public static final String TAG = "AndroidSyncSettings";
-
- /**
- * Lock for ensuring singleton instantiation across threads.
- */
- private static final Object CLASS_LOCK = new Object();
-
- private static AndroidSyncSettings sInstance;
-
- private final Object mLock = new Object();
-
- private final String mContractAuthority;
-
- private final Context mApplicationContext;
-
- private final SyncContentResolverDelegate mSyncContentResolverDelegate;
-
- private Account mAccount = null;
-
- private boolean mIsSyncable = false;
-
- private boolean mChromeSyncEnabled = false;
-
- private boolean mMasterSyncEnabled = false;
-
- private final ObserverList<AndroidSyncSettingsObserver> mObservers =
- new ObserverList<AndroidSyncSettingsObserver>();
-
- /**
- * Provides notifications when Android sync settings have changed.
- */
- public interface AndroidSyncSettingsObserver {
- public void androidSyncSettingsChanged();
- }
-
- private static void ensureInitialized(Context context) {
- synchronized (CLASS_LOCK) {
- if (sInstance == null) {
- SyncContentResolverDelegate contentResolver =
- new SystemSyncContentResolverDelegate();
- sInstance = new AndroidSyncSettings(context, contentResolver);
- }
- }
- }
-
- @VisibleForTesting
- public static void overrideForTests(Context context,
- SyncContentResolverDelegate contentResolver) {
- synchronized (CLASS_LOCK) {
- sInstance = new AndroidSyncSettings(context, contentResolver);
- }
- }
-
- /**
- * @param context the context the ApplicationContext will be retrieved from.
- * @param syncContentResolverDelegate an implementation of {@link SyncContentResolverDelegate}.
- */
- private AndroidSyncSettings(Context context,
- SyncContentResolverDelegate syncContentResolverDelegate) {
- mApplicationContext = context.getApplicationContext();
- mSyncContentResolverDelegate = syncContentResolverDelegate;
- mContractAuthority = getContractAuthority();
-
- updateCachedSettings();
-
- mSyncContentResolverDelegate.addStatusChangeListener(
- ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS,
- new AndroidSyncSettingsChangedObserver());
- }
-
- /**
- * Checks whether sync is currently enabled from Chrome for the currently signed in account.
- *
- * It checks both the master sync for the device, and Chrome sync setting for the given account.
- * If no user is currently signed in it returns false.
- *
- * @return true if sync is on, false otherwise
- */
- public static boolean isSyncEnabled(Context context) {
- ensureInitialized(context);
- return sInstance.mMasterSyncEnabled && sInstance.mChromeSyncEnabled;
- }
-
- /**
- * Checks whether sync is currently enabled from Chrome for a given account.
- *
- * It checks only Chrome sync setting for the given account,
- * and ignores the master sync setting.
- *
- * @return true if sync is on, false otherwise
- */
- @VisibleForTesting
- public static boolean isChromeSyncEnabled(Context context) {
- ensureInitialized(context);
- return sInstance.mChromeSyncEnabled;
- }
-
- /**
- * Checks whether the master sync flag for Android is currently enabled.
- */
- public static boolean isMasterSyncEnabled(Context context) {
- ensureInitialized(context);
- return sInstance.mMasterSyncEnabled;
- }
-
- /**
- * Make sure Chrome is syncable, and enable sync.
- */
- public static void enableChromeSync(Context context) {
- ensureInitialized(context);
- sInstance.setChromeSyncEnabled(true);
- }
-
- /**
- * Disables Android Chrome sync
- */
- public static void disableChromeSync(Context context) {
- ensureInitialized(context);
- sInstance.setChromeSyncEnabled(false);
- }
-
- /**
- * Must be called when a new account is signed in.
- */
- public static void updateAccount(Context context, Account account) {
- ensureInitialized(context);
- synchronized (sInstance.mLock) {
- sInstance.mAccount = account;
- sInstance.updateSyncability();
- }
- if (sInstance.updateCachedSettings()) {
- sInstance.notifyObservers();
- }
- }
-
- /**
- * Returns the contract authority to use when requesting sync.
- */
- public static String getContractAuthority(Context context) {
- ensureInitialized(context);
- return sInstance.getContractAuthority();
- }
-
- /**
- * Add a new AndroidSyncSettingsObserver.
- */
- public static void registerObserver(Context context, AndroidSyncSettingsObserver observer) {
- ensureInitialized(context);
- synchronized (sInstance.mLock) {
- sInstance.mObservers.addObserver(observer);
- }
- }
-
- /**
- * Remove an AndroidSyncSettingsObserver that was previously added.
- */
- public static void unregisterObserver(Context context, AndroidSyncSettingsObserver observer) {
- ensureInitialized(context);
- synchronized (sInstance.mLock) {
- sInstance.mObservers.removeObserver(observer);
- }
- }
-
- private void setChromeSyncEnabled(boolean value) {
- synchronized (mLock) {
- updateSyncability();
- if (value == mChromeSyncEnabled || mAccount == null) return;
- mChromeSyncEnabled = value;
-
- StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
- mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mContractAuthority, value);
- StrictMode.setThreadPolicy(oldPolicy);
- }
- notifyObservers();
- }
-
- /**
- * 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 updateSyncability() {
- boolean shouldBeSyncable = mAccount != null;
- if (mIsSyncable == shouldBeSyncable) return;
-
- mIsSyncable = shouldBeSyncable;
-
- StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
- // Make account syncable if there is one.
- if (shouldBeSyncable) {
- mSyncContentResolverDelegate.setIsSyncable(mAccount, mContractAuthority, 1);
- // This reduces unnecessary resource usage. See http://crbug.com/480688 for details.
- mSyncContentResolverDelegate.removePeriodicSync(
- mAccount, mContractAuthority, Bundle.EMPTY);
- }
- StrictMode.setThreadPolicy(oldPolicy);
-
- // Disable the syncability of Chrome for all other accounts.
- AccountManagerHelper.get(mApplicationContext).getGoogleAccounts(new Callback<Account[]>() {
- @Override
- public void onResult(Account[] accounts) {
- StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
- for (Account account : accounts) {
- if (!account.equals(mAccount) && mSyncContentResolverDelegate.getIsSyncable(
- account, mContractAuthority) > 0) {
- mSyncContentResolverDelegate.setIsSyncable(account, mContractAuthority, 0);
- }
- }
- StrictMode.setThreadPolicy(oldPolicy);
- }
- });
- }
-
- /**
- * Helper class to be used by observers whenever sync settings change.
- *
- * To register the observer, call AndroidSyncSettings.registerObserver(...).
- */
- private class AndroidSyncSettingsChangedObserver implements SyncStatusObserver {
- @Override
- public void onStatusChanged(int which) {
- if (which == ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS) {
- // Sync settings have changed; update our cached values.
- if (updateCachedSettings()) {
- // If something actually changed, tell our observers.
- notifyObservers();
- }
- }
- }
- }
-
- /**
- * Update the three cached settings from the content resolver.
- *
- * @return Whether either chromeSyncEnabled or masterSyncEnabled changed.
- */
- private boolean updateCachedSettings() {
- synchronized (mLock) {
- boolean oldChromeSyncEnabled = mChromeSyncEnabled;
- boolean oldMasterSyncEnabled = mMasterSyncEnabled;
-
- StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
- if (mAccount != null) {
- mIsSyncable = mSyncContentResolverDelegate.getIsSyncable(
- mAccount, mContractAuthority) == 1;
- mChromeSyncEnabled = mSyncContentResolverDelegate.getSyncAutomatically(
- mAccount, mContractAuthority);
- } else {
- mIsSyncable = false;
- mChromeSyncEnabled = false;
- }
- mMasterSyncEnabled = mSyncContentResolverDelegate.getMasterSyncAutomatically();
- StrictMode.setThreadPolicy(oldPolicy);
-
- return oldChromeSyncEnabled != mChromeSyncEnabled
- || oldMasterSyncEnabled != mMasterSyncEnabled;
- }
- }
-
- private void notifyObservers() {
- for (AndroidSyncSettingsObserver observer : mObservers) {
- observer.androidSyncSettingsChanged();
- }
- }
-
- private String getContractAuthority() {
- return mApplicationContext.getPackageName();
- }
-}
« no previous file with comments | « sync/android/OWNERS ('k') | sync/android/java/src/org/chromium/sync/ModelTypeHelper.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698