From b6d654f1783d77636a5ee6d5747288cb71f141f1 Mon Sep 17 00:00:00 2001 From: Hawkwood Glazier Date: Fri, 21 Oct 2022 16:03:07 +0000 Subject: [PATCH] Complete Initialization of ClockRegistry in singleton provider This ensures we've set the flag right when the registry is created. It also allows us to disable plugin loading when the flag is flipped off. This ensures we won't cause syshealth isues for T. Bug: 229771520 Bug: 254235245 Test: Manually verified clocks work in both flag states Change-Id: I64c0f226db11f46922c44f2cc68be1efb26b06bb --- .../systemui/shared/clocks/ClockRegistry.kt | 28 +++++++++++-------- .../KeyguardClockSwitchController.java | 6 +--- .../keyguard/dagger/ClockRegistryModule.java | 14 ++++++++-- .../KeyguardClockSwitchControllerTest.java | 6 +--- .../shared/clocks/ClockRegistryTest.kt | 6 ++-- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt index cd272635905b6..48821e8d0bd35 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt @@ -18,7 +18,6 @@ import android.database.ContentObserver import android.graphics.drawable.Drawable import android.net.Uri import android.os.Handler -import android.os.UserHandle import android.provider.Settings import android.util.Log import com.android.internal.annotations.Keep @@ -39,15 +38,15 @@ open class ClockRegistry( val context: Context, val pluginManager: PluginManager, val handler: Handler, - defaultClockProvider: ClockProvider + val isEnabled: Boolean, + userHandle: Int, + defaultClockProvider: ClockProvider, ) { // Usually this would be a typealias, but a SAM provides better java interop fun interface ClockChangeListener { fun onClockChanged() } - var isEnabled: Boolean = false - private val gson = Gson() private val availableClocks = mutableMapOf() private val clockChangeListeners = mutableListOf() @@ -97,14 +96,19 @@ open class ClockRegistry( ) } - pluginManager.addPluginListener(pluginListener, ClockProviderPlugin::class.java, - true /* allowMultiple */) - context.contentResolver.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE), - false, - settingObserver, - UserHandle.USER_ALL - ) + if (isEnabled) { + pluginManager.addPluginListener( + pluginListener, + ClockProviderPlugin::class.java, + /*allowMultiple=*/ true + ) + context.contentResolver.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE), + /*notifyForDescendants=*/ false, + settingObserver, + userHandle + ) + } } private fun connectClocks(provider: ClockProvider) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 35eecdf27f484..d3cc7ed08a82f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -37,8 +37,6 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.flags.Flags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.plugins.ClockAnimations; import com.android.systemui.plugins.ClockController; @@ -120,8 +118,7 @@ public class KeyguardClockSwitchController extends ViewController { setClock(mClockRegistry.createCurrentClock()); }; diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java index f43f559b4234a..9767313331d35 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java @@ -18,10 +18,13 @@ package com.android.keyguard.dagger; import android.content.Context; import android.os.Handler; +import android.os.UserHandle; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Application; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.flags.Flags; import com.android.systemui.shared.clocks.ClockRegistry; import com.android.systemui.shared.clocks.DefaultClockProvider; import com.android.systemui.shared.plugins.PluginManager; @@ -39,7 +42,14 @@ public abstract class ClockRegistryModule { @Application Context context, PluginManager pluginManager, @Main Handler handler, - DefaultClockProvider defaultClockProvider) { - return new ClockRegistry(context, pluginManager, handler, defaultClockProvider); + DefaultClockProvider defaultClockProvider, + FeatureFlags featureFlags) { + return new ClockRegistry( + context, + pluginManager, + handler, + featureFlags.isEnabled(Flags.LOCKSCREEN_CUSTOM_CLOCKS), + UserHandle.USER_ALL, + defaultClockProvider); } } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java index 627d738a895f6..61c7bb500e6ab 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java @@ -44,7 +44,6 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; -import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.plugins.ClockAnimations; import com.android.systemui.plugins.ClockController; @@ -105,8 +104,6 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase { private FrameLayout mLargeClockFrame; @Mock private SecureSettings mSecureSettings; - @Mock - private FeatureFlags mFeatureFlags; private final View mFakeSmartspaceView = new View(mContext); @@ -143,8 +140,7 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase { mSecureSettings, mExecutor, mDumpManager, - mClockEventController, - mFeatureFlags + mClockEventController ); when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE); diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt index ffb41e5378bda..70cbc64c79f10 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt @@ -19,6 +19,7 @@ import android.content.ContentResolver import android.content.Context import android.graphics.drawable.Drawable import android.os.Handler +import android.os.UserHandle import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase @@ -104,13 +105,14 @@ class ClockRegistryTest : SysuiTestCase() { mockContext, mockPluginManager, mockHandler, - fakeDefaultProvider + isEnabled = true, + userHandle = UserHandle.USER_ALL, + defaultClockProvider = fakeDefaultProvider ) { override var currentClockId: ClockId get() = settingValue set(value) { settingValue = value } } - registry.isEnabled = true verify(mockPluginManager) .addPluginListener(captor.capture(), eq(ClockProviderPlugin::class.java), eq(true))