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
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 8eb6432..8a78426 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 @@
         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 2510385..5b7cf5a 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 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 @@
 
         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());
+    }
 }