From 012f6bc71135af5baf355ff411c50267a4ae54ab Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Fri, 7 Jan 2022 18:53:03 +0100 Subject: [PATCH] Fixed an issue where a user could't go to the locked shade from dozing When waking up, the status bar state was immediately reset, stopping the transition. We now migrate the behavior from the pulse expansion to the ls shade transition controller and wait a bit longer. Fixes: 201341772 Test: click on expand from pulsing Change-Id: Ie7caa06b45c3fd4c2aec72dfecf82e76e06ff3f2 --- .../keyguard/WakefulnessLifecycle.java | 7 ++++++ .../LockscreenShadeTransitionController.kt | 21 +++++++++++++++- .../statusbar/PulseExpansionHandler.kt | 8 ------- .../systemui/statusbar/phone/StatusBar.java | 3 +-- .../keyguard/WakefulnessLifecycleTest.java | 1 + ...LockscreenShadeTransitionControllerTest.kt | 24 +++++++++++++++---- 6 files changed, 49 insertions(+), 15 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java index 2e1c9faf88487..474a81b9ce442 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java @@ -138,6 +138,7 @@ public class WakefulnessLifecycle extends Lifecycle) { IndentingPrintWriter(pw, " ").let { it.println("PulseExpansionHandler:") @@ -344,7 +337,6 @@ constructor( it.println("isExpanding: $isExpanding") it.println("leavingLockscreen: $leavingLockscreen") it.println("mPulsing: $mPulsing") - it.println("isWakingToShadeLocked: $isWakingToShadeLocked") it.println("qsExpanded: $qsExpanded") it.println("bouncerShowing: $bouncerShowing") } 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 778a1e36392e1..33212182cfcfe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2965,7 +2965,7 @@ public class StatusBar extends SystemUI implements mMessageRouter.cancelMessages(MSG_LAUNCH_TRANSITION_TIMEOUT); if (mUserSwitcherController != null && mUserSwitcherController.useFullscreenUserSwitcher()) { mStatusBarStateController.setState(StatusBarState.FULLSCREEN_USER_SWITCHER); - } else if (!mPulseExpansionHandler.isWakingToShadeLocked()) { + } else if (!mLockscreenShadeTransitionController.isWakingToShadeLocked()) { mStatusBarStateController.setState(StatusBarState.KEYGUARD); } updatePanelExpansionForKeyguard(); @@ -3570,7 +3570,6 @@ public class StatusBar extends SystemUI implements // once we fully woke up. updateRevealEffect(true /* wakingUp */); updateNotificationPanelTouchState(); - mPulseExpansionHandler.onStartedWakingUp(); // If we are waking up during the screen off animation, we should undo making the // expanded visible (we did that so the LightRevealScrim would be visible). diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java index e453ff2dc7bf6..fd282ccd2a74c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java @@ -80,6 +80,7 @@ public class WakefulnessLifecycleTest extends SysuiTestCase { assertEquals(WakefulnessLifecycle.WAKEFULNESS_AWAKE, mWakefulness.getWakefulness()); verify(mWakefulnessObserver).onFinishedWakingUp(); + verify(mWakefulnessObserver).onPostFinishedWakingUp(); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt index 01a214b40f98f..6f9cd87d5bb8f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt @@ -4,13 +4,12 @@ import android.test.suitebuilder.annotation.SmallTest import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.testing.TestableLooper.RunWithLooper -import android.util.DisplayMetrics import com.android.systemui.ExpandHelper import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.dump.DumpManager -import com.android.systemui.log.LogBuffer +import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.media.MediaHierarchyManager import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS @@ -64,12 +63,11 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { @Mock lateinit var lockScreenUserManager: NotificationLockscreenUserManager @Mock lateinit var falsingCollector: FalsingCollector @Mock lateinit var ambientState: AmbientState - @Mock lateinit var displayMetrics: DisplayMetrics + @Mock lateinit var wakefulnessLifecycle: WakefulnessLifecycle @Mock lateinit var mediaHierarchyManager: MediaHierarchyManager @Mock lateinit var scrimController: ScrimController @Mock lateinit var configurationController: ConfigurationController @Mock lateinit var falsingManager: FalsingManager - @Mock lateinit var buffer: LogBuffer @Mock lateinit var notificationPanelController: NotificationPanelViewController @Mock lateinit var nsslController: NotificationStackScrollLayoutController @Mock lateinit var depthController: NotificationShadeDepthController @@ -98,6 +96,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { mediaHierarchyManager = mediaHierarchyManager, scrimController = scrimController, depthController = depthController, + wakefulnessLifecycle = wakefulnessLifecycle, context = context, configurationController = configurationController, falsingManager = falsingManager, @@ -147,6 +146,23 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() { verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED) } + @Test + fun testWakingToShadeLockedWhenDozing() { + whenever(statusbarStateController.isDozing).thenReturn(true) + transitionController.goToLockedShade(null) + verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED) + assertTrue("Not waking to shade locked", transitionController.isWakingToShadeLocked) + } + + @Test + fun testNotWakingToShadeLockedWhenNotDozing() { + whenever(statusbarStateController.isDozing).thenReturn(false) + transitionController.goToLockedShade(null) + verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED) + assertFalse("Waking to shade locked when not dozing", + transitionController.isWakingToShadeLocked) + } + @Test fun testGoToLockedShadeOnlyOnKeyguard() { whenever(statusbarStateController.state).thenReturn(StatusBarState.SHADE_LOCKED)