Merge "Animate app exit for cases where the app is already hidden before transition" into mnc-dev

This commit is contained in:
Wale Ogunwale
2015-07-16 17:00:58 +00:00
committed by Android (Google) Code Review

View File

@@ -2730,10 +2730,10 @@ public class WindowManagerService extends IWindowManager.Stub
wasVisible = win.isWinVisibleLw(); wasVisible = win.isWinVisibleLw();
if (wasVisible) { if (wasVisible) {
int transit = WindowManagerPolicy.TRANSIT_EXIT; final int transit = (!startingWindow)
if (win.mAttrs.type == TYPE_APPLICATION_STARTING) { ? WindowManagerPolicy.TRANSIT_EXIT
transit = WindowManagerPolicy.TRANSIT_PREVIEW_DONE; : WindowManagerPolicy.TRANSIT_PREVIEW_DONE;
}
// Try starting an animation. // Try starting an animation.
if (win.mWinAnimator.applyAnimationLocked(transit, false)) { if (win.mWinAnimator.applyAnimationLocked(transit, false)) {
win.mExiting = true; win.mExiting = true;
@@ -2745,12 +2745,13 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} }
final AppWindowToken appToken = win.mAppToken; final AppWindowToken appToken = win.mAppToken;
final boolean isAnimating = win.mWinAnimator.isAnimating();
// The starting window is the last window in this app token and it isn't animating. // 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 // Allow it to be removed now as there is no additional window or animation that will
// trigger its removal. // trigger its removal.
final boolean lastWinStartingNotAnimating = startingWindow && appToken!= null final boolean lastWinStartingNotAnimating = startingWindow && appToken!= null
&& appToken.allAppWindows.size() == 1 && !win.mWinAnimator.isAnimating(); && appToken.allAppWindows.size() == 1 && !isAnimating;
if (!lastWinStartingNotAnimating && (win.mExiting || win.mWinAnimator.isAnimating())) { if (!lastWinStartingNotAnimating && (win.mExiting || isAnimating)) {
// The exit animation is running... wait for it! // The exit animation is running... wait for it!
win.mExiting = true; win.mExiting = true;
win.mRemoveOnExit = true; win.mRemoveOnExit = true;
@@ -4527,7 +4528,10 @@ public class WindowManagerService extends IWindowManager.Stub
} }
wtoken.willBeHidden = false; wtoken.willBeHidden = false;
if (wtoken.hidden == visible) { // Allow for state changes and animation to be applied if token is transitioning
// visibility state or the token was marked as hidden and is exiting before we had a chance
// to play the transition animation.
if (wtoken.hidden == visible || (wtoken.hidden && wtoken.mIsExiting)) {
boolean changed = false; boolean changed = false;
if (DEBUG_APP_TRANSITIONS) Slog.v( if (DEBUG_APP_TRANSITIONS) Slog.v(
TAG, "Changing app " + wtoken + " hidden=" + wtoken.hidden TAG, "Changing app " + wtoken + " hidden=" + wtoken.hidden