diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index b91d3a8525e56..5a420caa176ca 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -983,29 +983,6 @@ class RootWindowContainer extends WindowContainer mWmService.checkDrawnWindowsLocked(); } - final int N = mWmService.mPendingRemove.size(); - if (N > 0) { - if (mWmService.mPendingRemoveTmp.length < N) { - mWmService.mPendingRemoveTmp = new WindowState[N + 10]; - } - mWmService.mPendingRemove.toArray(mWmService.mPendingRemoveTmp); - mWmService.mPendingRemove.clear(); - ArrayList displayList = new ArrayList(); - for (i = 0; i < N; i++) { - final WindowState w = mWmService.mPendingRemoveTmp[i]; - w.removeImmediately(); - final DisplayContent displayContent = w.getDisplayContent(); - if (displayContent != null && !displayList.contains(displayContent)) { - displayList.add(displayContent); - } - } - - for (int j = displayList.size() - 1; j >= 0; --j) { - final DisplayContent dc = displayList.get(j); - dc.assignWindowLayers(true /*setLayoutNeeded*/); - } - } - forAllDisplays(dc -> { dc.getInputMonitor().updateInputWindowsLw(true /*force*/); dc.updateSystemGestureExclusion(); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 7be128b53f8cf..b5e6f49146f17 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -222,7 +222,6 @@ import android.util.DisplayMetrics; import android.util.EventLog; import android.util.MergedConfiguration; import android.util.Slog; -import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.TimeUtils; import android.util.TypedValue; @@ -587,20 +586,6 @@ public class WindowManagerService extends IWindowManager.Stub */ final ArrayList mResizingWindows = new ArrayList<>(); - /** - * Windows whose animations have ended and now must be removed. - */ - final ArrayList mPendingRemove = new ArrayList<>(); - - /** - * Used when processing mPendingRemove to avoid working on the original array. - */ - WindowState[] mPendingRemoveTmp = new WindowState[20]; - - // TODO: use WindowProcessController once go/wm-unified is done. - /** Mapping of process pids to configurations */ - final SparseArray mProcessConfigurations = new SparseArray<>(); - /** * Windows whose surface should be destroyed. */ @@ -2038,7 +2023,6 @@ public class WindowManagerService extends IWindowManager.Stub dc.mWinRemovedSinceNullFocus.add(win); } mEmbeddedWindowController.onWindowRemoved(win); - mPendingRemove.remove(win); mResizingWindows.remove(win); updateNonSystemOverlayWindowsVisibilityIfNeeded(win, false /* surfaceShown */); mWindowsChanged = true; @@ -6342,23 +6326,6 @@ public class WindowManagerService extends IWindowManager.Stub } } } - if (mPendingRemove.size() > 0) { - pw.println(); - pw.println(" Remove pending for:"); - for (int i=mPendingRemove.size()-1; i>=0; i--) { - WindowState w = mPendingRemove.get(i); - if (windows == null || windows.contains(w)) { - pw.print(" Remove #"); pw.print(i); pw.print(' '); - pw.print(w); - if (dumpAll) { - pw.println(":"); - w.dump(pw, " ", true); - } else { - pw.println(); - } - } - } - } if (mForceRemoves != null && mForceRemoves.size() > 0) { pw.println(); pw.println(" Windows force removing:"); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 6acd4548392a8..5bbe2cd853f61 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -4835,15 +4835,20 @@ class WindowState extends WindowContainer implements WindowManagerP if (hasSurface) { mWmService.mDestroySurface.add(this); } - if (mRemoveOnExit) { - mWmService.mPendingRemove.add(this); - mRemoveOnExit = false; - } } mAnimatingExit = false; getDisplayContent().mWallpaperController.hideWallpapers(this); } + @Override + boolean handleCompleteDeferredRemoval() { + if (mRemoveOnExit) { + mRemoveOnExit = false; + removeImmediately(); + } + return super.handleCompleteDeferredRemoval(); + } + boolean clearAnimatingFlags() { boolean didSomething = false; // We don't want to clear it out for windows that get replaced, because the