From d0a7f18b364770fd73ebb3baadcb72130a2a8822 Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Wed, 29 Dec 2021 16:58:49 +0000 Subject: [PATCH] [Status Bar Refactor] Have SBHideIconsForBouncerManager listen to window state directly instead of getting it from StatusBar.java Fixes: 212424936 Test: manual Test: atest Change-Id: I594894928b27ce547c21467295c15e91f07db851 --- .../android/systemui/statusbar/phone/StatusBar.java | 8 -------- .../phone/StatusBarHideIconsForBouncerManager.kt | 13 ++++++++++--- .../window/StatusBarWindowStateListener.kt | 2 +- .../phone/StatusBarCommandQueueCallbacksTest.java | 7 ++----- .../systemui/statusbar/phone/StatusBarTest.java | 3 ++- .../fragment/CollapsedStatusBarFragmentTest.java | 8 +++----- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 6499e23ddd1e0..04aaff08c17fb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -341,14 +341,6 @@ public class StatusBar extends CoreStartable implements void onStatusBarWindowStateChanged(@WindowVisibleState int state) { updateBubblesVisibility(); mStatusBarWindowState = state; - mStatusBarWindowHidden = state == WINDOW_STATE_HIDDEN; - // TODO(b/212424936): Have this icon manager just implement its own listener. - mStatusBarHideIconsForBouncerManager.setStatusBarWindowHidden(mStatusBarWindowHidden); - if (mStatusBarView != null) { - // Should #updateHideIconsForBouncer always be called, regardless of whether we have a - // status bar view? If so, we can make #updateHideIconsForBouncer private. - mStatusBarHideIconsForBouncerManager.updateHideIconsForBouncer(/* animate= */ false); - } } void acquireGestureWakeLock(long time) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt index d2181d0480d26..17516e07400bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHideIconsForBouncerManager.kt @@ -1,10 +1,12 @@ package com.android.systemui.statusbar.phone +import android.app.StatusBarManager import com.android.systemui.Dumpable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.CommandQueue +import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.util.concurrency.DelayableExecutor import java.io.FileDescriptor import java.io.PrintWriter @@ -25,6 +27,7 @@ import javax.inject.Inject class StatusBarHideIconsForBouncerManager @Inject constructor( private val commandQueue: CommandQueue, @Main private val mainExecutor: DelayableExecutor, + statusBarWindowStateController: StatusBarWindowStateController, dumpManager: DumpManager ) : Dumpable { // State variables set by external classes. @@ -42,6 +45,9 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( init { dumpManager.registerDumpable(this) + statusBarWindowStateController.addListener { + state -> setStatusBarStateAndTriggerUpdate(state) + } } /** Returns true if the status bar icons should be hidden in the bouncer. */ @@ -49,8 +55,9 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( return hideIconsForBouncer || wereIconsJustHidden } - fun setStatusBarWindowHidden(statusBarWindowHidden: Boolean) { - this.statusBarWindowHidden = statusBarWindowHidden + private fun setStatusBarStateAndTriggerUpdate(@StatusBarManager.WindowVisibleState state: Int) { + statusBarWindowHidden = state == StatusBarManager.WINDOW_STATE_HIDDEN + updateHideIconsForBouncer(animate = false) } fun setDisplayId(displayId: Int) { @@ -87,7 +94,7 @@ class StatusBarHideIconsForBouncerManager @Inject constructor( * Updates whether the status bar icons should be hidden in the bouncer. May trigger * [commandQueue.recomputeDisableFlags] if the icon visibility status changes. */ - fun updateHideIconsForBouncer(animate: Boolean) { + private fun updateHideIconsForBouncer(animate: Boolean) { val hideBecauseApp = topAppHidesStatusBar && isOccluded && diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateListener.kt index 5586c1b5d291d..f3bab04d97a09 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateListener.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateListener.kt @@ -19,6 +19,6 @@ package com.android.systemui.statusbar.window import android.app.StatusBarManager /** Listener interface for changes in the status bar window state. */ -interface StatusBarWindowStateListener { +fun interface StatusBarWindowStateListener { fun onStatusBarWindowStateChanged(@StatusBarManager.WindowVisibleState state: Int) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacksTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacksTest.java index 0131293656e7b..aabf9235c8226 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacksTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacksTest.java @@ -36,7 +36,6 @@ import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.assist.AssistManager; -import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.DisableFlagsLogger; @@ -46,8 +45,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; -import com.android.systemui.util.concurrency.FakeExecutor; -import com.android.systemui.util.time.FakeSystemClock; import com.android.wm.shell.legacysplitscreen.LegacySplitScreen; import org.junit.Before; @@ -84,6 +81,7 @@ public class StatusBarCommandQueueCallbacksTest extends SysuiTestCase { @Mock private VibratorHelper mVibratorHelper; @Mock private Vibrator mVibrator; @Mock private LightBarController mLightBarController; + @Mock private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; StatusBarCommandQueueCallbacks mSbcqCallbacks; @@ -112,8 +110,7 @@ public class StatusBarCommandQueueCallbacksTest extends SysuiTestCase { mStatusBarStateController, mNotificationShadeWindowView, mNotificationStackScrollLayoutController, - new StatusBarHideIconsForBouncerManager( - mCommandQueue, new FakeExecutor(new FakeSystemClock()), new DumpManager()), + mStatusBarHideIconsForBouncerManager, mPowerManager, mVibratorHelper, Optional.of(mVibrator), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index a4b64803a859f..84ddce92f4ebe 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -265,6 +265,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private BrightnessSliderController.Factory mBrightnessSliderFactory; @Mock private WallpaperController mWallpaperController; @Mock private OngoingCallController mOngoingCallController; + @Mock private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; @Mock private LockscreenShadeTransitionController mLockscreenTransitionController; @Mock private FeatureFlags mFeatureFlags; @Mock private NotificationVisibilityProvider mVisibilityProvider; @@ -452,7 +453,7 @@ public class StatusBarTest extends SysuiTestCase { mScreenOffAnimationController, mWallpaperController, mOngoingCallController, - new StatusBarHideIconsForBouncerManager(mCommandQueue, mMainExecutor, mDumpManager), + mStatusBarHideIconsForBouncerManager, mLockscreenTransitionController, mFeatureFlags, mKeyguardUnlockAnimationController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index b97f053b24b53..a630840fab0ea 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -37,7 +37,6 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiBaseFragmentTest; -import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.LogcatEchoTracker; @@ -57,8 +56,6 @@ import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentCom import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.KeyguardStateController; -import com.android.systemui.util.concurrency.FakeExecutor; -import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -96,6 +93,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { private HeadsUpAppearanceController mHeadsUpAppearanceController; @Mock private NotificationPanelViewController mNotificationPanelViewController; + @Mock + private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; public CollapsedStatusBarFragmentTest() { super(CollapsedStatusBarFragment.class); @@ -325,8 +324,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { new PanelExpansionStateManager(), mock(FeatureFlags.class), mStatusBarIconController, - new StatusBarHideIconsForBouncerManager( - mCommandQueue, new FakeExecutor(new FakeSystemClock()), new DumpManager()), + mStatusBarHideIconsForBouncerManager, mKeyguardStateController, mNotificationPanelViewController, mNetworkController,