Added WindowContainer.removeImmediately to support immediate removal
There are 2 types of window conatiner removals. The ones that happen
immediately and the ones that are deferred until the system is in
a good state to handle them. WindowContainer and its child classes
now support both through WC.removeImmediately() and WC.removeIfPossible()
methods.
The method names create a consistency in the codebase and also makes is
obvious what the methods will do.
Bug: 30060889
Change-Id: I459c2eef17e20cefc42e9cc542c9a3c69fc9b898
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 518b9b5..47b5f3d 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -75,6 +75,7 @@
final boolean voiceInteraction;
Task mTask;
+ // TODO: Have a fillParent variable in WindowContainer to this?
boolean appFullscreen;
int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
boolean layoutConfigChanges;
@@ -100,7 +101,7 @@
// These are to track the app's real drawing status if there were no saved surfaces.
boolean allDrawnExcludingSaved;
int numInterestingWindowsExcludingSaved;
- int numDrawnWindowsExclusingSaved;
+ int numDrawnWindowsExcludingSaved;
// Is this window's surface needed? This is almost like hidden, except
// it will sometimes be true a little earlier: when the token has
@@ -133,6 +134,7 @@
// Input application handle used by the input dispatcher.
final InputApplicationHandle mInputApplicationHandle;
+ // TODO: Have a WindowContainer state for tracking exiting/deferred removal.
boolean mIsExiting;
boolean mLaunchTaskBehind;
@@ -356,18 +358,12 @@
return StackId.canReceiveKeys(mTask.mStack.mStackId) || mAlwaysFocusable;
}
- void removeAppFromTaskLocked() {
+ @Override
+ void removeIfPossible() {
mIsExiting = false;
removeAllWindows();
-
- // Use local variable because removeAppToken will null out mTask.
- final Task task = mTask;
- if (task != null) {
- if (!task.removeAppToken(this)) {
- Slog.e(TAG, "removeAppFromTaskLocked: token=" + this
- + " not found.");
- }
- task.mStack.mExitingAppTokens.remove(this);
+ if (mTask != null) {
+ mTask.detachChild(this);
}
}