Commit 35db77df authored by Victor Hugo Vianna Silva's avatar Victor Hugo Vianna Silva Committed by Chromium LUCI CQ

Remove remaining AndroidSyncSettingsObservers

For all remaining implementations except SyncController, implementing
SyncStateChangedListener (~SyncServiceObserver) is enough. So this CL
converts the observer interface into a delegate interface.

Bug: 1107904
Change-Id: Iaa2acd4cbb6ce0efc6b8d9a6e441f4e2b1f8e4df
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2570573
Commit-Queue: Victor Vianna <victorvianna@google.com>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833387}
parent 6f1fd2b8
...@@ -15,7 +15,6 @@ import androidx.annotation.Nullable; ...@@ -15,7 +15,6 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.ObserverList;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.base.task.PostTask; import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
...@@ -33,7 +32,6 @@ import org.chromium.content_public.browser.UiThreadTaskTraits; ...@@ -33,7 +32,6 @@ import org.chromium.content_public.browser.UiThreadTaskTraits;
* DecoupleSyncFromAndroidMasterSync is enabled. * DecoupleSyncFromAndroidMasterSync is enabled.
* *
* A helper class to handle the current status of sync for Chrome in Android settings. * 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.
* *
* {@link #updateAccount(Account)} should be invoked whenever sync account is changed. * {@link #updateAccount(Account)} should be invoked whenever sync account is changed.
*/ */
...@@ -57,12 +55,14 @@ public class AndroidSyncSettings { ...@@ -57,12 +55,14 @@ public class AndroidSyncSettings {
private boolean mShouldDecoupleSyncFromMasterSync; private boolean mShouldDecoupleSyncFromMasterSync;
private final ObserverList<AndroidSyncSettingsObserver> mObservers = new ObserverList<>(); // Is set at most once.
@Nullable
private Delegate mDelegate;
/** /**
* Provides notifications when Android sync settings have changed. * Propagates changes from Android sync settings to the native code.
*/ */
public interface AndroidSyncSettingsObserver { public interface Delegate {
void androidSyncSettingsChanged(); void androidSyncSettingsChanged();
} }
...@@ -122,9 +122,7 @@ public class AndroidSyncSettings { ...@@ -122,9 +122,7 @@ public class AndroidSyncSettings {
// This is called by Android on a background thread, but AndroidSyncSettings // This is called by Android on a background thread, but AndroidSyncSettings
// methods should be called from the UI thread, so post a task. // methods should be called from the UI thread, so post a task.
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
if (updateCachedSettings()) { if (updateCachedSettings()) maybeNotifyDelegate();
notifyObservers();
}
}); });
} }
}; };
...@@ -190,9 +188,7 @@ public class AndroidSyncSettings { ...@@ -190,9 +188,7 @@ public class AndroidSyncSettings {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
mAccount = account; mAccount = account;
updateSyncability(); updateSyncability();
if (updateCachedSettings()) { if (updateCachedSettings()) maybeNotifyDelegate();
notifyObservers();
}
} }
/** /**
...@@ -206,19 +202,13 @@ public class AndroidSyncSettings { ...@@ -206,19 +202,13 @@ public class AndroidSyncSettings {
} }
/** /**
* Add a new AndroidSyncSettingsObserver. * Must be called at most once to set a (non-null) delegate.
*/ */
public void registerObserver(AndroidSyncSettingsObserver observer) { public void setDelegate(Delegate delegate) {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
mObservers.addObserver(observer); assert delegate != null;
} assert mDelegate == null;
mDelegate = delegate;
/**
* Remove an AndroidSyncSettingsObserver that was previously added.
*/
public void unregisterObserver(AndroidSyncSettingsObserver observer) {
ThreadUtils.assertOnUiThread();
mObservers.removeObserver(observer);
} }
private void setChromeSyncEnabled(boolean value) { private void setChromeSyncEnabled(boolean value) {
...@@ -227,7 +217,7 @@ public class AndroidSyncSettings { ...@@ -227,7 +217,7 @@ public class AndroidSyncSettings {
mChromeSyncEnabled = value; mChromeSyncEnabled = value;
mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mContractAuthority, value); mSyncContentResolverDelegate.setSyncAutomatically(mAccount, mContractAuthority, value);
notifyObservers(); maybeNotifyDelegate();
} }
/** /**
...@@ -301,10 +291,8 @@ public class AndroidSyncSettings { ...@@ -301,10 +291,8 @@ public class AndroidSyncSettings {
|| oldMasterSyncEnabled != mMasterSyncEnabled; || oldMasterSyncEnabled != mMasterSyncEnabled;
} }
private void notifyObservers() { private void maybeNotifyDelegate() {
for (AndroidSyncSettingsObserver observer : mObservers) { if (mDelegate != null) mDelegate.androidSyncSettingsChanged();
observer.androidSyncSettingsChanged();
}
} }
/** /**
......
...@@ -36,8 +36,8 @@ import org.chromium.components.sync.StopSource; ...@@ -36,8 +36,8 @@ import org.chromium.components.sync.StopSource;
* are careful to not change the Android Chrome sync setting so we know whether to turn sync back * are careful to not change the Android Chrome sync setting so we know whether to turn sync back
* on when it is re-enabled. * on when it is re-enabled.
*/ */
public class SyncController implements ProfileSyncService.SyncStateChangedListener, public class SyncController
AndroidSyncSettings.AndroidSyncSettingsObserver { implements ProfileSyncService.SyncStateChangedListener, AndroidSyncSettings.Delegate {
private static final String TAG = "SyncController"; private static final String TAG = "SyncController";
/** /**
...@@ -58,7 +58,7 @@ public class SyncController implements ProfileSyncService.SyncStateChangedListen ...@@ -58,7 +58,7 @@ public class SyncController implements ProfileSyncService.SyncStateChangedListen
private final SyncNotificationController mSyncNotificationController; private final SyncNotificationController mSyncNotificationController;
private SyncController() { private SyncController() {
AndroidSyncSettings.get().registerObserver(this); AndroidSyncSettings.get().setDelegate(this);
mProfileSyncService = ProfileSyncService.get(); mProfileSyncService = ProfileSyncService.get();
mProfileSyncService.addSyncStateChangedListener(this); mProfileSyncService.addSyncStateChangedListener(this);
...@@ -154,7 +154,7 @@ public class SyncController implements ProfileSyncService.SyncStateChangedListen ...@@ -154,7 +154,7 @@ public class SyncController implements ProfileSyncService.SyncStateChangedListen
} }
/** /**
* From {@link AndroidSyncSettings.AndroidSyncSettingsObserver}. * From {@link AndroidSyncSettings.Delegate}.
*/ */
@Override @Override
public void androidSyncSettingsChanged() { public void androidSyncSettingsChanged() {
......
...@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.SigninUtils; ...@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.SigninUtils;
import org.chromium.chrome.browser.signin.services.DisplayableProfileData; import org.chromium.chrome.browser.signin.services.DisplayableProfileData;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver; import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService;
import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener;
import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils; import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils;
...@@ -48,7 +47,6 @@ import java.util.Collections; ...@@ -48,7 +47,6 @@ import java.util.Collections;
*/ */
public class SignInPreference public class SignInPreference
extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer, extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer,
AndroidSyncSettings.AndroidSyncSettingsObserver,
SyncStateChangedListener, AccountsChangeObserver { SyncStateChangedListener, AccountsChangeObserver {
@IntDef({State.SIGNIN_DISABLED_BY_POLICY, State.SIGNIN_DISALLOWED, State.GENERIC_PROMO, @IntDef({State.SIGNIN_DISABLED_BY_POLICY, State.SIGNIN_DISALLOWED, State.GENERIC_PROMO,
State.SIGNED_IN}) State.SIGNED_IN})
...@@ -94,7 +92,6 @@ public class SignInPreference ...@@ -94,7 +92,6 @@ public class SignInPreference
.addSignInAllowedObserver(this); .addSignInAllowedObserver(this);
mProfileDataCache.addObserver(this); mProfileDataCache.addObserver(this);
FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone(); FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone();
AndroidSyncSettings.get().registerObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.addSyncStateChangedListener(this); syncService.addSyncStateChangedListener(this);
...@@ -112,7 +109,6 @@ public class SignInPreference ...@@ -112,7 +109,6 @@ public class SignInPreference
.getSigninManager(Profile.getLastUsedRegularProfile()) .getSigninManager(Profile.getLastUsedRegularProfile())
.removeSignInAllowedObserver(this); .removeSignInAllowedObserver(this);
mProfileDataCache.removeObserver(this); mProfileDataCache.removeObserver(this);
AndroidSyncSettings.get().unregisterObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.removeSyncStateChangedListener(this); syncService.removeSyncStateChangedListener(this);
...@@ -257,12 +253,6 @@ public class SignInPreference ...@@ -257,12 +253,6 @@ public class SignInPreference
update(); update();
} }
// AndroidSyncSettings.AndroidSyncSettingsObserver implementation.
@Override
public void androidSyncSettingsChanged() {
update();
}
// AccountsChangeObserver implementation. // AccountsChangeObserver implementation.
@Override @Override
public void onAccountsChanged() { public void onAccountsChanged() {
......
...@@ -18,7 +18,6 @@ import org.chromium.chrome.browser.profiles.Profile; ...@@ -18,7 +18,6 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView; import org.chromium.chrome.browser.signin.PersonalizedSigninPromoView;
import org.chromium.chrome.browser.signin.ProfileDataCache; import org.chromium.chrome.browser.signin.ProfileDataCache;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService;
import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils.SyncError; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils.SyncError;
import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.base.CoreAccountInfo;
...@@ -27,8 +26,7 @@ import org.chromium.components.signin.identitymanager.ConsentLevel; ...@@ -27,8 +26,7 @@ import org.chromium.components.signin.identitymanager.ConsentLevel;
import java.util.Collections; import java.util.Collections;
public class SyncErrorCardPreference extends Preference public class SyncErrorCardPreference extends Preference
implements AndroidSyncSettings.AndroidSyncSettingsObserver, implements ProfileSyncService.SyncStateChangedListener, ProfileDataCache.Observer {
ProfileSyncService.SyncStateChangedListener, ProfileDataCache.Observer {
/** /**
* Listener for the buttons in the error card. * Listener for the buttons in the error card.
*/ */
...@@ -68,7 +66,6 @@ public class SyncErrorCardPreference extends Preference ...@@ -68,7 +66,6 @@ public class SyncErrorCardPreference extends Preference
public void onAttached() { public void onAttached() {
super.onAttached(); super.onAttached();
mProfileDataCache.addObserver(this); mProfileDataCache.addObserver(this);
AndroidSyncSettings.get().registerObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.addSyncStateChangedListener(this); syncService.addSyncStateChangedListener(this);
...@@ -80,7 +77,6 @@ public class SyncErrorCardPreference extends Preference ...@@ -80,7 +77,6 @@ public class SyncErrorCardPreference extends Preference
public void onDetached() { public void onDetached() {
super.onDetached(); super.onDetached();
mProfileDataCache.removeObserver(this); mProfileDataCache.removeObserver(this);
AndroidSyncSettings.get().unregisterObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.removeSyncStateChangedListener(this); syncService.removeSyncStateChangedListener(this);
...@@ -172,14 +168,6 @@ public class SyncErrorCardPreference extends Preference ...@@ -172,14 +168,6 @@ public class SyncErrorCardPreference extends Preference
update(); update();
} }
/**
* {@link AndroidSyncSettings.AndroidSyncSettingsObserver} implementation.
*/
@Override
public void androidSyncSettingsChanged() {
update();
}
/** /**
* {@link ProfileDataCache.Observer} implementation. * {@link ProfileDataCache.Observer} implementation.
*/ */
......
...@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.SigninPromoController; ...@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.signin.SigninPromoController;
import org.chromium.chrome.browser.signin.SigninPromoUtil; import org.chromium.chrome.browser.signin.SigninPromoUtil;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver; import org.chromium.chrome.browser.signin.services.SigninManager.SignInAllowedObserver;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService;
import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener;
import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacade;
...@@ -42,7 +41,6 @@ import java.lang.annotation.RetentionPolicy; ...@@ -42,7 +41,6 @@ import java.lang.annotation.RetentionPolicy;
// TODO(https://crbug.com/1110889): Move all promos from SigninPreference to this class. // TODO(https://crbug.com/1110889): Move all promos from SigninPreference to this class.
public class SyncPromoPreference public class SyncPromoPreference
extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer, extends Preference implements SignInAllowedObserver, ProfileDataCache.Observer,
AndroidSyncSettings.AndroidSyncSettingsObserver,
SyncStateChangedListener, AccountsChangeObserver { SyncStateChangedListener, AccountsChangeObserver {
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({State.PROMO_HIDDEN, State.PERSONALIZED_SIGNIN_PROMO, State.PERSONALIZED_SYNC_PROMO}) @IntDef({State.PROMO_HIDDEN, State.PERSONALIZED_SIGNIN_PROMO, State.PERSONALIZED_SYNC_PROMO})
...@@ -83,7 +81,6 @@ public class SyncPromoPreference ...@@ -83,7 +81,6 @@ public class SyncPromoPreference
.addSignInAllowedObserver(this); .addSignInAllowedObserver(this);
mProfileDataCache.addObserver(this); mProfileDataCache.addObserver(this);
FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone(); FirstRunSignInProcessor.updateSigninManagerFirstRunCheckDone();
AndroidSyncSettings.get().registerObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.addSyncStateChangedListener(this); syncService.addSyncStateChangedListener(this);
...@@ -101,7 +98,6 @@ public class SyncPromoPreference ...@@ -101,7 +98,6 @@ public class SyncPromoPreference
.getSigninManager(Profile.getLastUsedRegularProfile()) .getSigninManager(Profile.getLastUsedRegularProfile())
.removeSignInAllowedObserver(this); .removeSignInAllowedObserver(this);
mProfileDataCache.removeObserver(this); mProfileDataCache.removeObserver(this);
AndroidSyncSettings.get().unregisterObserver(this);
ProfileSyncService syncService = ProfileSyncService.get(); ProfileSyncService syncService = ProfileSyncService.get();
if (syncService != null) { if (syncService != null) {
syncService.removeSyncStateChangedListener(this); syncService.removeSyncStateChangedListener(this);
...@@ -224,12 +220,6 @@ public class SyncPromoPreference ...@@ -224,12 +220,6 @@ public class SyncPromoPreference
update(); update();
} }
// AndroidSyncSettings.AndroidSyncSettingsObserver implementation.
@Override
public void androidSyncSettingsChanged() {
update();
}
// AccountsChangeObserver implementation. // AccountsChangeObserver implementation.
@Override @Override
public void onAccountsChanged() { public void onAccountsChanged() {
......
...@@ -31,7 +31,6 @@ import org.mockito.junit.MockitoRule; ...@@ -31,7 +31,6 @@ import org.mockito.junit.MockitoRule;
import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.sync.AndroidSyncSettings.AndroidSyncSettingsObserver;
import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.ChromeBrowserTestRule;
import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.AccountManagerFacadeProvider;
...@@ -100,8 +99,8 @@ public class AndroidSyncSettingsTest { ...@@ -100,8 +99,8 @@ public class AndroidSyncSettingsTest {
} }
} }
// Should live on the UI thread as normal a AndroidSyncSettingsObserver. // Should live on the UI thread as a normal AndroidSyncSettings.Delegate.
private static class MockSyncSettingsObserver implements AndroidSyncSettingsObserver { private static class MockSyncSettingsDelegate implements AndroidSyncSettings.Delegate {
private boolean mReceivedNotification; private boolean mReceivedNotification;
public void clearNotification() { public void clearNotification() {
...@@ -339,42 +338,42 @@ public class AndroidSyncSettingsTest { ...@@ -339,42 +338,42 @@ public class AndroidSyncSettingsTest {
@Test @Test
@SmallTest @SmallTest
@Feature({"Sync"}) @Feature({"Sync"})
public void testAndroidSyncSettingsPostsNotifications() { public void testAndroidSyncSettingsNotifiesDelegate() {
createAndroidSyncSettings(); createAndroidSyncSettings();
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
MockSyncSettingsObserver syncSettingsObserver = new MockSyncSettingsObserver(); MockSyncSettingsDelegate syncSettingsDelegate = new MockSyncSettingsDelegate();
mAndroidSyncSettings.registerObserver(syncSettingsObserver); mAndroidSyncSettings.setDelegate(syncSettingsDelegate);
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.enableChromeSync(); mAndroidSyncSettings.enableChromeSync();
Assert.assertTrue("enableChromeSync should trigger observers", Assert.assertTrue("enableChromeSync should notify delegate",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.updateAccount(mAlternateAccount); mAndroidSyncSettings.updateAccount(mAlternateAccount);
Assert.assertTrue("switching to account with different settings should notify", Assert.assertTrue("switching to account with different settings should notify",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.updateAccount(mAccount); mAndroidSyncSettings.updateAccount(mAccount);
Assert.assertTrue("switching to account with different settings should notify", Assert.assertTrue("switching to account with different settings should notify",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.enableChromeSync(); mAndroidSyncSettings.enableChromeSync();
Assert.assertFalse("enableChromeSync shouldn't trigger observers", Assert.assertFalse("enableChromeSync shouldn't notify delegate",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.disableChromeSync(); mAndroidSyncSettings.disableChromeSync();
Assert.assertTrue("disableChromeSync should trigger observers", Assert.assertTrue("disableChromeSync should notify delegate",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
syncSettingsObserver.clearNotification(); syncSettingsDelegate.clearNotification();
mAndroidSyncSettings.disableChromeSync(); mAndroidSyncSettings.disableChromeSync();
Assert.assertFalse("disableChromeSync shouldn't observers", Assert.assertFalse("disableChromeSync shouldn't notify delegate",
syncSettingsObserver.receivedNotification()); syncSettingsDelegate.receivedNotification());
}); });
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment