diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index c55af9b6286ea..7bf150b18e9bf 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -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 diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 709f885db7761..7206d7d4a376e 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -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); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java index 68e90e1c00d3b..08320f8c423fe 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java @@ -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());