Merge "Skip window exit animation if display has transition" into tm-dev am: 61f01fe56b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17526303

Change-Id: I2050981aa0925ed9b8d6212af8c75a421a9847d4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Riddle Hsu
2022-04-07 05:55:30 +00:00
committed by Automerger Merge Worker

View File

@@ -2606,11 +2606,17 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return;
}
// Remove immediately if there is display transition because the animation is
// usually unnoticeable (e.g. covered by rotation animation) and the animation
// bounds could be inconsistent, such as depending on when the window applies
// its draw transaction with new rotation.
final boolean allowExitAnimation = !getDisplayContent().inTransition();
if (wasVisible) {
final int transit = (!startingWindow) ? TRANSIT_EXIT : TRANSIT_PREVIEW_DONE;
// Try starting an animation.
if (mWinAnimator.applyAnimationLocked(transit, false)) {
if (allowExitAnimation && mWinAnimator.applyAnimationLocked(transit, false)) {
ProtoLog.v(WM_DEBUG_ANIM,
"Set animatingExit: reason=remove/applyAnimation win=%s", this);
mAnimatingExit = true;
@@ -2624,7 +2630,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
mWmService.mAccessibilityController.onWindowTransition(this, transit);
}
}
final boolean isAnimating = mAnimatingExit || isExitAnimationRunningSelfOrParent();
final boolean isAnimating = allowExitAnimation
&& (mAnimatingExit || isExitAnimationRunningSelfOrParent());
final boolean lastWindowIsStartingWindow = startingWindow && mActivityRecord != null
&& mActivityRecord.isLastWindow(this);
// We delay the removal of a window if it has a showing surface that can be used to run
@@ -5284,12 +5291,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
if (mControllableInsetProvider != null) {
return;
}
if (getDisplayContent().inTransition()) {
// Skip because the animation is usually unnoticeable (e.g. covered by rotation
// animation) and the animation bounds could be inconsistent, such as depending
// on when the window applies its draw transaction with new rotation.
return;
}
final DisplayInfo displayInfo = getDisplayInfo();
anim.initialize(mWindowFrames.mFrame.width(), mWindowFrames.mFrame.height(),