diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/AppWindowAnimator.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 14 |
2 files changed, 20 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java index f3a09ed14936..ddbbde1eb421 100644 --- a/services/core/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java @@ -198,6 +198,14 @@ public class AppWindowAnimator { return animation != null || mAppToken.inPendingTransaction; } + /** + * @return whether an animation is about to start, i.e. the animation is set already but we + * haven't processed the first frame yet. + */ + boolean isAnimationStarting() { + return animation != null && !animating; + } + public int getTransit() { return mTransit; } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 414c2afccbb6..4adc3b61883a 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1458,8 +1458,18 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override public boolean canAffectSystemUiFlags() { final boolean shown = mWinAnimator.getShown(); - final boolean exiting = mAnimatingExit || mDestroying - || mAppToken != null && mAppToken.hidden; + + // We only consider the app to be exiting when the animation has started. After the app + // transition is executed the windows are marked exiting before the new windows have been + // shown. Thus, wait considering a window to be exiting after the animation has actually + // started. + final boolean appAnimationStarting = mAppToken != null + && mAppToken.mAppAnimator.isAnimationStarting(); + final boolean exitingSelf = mAnimatingExit && (!mWinAnimator.isAnimationStarting() + && !appAnimationStarting); + final boolean appExiting = mAppToken != null && mAppToken.hidden && !appAnimationStarting; + + final boolean exiting = exitingSelf || mDestroying || appExiting; final boolean translucent = mAttrs.alpha == 0.0f; return shown && !exiting && !translucent; } |