diff options
3 files changed, 14 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index f859fd2e44bb..da25c53323be 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -304,10 +304,11 @@ class AppWindowToken extends WindowToken { pw.print(prefix); pw.print("inPendingTransaction="); pw.println(inPendingTransaction); } - if (startingData != null || removed || firstWindowDrawn) { + if (startingData != null || removed || firstWindowDrawn || mDeferRemoval) { pw.print(prefix); pw.print("startingData="); pw.print(startingData); pw.print(" removed="); pw.print(removed); - pw.print(" firstWindowDrawn="); pw.println(firstWindowDrawn); + pw.print(" firstWindowDrawn="); pw.print(firstWindowDrawn); + pw.print(" mDeferRemoval="); pw.println(mDeferRemoval); } if (startingWindow != null || startingView != null || startingDisplayed || startingMoved) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index a60be3b95d6a..b49b87c0d5b1 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -68,6 +68,6 @@ class Task { @Override public String toString() { - return "{taskId=" + taskId + " appTokens=" + mAppTokens + "}"; + return "{taskId=" + taskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}"; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 27509411d93d..4d0169d55916 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5200,8 +5200,17 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + taskId); EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, taskId, "removeTask"); task.mDeferRemoval = false; - task.mStack.removeTask(task); + stack.removeTask(task); mTaskIdToTask.delete(task.taskId); + + final ArrayList<AppWindowToken> exitingApps = stack.mExitingAppTokens; + for (int appNdx = exitingApps.size() - 1; appNdx >= 0; --appNdx) { + final AppWindowToken wtoken = exitingApps.get(appNdx); + if (wtoken.groupId == taskId) { + wtoken.mDeferRemoval = false; + exitingApps.remove(appNdx); + } + } } public void removeTask(int taskId) { |