From 498a4b83f32723d90747e92724f24e7eab0c0616 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Tue, 11 Dec 2018 16:10:16 +0800 Subject: [PATCH] Hide content on all displays when the device is locked. Currently we cannot show Keyguard on private display. To prevent security regression, we should hide the content when device is locked. Bug: 120669490 Test: atest ActivityManagerMultiDisplayTests Test: atest ActivityManagerDisplayLockedKeyguardTests Test: atest ActivityManagerDisplayKeyguardTests Change-Id: I94a5099b91f15b3871da497a8bc7cb66713d9b64 --- .../com/android/server/wm/ActivityStack.java | 2 +- .../android/server/wm/KeyguardController.java | 27 ++++++++----------- .../server/wm/WindowManagerService.java | 2 +- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 891c3da90b937..3a754c411684b 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -2286,7 +2286,7 @@ class ActivityStack extends ConfigurationContainer { * Check if the display to which this stack is attached has * {@link Display#FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD} applied. */ - private boolean canShowWithInsecureKeyguard() { + boolean canShowWithInsecureKeyguard() { final ActivityDisplay activityDisplay = getDisplay(); if (activityDisplay == null) { throw new IllegalStateException("Stack is not attached to any display, stackId=" diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 177f244129f45..b5be2ac5df983 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -91,9 +91,7 @@ class KeyguardController { */ boolean isKeyguardOrAodShowing(int displayId) { return (mKeyguardShowing || mAodShowing) && !mKeyguardGoingAway - && (displayId == DEFAULT_DISPLAY - ? !isDisplayOccluded(DEFAULT_DISPLAY) - : isShowingOnSecondaryDisplay(displayId)); + && !isDisplayOccluded(displayId); } /** @@ -101,10 +99,7 @@ class KeyguardController { * display, false otherwise */ boolean isKeyguardShowing(int displayId) { - return mKeyguardShowing && !mKeyguardGoingAway - && (displayId == DEFAULT_DISPLAY - ? !isDisplayOccluded(DEFAULT_DISPLAY) - : isShowingOnSecondaryDisplay(displayId)); + return mKeyguardShowing && !mKeyguardGoingAway && !isDisplayOccluded(displayId); } /** @@ -152,14 +147,6 @@ class KeyguardController { updateKeyguardSleepToken(); } - private boolean isShowingOnSecondaryDisplay(int displayId) { - if (mSecondaryDisplayIdsShowing == null) return false; - for (int showingId : mSecondaryDisplayIdsShowing) { - if (displayId == showingId) return true; - } - return false; - } - /** * Called when Keyguard is going away. * @@ -473,8 +460,16 @@ class KeyguardController { if (stack.getTopDismissingKeyguardActivity() != null) { mDismissingKeyguardActivity = stack.getTopDismissingKeyguardActivity(); } + // FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD only apply for secondary display. + if (mDisplayId != DEFAULT_DISPLAY) { + mOccluded |= stack.canShowWithInsecureKeyguard() + && controller.canDismissKeyguard(); + } + } + // TODO(b/123372519): isShowingDream can only works on default display. + if (mDisplayId == DEFAULT_DISPLAY) { + mOccluded |= controller.mWindowManager.isShowingDream(); } - mOccluded |= controller.mWindowManager.isShowingDream(); // TODO(b/113840485): Handle app transition for individual display, and apply occluded // state change to secondary displays. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5eff7d8a8553c..e6581df233ef8 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2817,7 +2817,7 @@ public class WindowManagerService extends IWindowManager.Stub public boolean isShowingDream() { synchronized (mGlobalLock) { - // TODO: fix this when dream can be shown on non-default display. + // TODO(b/123372519): Fix this when dream can be shown on non-default display. return getDefaultDisplayContentLocked().getDisplayPolicy().isShowingDreamLw(); } }