From 57be7e1b388680efdcddf5cb8fe4b650ed76f6d4 Mon Sep 17 00:00:00 2001 From: Joanne Chung Date: Thu, 7 Mar 2019 20:02:57 +0800 Subject: [PATCH] Fix the state cannot transition to DOZE while room is dark. When AOD is on and the device goes from SCREEN_ON to SCREEN_OFF in a dark room, the doze state is DOZE_AOD. Due to DozeDockHandler receives STATE_DOCKED_HIDE but the state is not PLUSING, the screen does not hide. Bug: 127737347 Test: atest SystemUITests:DozeDockHandlerTest Test: Manual Change-Id: Icaebbdf843de61ef0026e8d3d5dca47bfc2f89eb --- .../com/android/systemui/doze/DozeDockHandler.java | 12 +++++++++--- .../android/systemui/doze/DozeDockHandlerTest.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java b/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java index 06dbdbf1efa85..a4592d554f0ed 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java @@ -121,11 +121,17 @@ public class DozeDockHandler implements DozeMachine.Part { if (dozeState == State.DOZE && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)) { mMachine.requestState(State.DOZE_AOD); - break; } - // continue below + else { + requestPulseOutNow(dozeState); + } + break; case DockManager.STATE_DOCKED_HIDE: - requestPulseOutNow(dozeState); + if (dozeState == State.DOZE_AOD) { + mMachine.requestState(State.DOZE); + } else { + requestPulseOutNow(dozeState); + } break; default: // no-op diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java index 4ba28582d7ba5..df014a49e5cbd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java @@ -202,4 +202,16 @@ public class DozeDockHandlerTest extends SysuiTestCase { verify(mMachine).requestState(eq(State.DOZE)); } + + @Test + public void testTransitionToPulsing_whenDockedHide_requestPulseOut() { + mDockHandler.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED); + when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE_PULSING); + when(mMachine.getPulseReason()).thenReturn(DozeLog.PULSE_REASON_DOCKING); + mDockManagerFake.setDockEvent(DockManager.STATE_DOCKED_HIDE); + + mDockHandler.transitionTo(DozeMachine.State.INITIALIZED, State.DOZE_PULSING); + + verify(mHost).stopPulsing(); + } }