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

Commit 6fb43c25 authored by Coco Duan's avatar Coco Duan Committed by Automerger Merge Worker
Browse files

Merge "Fix screen getting relocked after unlocking once and wallpaper dream...

Merge "Fix screen getting relocked after unlocking once and wallpaper dream has stopped" into udc-qpr-dev am: b7186d7c am: 7f99d8a9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23616543



Change-Id: Ibebff2461a002a5f28544e592f1a35b54d0ed516
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6cbed859 7f99d8a9
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -602,8 +602,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    // What we do when the user double-taps on home
    private int mDoubleTapOnHomeBehavior;

    // Whether to lock the device after the next app transition has finished.
    boolean mLockAfterAppTransitionFinished;
    // Whether to lock the device after the next dreaming transition has finished.
    private boolean mLockAfterDreamingTransitionFinished;

    // Allowed theater mode wake actions
    private boolean mAllowTheaterModeWakeFromKey;
@@ -1106,7 +1106,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        synchronized (mLock) {
            // If the setting to lock instantly on power button press is true, then set the flag to
            // lock after the dream transition has finished.
            mLockAfterAppTransitionFinished =
            mLockAfterDreamingTransitionFinished =
                    mLockPatternUtils.getPowerButtonInstantlyLocks(mCurrentUserId);
        }

@@ -2298,20 +2298,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                        true /* notifyOccluded */);

                synchronized (mLock) {
                    mLockAfterAppTransitionFinished = false;
                    mLockAfterDreamingTransitionFinished = false;
                }
            }

            @Override
            public void onAppTransitionFinishedLocked(IBinder token) {
                synchronized (mLock) {
                    if (!mLockAfterAppTransitionFinished) {
                        return;
                    final DreamManagerInternal dreamManagerInternal = getDreamManagerInternal();
                    // check both isDreaming and mLockAfterDreamingTransitionFinished before lockNow
                    // so it won't relock after dreaming has stopped
                    if (dreamManagerInternal != null && dreamManagerInternal.isDreaming()
                            && mLockAfterDreamingTransitionFinished) {
                        lockNow(null);
                    }
                    mLockAfterAppTransitionFinished = false;
                    mLockAfterDreamingTransitionFinished = false;
                }

                lockNow(null);
            }
        });

+12 −1
Original line number Diff line number Diff line
@@ -58,9 +58,20 @@ public class PowerKeyGestureTests extends ShortcutKeyTestBase {
        mPhoneWindowManager.overrideCanStartDreaming(true);
        sendKey(KEYCODE_POWER);
        mPhoneWindowManager.assertDreamRequest();
        mPhoneWindowManager.overrideIsDreaming(true);
        mPhoneWindowManager.assertLockedAfterAppTransitionFinished();
    }

    @Test
    public void testAppTransitionFinishedCalledAfterDreamStoppedWillNotLockAgain() {
        mPhoneWindowManager.overrideShortPressOnPower(SHORT_PRESS_POWER_DREAM_OR_SLEEP);
        mPhoneWindowManager.overrideCanStartDreaming(true);
        sendKey(KEYCODE_POWER);
        mPhoneWindowManager.assertDreamRequest();
        mPhoneWindowManager.overrideIsDreaming(false);
        mPhoneWindowManager.assertDidNotLockAfterAppTransitionFinished();
    }

    /**
     * Power double-press to launch camera does not lock device when the single press behavior is to
     * dream.
@@ -72,7 +83,7 @@ public class PowerKeyGestureTests extends ShortcutKeyTestBase {
        sendKey(KEYCODE_POWER);
        sendKey(KEYCODE_POWER);
        mPhoneWindowManager.assertCameraLaunch();
        mPhoneWindowManager.assertWillNotLockAfterAppTransitionFinished();
        mPhoneWindowManager.assertDidNotLockAfterAppTransitionFinished();
    }

    /**
+17 −5
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import android.hardware.display.DisplayManagerInternal;
import android.media.AudioManagerInternal;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException;
@@ -344,6 +345,10 @@ class TestPhoneWindowManager {
        doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
    }

    void overrideIsDreaming(boolean isDreaming) {
        doReturn(isDreaming).when(mDreamManagerInternal).isDreaming();
    }

    void overrideDisplayState(int state) {
        doReturn(state).when(mDisplay).getState();
        doReturn(state == STATE_ON).when(mDisplayPolicy).isAwake();
@@ -520,19 +525,26 @@ class TestPhoneWindowManager {
        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());
        final IBinder token = mock(IBinder.class);
        transitionCaptor.getValue().onAppTransitionFinishedLocked(token);
        verify(mPhoneWindowManager).lockNow(null);
    }

    void assertDidNotLockAfterAppTransitionFinished() {
        ArgumentCaptor<AppTransitionListener> transitionCaptor =
                ArgumentCaptor.forClass(AppTransitionListener.class);
        verify(mWindowManagerInternal).registerAppTransitionListener(
                transitionCaptor.capture());
        final IBinder token = mock(IBinder.class);
        transitionCaptor.getValue().onAppTransitionFinishedLocked(token);
        verify(mPhoneWindowManager, never()).lockNow(null);
    }

    void assertGoToHomescreen() {
        waitForIdle();
        verify(mPhoneWindowManager).launchHomeFromHotKey(anyInt());