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
This commit is contained in:
committed by
Wei Sheng Shih
parent
17a66a2236
commit
19660ca3e0
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user