Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6f4eeb6 authored by Will Leshner's avatar Will Leshner
Browse files

Add tests for dreaming on short power button press.

This also adds a test for not locking the device when double-tapping the
power button to show the camera.

Bug: 264892168
Test: atest WmTests:PowerKeyGestureTests
Change-Id: I54450a5c3320cd75717c496a9ca6bd5b02c138ee
parent 23b25b07
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+27 −0
Original line number Diff line number Diff line
@@ -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.
     */
+26 −0
Original line number Diff line number Diff line
@@ -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<AppTransitionListener> transitionCaptor =
                ArgumentCaptor.forClass(AppTransitionListener.class);
        verify(mWindowManagerInternal).registerAppTransitionListener(
                transitionCaptor.capture());
        transitionCaptor.getValue().onAppTransitionFinishedLocked(any());
        verify(mPhoneWindowManager).lockNow(null);
    }
}