From c5804afa73edbf229e789570d288e66f70b54fa2 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Mon, 25 Apr 2016 18:51:16 -0700 Subject: [PATCH] Fix a few issues with occluded Keyguard - When we get a collapse before the layout happened in SystemUI, don't expand the panel after the layout. - Don't reset waitingToShow when coming out of sleep. This will cause win.isVisibleOrBehindKeyguardLw to return false and then occluded state will change rapidly from true -> false -> true, leading to flickering in SysUI. Bug: 23898941 Change-Id: I2b941188de777086bb2b477f5bfc00cc0cd6abe0 --- .../com/android/systemui/statusbar/phone/PanelView.java | 8 ++++++++ .../java/com/android/server/wm/WindowManagerService.java | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index c4b7932ba3106..7c70e22c5302f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -883,6 +883,10 @@ public abstract class PanelView extends FrameLayout { new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { + if (!mInstantExpanding) { + getViewTreeObserver().removeOnGlobalLayoutListener(this); + return; + } if (mStatusBar.getStatusBarWindow().getHeight() != mStatusBar.getStatusBarHeight()) { getViewTreeObserver().removeOnGlobalLayoutListener(this); @@ -907,6 +911,10 @@ public abstract class PanelView extends FrameLayout { if (mExpanding) { notifyExpandingFinished(); } + if (mInstantExpanding) { + mInstantExpanding = false; + notifyBarPanelExpansionChanged(); + } } private void abortAnimations() { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 0b66959ec4bc8..13b4d54c638f6 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4409,7 +4409,11 @@ public class WindowManagerService extends IWindowManager.Stub if (wtoken.hidden || wtoken.mAppStopped) { wtoken.allDrawn = false; wtoken.deferClearAllDrawn = false; - wtoken.waitingToShow = true; + + // If the app was already visible, don't reset the waitingToShow state. + if (wtoken.hidden) { + wtoken.waitingToShow = true; + } if (wtoken.clientHidden) { // In the case where we are making an app visible