summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwilsonshih <wilsonshih@google.com>2020-07-29 14:34:55 +0800
committerwilsonshih <wilsonshih@google.com>2020-09-16 17:46:42 +0800
commite94de4764eb9eaa14ff3263af18955f76d988d56 (patch)
treed683ef8d5fdcccb337e79e58bbb77fcd77beab52
parente9897deb31553c96fcce8e7d20500afc65a41766 (diff)
Fixes cannot leave dozing when dismiss keyguard.
Setup dream by enable AOD or dreaming. Then entering dreaming and wait lockscreen on, trigger wm dismiss-keyguard should stop dreaming no matter is AOD or DreamActivity, and if user has set crediental, SystemUI should show keyguard bouncer at the same time. Currently behavior: - When showing AOD: dismiss-keyguard won't leave AOD, once user press power key, AOD will gone and show keyguard bouncer directly. - When showing DreamActivity: dismiss-keyguard keyguard bouncer will pop up without leave DreamActivity, after enter crediental, DreamActivity keep in resumed state. In order to make a consistent behavior, when receive a request to dismiss keyguard, wake up the device if it's dreaming. Bug: 162190413 Test: atest KeyguardTests KeyguardLockedTests Test: atest WindowManagerServiceTests Test: Enable dream, set crediental, wait for dreaming and device locked. Try to dismiss keyguard with "adb shell wm dismiss-keyguard", the DreamActivity or AOD should stop. Change-Id: I62be9283a1d22119eceae5585960b5775a019153
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java12
2 files changed, 15 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 8eb6432e0d52..8a78426470f8 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3069,6 +3069,9 @@ public class WindowManagerService extends IWindowManager.Stub
if (!checkCallingPermission(permission.CONTROL_KEYGUARD, "dismissKeyguard")) {
throw new SecurityException("Requires CONTROL_KEYGUARD permission");
}
+ if (mAtmInternal.isDreaming()) {
+ mAtmService.mStackSupervisor.wakeUp("dismissKeyguard");
+ }
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 2510385f4580..5b7cf5a72f0a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -27,6 +27,8 @@ import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -164,4 +166,14 @@ public class WindowManagerServiceTests extends WindowTestsBase {
verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId);
}
+
+ @Test
+ public void testDismissKeyguardCanWakeUp() {
+ doReturn(true).when(mWm).checkCallingPermission(anyString(), anyString());
+ spyOn(mWm.mAtmInternal);
+ doReturn(true).when(mWm.mAtmInternal).isDreaming();
+ doNothing().when(mWm.mAtmService.mStackSupervisor).wakeUp(anyString());
+ mWm.dismissKeyguard(null, "test-dismiss-keyguard");
+ verify(mWm.mAtmService.mStackSupervisor).wakeUp(anyString());
+ }
}