Merge "Don't leak windows on removal with dummy animations" into mnc-dev
This commit is contained in:
@@ -2734,14 +2734,16 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
}
|
||||
}
|
||||
final AppWindowToken appToken = win.mAppToken;
|
||||
// Prevent an immediate window exit only for a real animation, ignoring e.g.
|
||||
// dummy animations.
|
||||
final boolean inAnimation = win.mWinAnimator.isWindowAnimatingNow();
|
||||
// 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())) {
|
||||
&& appToken.allAppWindows.size() == 1 && !inAnimation;
|
||||
if (!lastWinStartingNotAnimating && (win.mExiting || inAnimation)) {
|
||||
// The exit animation is running... wait for it!
|
||||
//Slog.i(TAG, "*** Running exit animation...");
|
||||
win.mExiting = true;
|
||||
win.mRemoveOnExit = true;
|
||||
final DisplayContent displayContent = win.getDisplayContent();
|
||||
@@ -2757,7 +2759,6 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
if (focusChanged) {
|
||||
mInputMonitor.updateInputWindowsLw(false /*force*/);
|
||||
}
|
||||
//dump();
|
||||
Binder.restoreCallingIdentity(origId);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -251,11 +251,21 @@ class WindowStateAnimator {
|
||||
&& mAppAnimator.animation == AppWindowAnimator.sDummyAnimation;
|
||||
}
|
||||
|
||||
/** Is this window currently animating? */
|
||||
/** Is this window currently set to animate or currently animating?
|
||||
* NOTE: The method will return true for cases where the window isn't currently animating, but
|
||||
* is set to animate. i.e. if the window animation is currently set to a dummy placeholder
|
||||
* animation. Use {@link #isWindowAnimatingNow} to know if the window is currently running a
|
||||
* real animation. */
|
||||
boolean isWindowAnimating() {
|
||||
return mAnimation != null;
|
||||
}
|
||||
|
||||
/** Is the window performing a real animation and not a dummy which is only waiting for an
|
||||
* an animation to start? */
|
||||
boolean isWindowAnimatingNow() {
|
||||
return isWindowAnimating() && !isDummyAnimation();
|
||||
}
|
||||
|
||||
void cancelExitAnimationForNextAnimationLocked() {
|
||||
if (mAnimation != null) {
|
||||
mAnimation.cancel();
|
||||
|
||||
Reference in New Issue
Block a user