summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java30
-rw-r--r--services/core/java/com/android/server/wm/WindowToken.java7
2 files changed, 13 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index cebb909..5d8979f 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2672,7 +2672,8 @@ public class WindowManagerService extends IWindowManager.Stub
}
void removeWindowLocked(WindowState win) {
- if (win.mAttrs.type == TYPE_APPLICATION_STARTING) {
+ final boolean startingWindow = win.mAttrs.type == TYPE_APPLICATION_STARTING;
+ if (startingWindow) {
if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Starting window removed " + win);
}
@@ -2721,7 +2722,13 @@ public class WindowManagerService extends IWindowManager.Stub
mAccessibilityController.onWindowTransitionLocked(win, transit);
}
}
- if (win.mExiting || win.mWinAnimator.isAnimating()) {
+ final AppWindowToken appToken = win.mAppToken;
+ // The starting window is the last window in this app token and it isn't animating.
+ // Allow it to be removed now as there is no additional window or animation that will
+ // trigger its removal.
+ final boolean lastWinStartingNotAnimating = startingWindow && appToken!= null
+ && appToken.allAppWindows.size() == 1 && !win.mWinAnimator.isWindowAnimating();
+ if (!lastWinStartingNotAnimating && (win.mExiting || win.mWinAnimator.isAnimating())) {
// The exit animation is running... wait for it!
//Slog.i(TAG, "*** Running exit animation...");
win.mExiting = true;
@@ -2733,8 +2740,8 @@ public class WindowManagerService extends IWindowManager.Stub
final boolean focusChanged = updateFocusedWindowLocked(
UPDATE_FOCUS_WILL_PLACE_SURFACES, false /*updateInputWindows*/);
performLayoutAndPlaceSurfacesLocked();
- if (win.mAppToken != null) {
- win.mAppToken.updateReportedVisibilityLocked();
+ if (appToken != null) {
+ appToken.updateReportedVisibilityLocked();
}
if (focusChanged) {
mInputMonitor.updateInputWindowsLw(false /*force*/);
@@ -4648,12 +4655,7 @@ public class WindowManagerService extends IWindowManager.Stub
mOpeningApps.remove(wtoken);
mClosingApps.remove(wtoken);
- wtoken.waitingToShow = wtoken.waitingToHide = false;
- wtoken.hiddenRequested = !visible;
-
- mOpeningApps.remove(wtoken);
- mClosingApps.remove(wtoken);
- wtoken.waitingToShow = wtoken.waitingToHide = false;
+ wtoken.waitingToShow = false;
wtoken.hiddenRequested = !visible;
// If we are preparing an app transition, then delay changing
@@ -4692,12 +4694,6 @@ public class WindowManagerService extends IWindowManager.Stub
} else {
mClosingApps.add(wtoken);
wtoken.mEnteringAnimation = false;
-
- // If the token is currently visible (should be the
- // common case), then set up to wait for it to be hidden.
- if (!wtoken.hidden) {
- wtoken.waitingToHide = true;
- }
}
if (mAppTransition.getAppTransition() == AppTransition.TRANSIT_TASK_OPEN_BEHIND) {
// We're launchingBehind, add the launching activity to mOpeningApps.
@@ -4867,7 +4863,6 @@ public class WindowManagerService extends IWindowManager.Stub
delayed = true;
} else if (mAppTransition.isTransitionSet()) {
mClosingApps.add(wtoken);
- wtoken.waitingToHide = true;
delayed = true;
}
if (DEBUG_APP_TRANSITIONS) Slog.v(
@@ -9416,7 +9411,6 @@ public class WindowManagerService extends IWindowManager.Stub
wtoken.inPendingTransaction = false;
setTokenVisibilityLocked(wtoken, animLp, false, transit, false, voiceInteraction);
wtoken.updateReportedVisibilityLocked();
- wtoken.waitingToHide = false;
// Force the allDrawn flag, because we want to start
// this guy's animations regardless of whether it's
// gotten drawn.
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index b303505..4ac9135 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -63,10 +63,6 @@ class WindowToken {
// will be shown.
boolean waitingToShow;
- // Set to true when this token is in a pending transaction where it
- // will be hidden.
- boolean waitingToHide;
-
// Set to true when this token is in a pending transaction where its
// windows will be put to the bottom of the list.
boolean sendingToBottom;
@@ -93,9 +89,8 @@ class WindowToken {
pw.print(prefix); pw.print("windowType="); pw.print(windowType);
pw.print(" hidden="); pw.print(hidden);
pw.print(" hasVisible="); pw.println(hasVisible);
- if (waitingToShow || waitingToHide || sendingToBottom) {
+ if (waitingToShow || sendingToBottom) {
pw.print(prefix); pw.print("waitingToShow="); pw.print(waitingToShow);
- pw.print(" waitingToHide="); pw.print(waitingToHide);
pw.print(" sendingToBottom="); pw.print(sendingToBottom);
}
}