diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index b32e8f0b32218..8621bb2845302 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -590,7 +590,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private int mDoubleTapOnHomeBehavior; // Whether to lock the device after the next app transition has finished. - private boolean mLockAfterAppTransitionFinished; + boolean mLockAfterAppTransitionFinished; // Allowed theater mode wake actions private boolean mAllowTheaterModeWakeFromKey; diff --git a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java index 49af2c1dc6819..5863e9d9243a1 100644 --- a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java +++ b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java @@ -20,6 +20,7 @@ import static android.view.KeyEvent.KEYCODE_VOLUME_UP; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_POWER_ASSISTANT; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_POWER_GLOBAL_ACTIONS; +import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_POWER_DREAM_OR_SLEEP; import android.provider.Settings; import android.view.Display; @@ -48,6 +49,32 @@ public class PowerKeyGestureTests extends ShortcutKeyTestBase { mPhoneWindowManager.assertNoPowerSleep(); } + /** + * Power single press to start dreaming when so configured. + */ + @Test + public void testPowerSinglePressRequestsDream() { + mPhoneWindowManager.overrideShortPressOnPower(SHORT_PRESS_POWER_DREAM_OR_SLEEP); + mPhoneWindowManager.overrideCanStartDreaming(true); + sendKey(KEYCODE_POWER); + mPhoneWindowManager.assertDreamRequest(); + mPhoneWindowManager.assertLockedAfterAppTransitionFinished(); + } + + /** + * Power double-press to launch camera does not lock device when the single press behavior is to + * dream. + */ + @Test + public void testPowerDoublePressWillNotLockDevice() { + mPhoneWindowManager.overrideShortPressOnPower(SHORT_PRESS_POWER_DREAM_OR_SLEEP); + mPhoneWindowManager.overrideCanStartDreaming(false); + sendKey(KEYCODE_POWER); + sendKey(KEYCODE_POWER); + mPhoneWindowManager.assertCameraLaunch(); + mPhoneWindowManager.assertWillNotLockAfterAppTransitionFinished(); + } + /** * Power double press to trigger camera. */ diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java index b6939747a7b69..a2ee8a45433d1 100644 --- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java @@ -84,6 +84,7 @@ import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.DisplayPolicy; import com.android.server.wm.DisplayRotation; import com.android.server.wm.WindowManagerInternal; +import com.android.server.wm.WindowManagerInternal.AppTransitionListener; import junit.framework.Assert; @@ -289,6 +290,10 @@ class TestPhoneWindowManager { } } + void overrideShortPressOnPower(int behavior) { + mPhoneWindowManager.mShortPressOnPowerBehavior = behavior; + } + // Override assist perform function. void overrideLongPressOnPower(int behavior) { mPhoneWindowManager.mLongPressOnPowerBehavior = behavior; @@ -311,6 +316,10 @@ class TestPhoneWindowManager { } } + void overrideCanStartDreaming(boolean canDream) { + doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); + } + void overrideDisplayState(int state) { doReturn(state).when(mDisplay).getState(); Mockito.reset(mPowerManager); @@ -374,6 +383,10 @@ class TestPhoneWindowManager { timeout(SHORTCUT_KEY_DELAY_MILLIS)).performAccessibilityShortcut(); } + void assertDreamRequest() { + verify(mDreamManagerInternal).requestDream(); + } + void assertPowerSleep() { waitForIdle(); verify(mPowerManager, @@ -454,4 +467,17 @@ class TestPhoneWindowManager { waitForIdle(); verify(mInputManagerInternal).toggleCapsLock(anyInt()); } + + void assertWillNotLockAfterAppTransitionFinished() { + Assert.assertFalse(mPhoneWindowManager.mLockAfterAppTransitionFinished); + } + + void assertLockedAfterAppTransitionFinished() { + ArgumentCaptor transitionCaptor = + ArgumentCaptor.forClass(AppTransitionListener.class); + verify(mWindowManagerInternal).registerAppTransitionListener( + transitionCaptor.capture()); + transitionCaptor.getValue().onAppTransitionFinishedLocked(any()); + verify(mPhoneWindowManager).lockNow(null); + } }