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

Commit 19660ca3 authored by wilsonshih's avatar wilsonshih Committed by Wei Sheng Shih
Browse files

Only wakeup device for dismiss keyguard when dream activity is on top.

Regression from I62be9283a1d22119eceae5585960b5775a019153.
When dismiss keyguard from shell command, the wakeup signal should only
be used for leaving the dream activity.

Bug: 219376804
Test: atest KeyguardTests KeyguardLockedTests
Test: atest WindowManagerServiceTests
Test: Enable dream, set crediental, wait for dream activity resumed and
keyguard locked. Dismiss keyguard by shell command "dismiss-keyguard",
verify the DreamActivity can be stopped after enter crediental.
Test: Test with test app, verify the device won't wakeup after screen
off.

Change-Id: I4edab8588421b3e341cf3bde07e989ff5e651cfe
parent 17a66a22
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -443,6 +443,13 @@ class KeyguardController {
                || !mWindowManager.isKeyguardSecure(mService.getCurrentUserId());
    }

    /**
     * @return Whether the dream activity is on top of default display.
     */
    boolean isShowingDream() {
        return getDisplayState(DEFAULT_DISPLAY).mShowingDream;
    }

    private void dismissMultiWindowModeForTaskIfNeeded(int displayId,
            @Nullable Task currentTaskControllingOcclusion) {
        // TODO(b/113840485): Handle docked stack for individual display.
@@ -501,6 +508,7 @@ class KeyguardController {
        private boolean mKeyguardGoingAway;
        private boolean mDismissalRequested;
        private boolean mOccluded;
        private boolean mShowingDream;

        private ActivityRecord mTopOccludesActivity;
        private ActivityRecord mDismissingKeyguardActivity;
@@ -536,6 +544,7 @@ class KeyguardController {

            mRequestDismissKeyguard = false;
            mOccluded = false;
            mShowingDream = false;

            mTopOccludesActivity = null;
            mDismissingKeyguardActivity = null;
@@ -570,9 +579,9 @@ class KeyguardController {
                }
            }

            final boolean dreaming = display.getDisplayPolicy().isShowingDreamLw() && (top != null
            mShowingDream = display.getDisplayPolicy().isShowingDreamLw() && (top != null
                    && top.getActivityType() == ACTIVITY_TYPE_DREAM);
            mOccluded = dreaming || occludedByActivity;
            mOccluded = mShowingDream || occludedByActivity;
            mRequestDismissKeyguard = lastDismissKeyguardActivity != mDismissingKeyguardActivity
                    && !mOccluded
                    && mDismissingKeyguardActivity != null
+2 −2
Original line number Diff line number Diff line
@@ -3217,8 +3217,8 @@ public class WindowManagerService extends IWindowManager.Stub
        if (!checkCallingPermission(permission.CONTROL_KEYGUARD, "dismissKeyguard")) {
            throw new SecurityException("Requires CONTROL_KEYGUARD permission");
        }
        if (mAtmService.isDreaming()) {
            mAtmService.mTaskSupervisor.wakeUp("dismissKeyguard");
        if (mAtmService.mKeyguardController.isShowingDream()) {
            mAtmService.mTaskSupervisor.wakeUp("leaveDream");
        }
        synchronized (mGlobalLock) {
            mPolicy.dismissKeyguardLw(callback, message);
+1 −1
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
    @Test
    public void testDismissKeyguardCanWakeUp() {
        doReturn(true).when(mWm).checkCallingPermission(anyString(), anyString());
        doReturn(true).when(mWm.mAtmService).isDreaming();
        doReturn(true).when(mWm.mAtmService.mKeyguardController).isShowingDream();
        doNothing().when(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString());
        mWm.dismissKeyguard(null, "test-dismiss-keyguard");
        verify(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString());