diff options
| author | wilsonshih <wilsonshih@google.com> | 2020-07-29 14:34:55 +0800 |
|---|---|---|
| committer | wilsonshih <wilsonshih@google.com> | 2020-09-16 17:46:42 +0800 |
| commit | e94de4764eb9eaa14ff3263af18955f76d988d56 (patch) | |
| tree | d683ef8d5fdcccb337e79e58bbb77fcd77beab52 | |
| parent | e9897deb31553c96fcce8e7d20500afc65a41766 (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.java | 3 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java | 12 |
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()); + } } |
