From a50da607da58e7ee29ef73c506a526e490b86b7c Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 29 Dec 2016 11:51:42 +0100 Subject: [PATCH] Always remove starting window in performShow When going to homescreen and then opening apps quickly again, the surface was not yet fully destroyed so we never triggered the codepath to remove the starting window in that case, so it was lingering around forever. Test: Open app, press home, reopen app immidiately again, make sure snapshot starting window is removed. Bug: 31339431 Change-Id: I946e681e7dc222e3dedfd3edacb8f37aee4a198b --- .../core/java/com/android/server/wm/WindowState.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index b0945ee342432..608f056dc13c0 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3715,6 +3715,12 @@ class WindowState extends WindowContainer implements WindowManagerP logPerformShow("performShow on "); + final int drawState = mWinAnimator.mDrawState; + if ((drawState == HAS_DRAWN || drawState == READY_TO_SHOW) + && mAttrs.type != TYPE_APPLICATION_STARTING && mAppToken != null) { + mAppToken.onFirstWindowDrawn(this, mWinAnimator); + } + if (mWinAnimator.mDrawState != READY_TO_SHOW || !isReadyForDisplay()) { return false; } @@ -3749,10 +3755,6 @@ class WindowState extends WindowContainer implements WindowManagerP } } - if (mAttrs.type != TYPE_APPLICATION_STARTING && mAppToken != null) { - mAppToken.onFirstWindowDrawn(this, mWinAnimator); - } - if (mAttrs.type == TYPE_INPUT_METHOD) { getDisplayContent().mDividerControllerLocked.resetImeHideRequested(); }