From b56b3c3c85d91a47154a4421f479ff8b9dad4c93 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 17 May 2018 17:32:26 +0200 Subject: [PATCH] WM: Prevent unminimizing docked stack on AOD When we go to AOD, we hide Home's app token - which causes the docked stack to unminimize. There was some protection against that because the same thing happens on the keyguard, but that did not work because the keyguard state is not aware of AOD. Instead, we pipe the source of truth from AM down to WM and use this instead. Change-Id: I68d1079a6bbd9080816ee52c1b5650623a661421 Fixes: 79267409 Test: Enter split screen, go to home, turn of screen, turn on screen. Verify docked stack stays minimized and there is no janky transition --- .../java/com/android/server/am/KeyguardController.java | 2 ++ .../android/server/wm/DockedStackDividerController.java | 2 +- .../java/com/android/server/wm/WindowManagerService.java | 9 +++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java index 57643822b1a43..ddf955292c684 100644 --- a/services/core/java/com/android/server/am/KeyguardController.java +++ b/services/core/java/com/android/server/am/KeyguardController.java @@ -132,6 +132,8 @@ class KeyguardController { if (showingChanged) { dismissDockedStackIfNeeded(); setKeyguardGoingAway(false); + mWindowManager.setKeyguardOrAodShowingOnDefaultDisplay( + isKeyguardOrAodShowing(DEFAULT_DISPLAY)); if (keyguardShowing) { mDismissalRequested = false; } diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 39a362906b9d7..cd8d677c306c5 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -692,7 +692,7 @@ public class DockedStackDividerController { // Do not minimize when dock is already minimized while keyguard is showing and not // occluded such as unlocking the screen - if (mMinimizedDock && mService.mPolicy.isKeyguardShowingAndNotOccluded()) { + if (mMinimizedDock && mService.mKeyguardOrAodShowingOnDefaultDisplay) { return; } final TaskStack topSecondaryStack = mDisplayContent.getTopStackInWindowingMode( diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 224784bef257b..4c771fa4da655 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -369,7 +369,10 @@ public class WindowManagerService extends IWindowManager.Stub final WindowTracing mWindowTracing; final private KeyguardDisableHandler mKeyguardDisableHandler; + // TODO: eventually unify all keyguard state in a common place instead of having it spread over + // AM's KeyguardController and the policy's KeyguardServiceDelegate. boolean mKeyguardGoingAway; + boolean mKeyguardOrAodShowingOnDefaultDisplay; // VR Vr2d Display Id. int mVr2dDisplayId = INVALID_DISPLAY; @@ -2903,6 +2906,12 @@ public class WindowManagerService extends IWindowManager.Stub } } + public void setKeyguardOrAodShowingOnDefaultDisplay(boolean showing) { + synchronized (mWindowMap) { + mKeyguardOrAodShowingOnDefaultDisplay = showing; + } + } + // ------------------------------------------------------------- // Misc IWindowSession methods // -------------------------------------------------------------