diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 66c962d855b7..c9115e4dd7fc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -124,7 +124,10 @@ import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_ import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; +import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS; +import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; +import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY; @@ -2633,10 +2636,22 @@ public class WindowManagerService extends IWindowManager.Stub if (win.isWinVisibleLw() && win.mDisplayContent.okToAnimate()) { String reason = null; if (winAnimator.applyAnimationLocked(transit, false)) { + // This is a WMCore-driven window animation. reason = "applyAnimation"; focusMayChange = true; win.mAnimatingExit = true; - } else if (win.isExitAnimationRunningSelfOrParent()) { + } else if ( + // This is already animating via a WMCore-driven window animation + win.isSelfAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION) + // Or already animating as part of a legacy app-transition + || win.isAnimating(PARENTS | TRANSITION, + ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS) + // Or already animating as part of a shell-transition. + || (win.inTransition() + // Filter out non-app windows since transitions don't animate those + // (but may still "wait" on them for readiness) + && (win.mActivityRecord != null || win.mIsWallpaper))) { + // TODO(b/247005789): set mAnimatingExit somewhere in shell-transitions setup. reason = "animating"; win.mAnimatingExit = true; } else if (win.mDisplayContent.mWallpaperController.isWallpaperTarget(win) |