diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 805c986b1445f..de613aaa94ad2 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -329,11 +329,14 @@ class AppWindowToken extends WindowToken { final DisplayContentList displayList = new DisplayContentList(); for (int i = allWindows.size() - 1; i >= 0; i--) { final WindowState win = allWindows.get(i); - if (!win.mDestroying) { + + if (!(mAppStopped || win.mWindowRemovalAllowed)) { continue; } - if (!(mAppStopped || win.mWindowRemovalAllowed)) { + win.mWinAnimator.destroyPreservedSurfaceLocked(); + + if (!win.mDestroying) { continue; } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index e5f603c7865bc..f88e30b3c5e57 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -659,6 +659,13 @@ class WindowStateAnimator { mDestroyPreservedSurfaceUponRedraw = false; } + void markPreservedSurfaceForDestroy() { + if (mDestroyPreservedSurfaceUponRedraw + && !mService.mDestroyPreservedSurface.contains(mWin)) { + mService.mDestroyPreservedSurface.add(mWin); + } + } + WindowSurfaceController createSurfaceLocked() { final WindowState w = mWin; if (w.hasSavedSurface()) { @@ -1518,9 +1525,7 @@ class WindowStateAnimator { if (prepared && mLastHidden && mDrawState == HAS_DRAWN) { if (showSurfaceRobustlyLocked()) { - if (mDestroyPreservedSurfaceUponRedraw) { - mService.mDestroyPreservedSurface.add(mWin); - } + markPreservedSurfaceForDestroy(); mAnimator.requestRemovalOfReplacedWindows(w); mLastHidden = false; if (mIsWallpaper) {