From f1984df1f30d34f6ba82bcc027374ad35d8b6c9d Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Mon, 12 Dec 2022 12:51:46 +0000 Subject: [PATCH] Forcing closing QS when going from SHADE_LOCKED to KEYGUARD This is follow-up to ag/20411848 which fixed scrims showing up when going from expanded shade to keyguard with power double press. The original CL missed the case of going to keyguard from SHADE_LOCKED state, so it's added here. Fixes: 251025114 Test: NotificationPanelViewControllerTest Change-Id: I95283f64bc43f2dc45a58cb4ff4b9fff5ffd1799 --- .../NotificationPanelViewController.java | 25 ++++++++----------- .../NotificationPanelViewControllerTest.java | 11 ++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 6a192161fa938..d83892b90b814 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -40,6 +40,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_N import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import static com.android.systemui.statusbar.StatusBarState.SHADE; +import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED; import static com.android.systemui.statusbar.VibratorHelper.TOUCH_VIBRATION_ATTRIBUTES; import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_FOLD_TO_AOD; import static com.android.systemui.util.DumpUtilsKt.asIndenting; @@ -5478,6 +5479,15 @@ public final class NotificationPanelViewController implements Dumpable { mBarState = statusBarState; mKeyguardShowing = keyguardShowing; + boolean fromShadeToKeyguard = statusBarState == KEYGUARD + && (oldState == SHADE || oldState == SHADE_LOCKED); + if (mSplitShadeEnabled && fromShadeToKeyguard) { + // user can go to keyguard from different shade states and closing animation + // may not fully run - we always want to make sure we close QS when that happens + // as we never need QS open in fresh keyguard state + closeQs(); + } + if (oldState == KEYGUARD && (goingToFullShade || statusBarState == StatusBarState.SHADE_LOCKED)) { @@ -5497,27 +5507,12 @@ public final class NotificationPanelViewController implements Dumpable { mKeyguardStatusBarViewController.animateKeyguardStatusBarIn(); mNotificationStackScrollLayoutController.resetScrollPosition(); - // Only animate header if the header is visible. If not, it will partially - // animate out - // the top of QS - if (!mQsExpanded) { - // TODO(b/185683835) Nicer clipping when using new spacial model - if (mSplitShadeEnabled) { - mQs.animateHeaderSlidingOut(); - } - } } else { // this else branch means we are doing one of: // - from KEYGUARD to SHADE (but not fully expanded as when swiping from the top) // - from SHADE to KEYGUARD // - from SHADE_LOCKED to SHADE // - getting notified again about the current SHADE or KEYGUARD state - if (mSplitShadeEnabled && oldState == SHADE && statusBarState == KEYGUARD) { - // user can go to keyguard from different shade states and closing animation - // may not fully run - we always want to make sure we close QS when that happens - // as we never need QS open in fresh keyguard state - closeQs(); - } final boolean animatingUnlockedShadeToKeyguard = oldState == SHADE && statusBarState == KEYGUARD && mScreenOffAnimationController.isKeyguardShowDelayed(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index 0302dade0a8ca..351274913323b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -1102,6 +1102,17 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mStatusBarStateController.setState(KEYGUARD); + assertThat(mNotificationPanelViewController.isQsExpanded()).isEqualTo(false); + assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isEqualTo(false); + } + + @Test + public void testLockedSplitShadeTransitioningToKeyguard_closesQS() { + enableSplitShade(true); + mStatusBarStateController.setState(SHADE_LOCKED); + mNotificationPanelViewController.setQsExpanded(true); + + mStatusBarStateController.setState(KEYGUARD); assertThat(mNotificationPanelViewController.isQsExpanded()).isEqualTo(false); assertThat(mNotificationPanelViewController.isQsExpandImmediate()).isEqualTo(false);