Loading services/core/java/com/android/server/wm/BoundsAnimationController.java +12 −0 Original line number Diff line number Diff line Loading @@ -435,6 +435,18 @@ public class BoundsAnimationController { moveFromFullscreen, moveToFullscreen, animationType); } /** * Cancel existing animation if the destination was modified. */ void cancel(final BoundsAnimationTarget target) { final BoundsAnimator existing = mRunningAnimations.get(target); if (existing != null) { // Cancel animation. Since its already started, send animation end to client. if (DEBUG) Slog.d(TAG, "cancel: mTarget= " + target); existing.cancelAndCallAnimationEnd(); } } @VisibleForTesting BoundsAnimator animateBoundsImpl(final BoundsAnimationTarget target, Rect from, Rect to, int animationDuration, @SchedulePipModeChangedState int schedulePipModeChangedState, Loading services/core/java/com/android/server/wm/TaskStack.java +11 −2 Original line number Diff line number Diff line Loading @@ -388,7 +388,9 @@ public class TaskStack extends WindowContainer<Task> implements * @return true if bounds were updated to some non-empty value. */ boolean calculatePinnedBoundsForConfigChange(Rect inOutBounds) { boolean animating = false; if ((mBoundsAnimatingRequested || mBoundsAnimating) && !mBoundsAnimationTarget.isEmpty()) { animating = true; getFinalAnimationBounds(mTmpRect2); } else { mTmpRect2.set(inOutBounds); Loading @@ -398,6 +400,13 @@ public class TaskStack extends WindowContainer<Task> implements if (updated) { inOutBounds.set(mTmpRect3); // The final boundary is updated while there is an existing boundary animation. Let's // cancel this animation to prevent the obsolete animation overwritten updated bounds. if (animating && !inOutBounds.equals(mBoundsAnimationTarget)) { final DisplayContent displayContent = getDisplayContent(); displayContent.mBoundsAnimationController.getHandler().post(() -> displayContent.mBoundsAnimationController.cancel(this)); } // Once we've set the bounds based on the rotation of the old bounds in the new // orientation, clear the animation target bounds since they are obsolete, and // cancel any currently running animations Loading Loading @@ -1585,7 +1594,6 @@ public class TaskStack extends WindowContainer<Task> implements mBoundsAnimatingRequested = false; mBoundsAnimating = true; mCancelCurrentBoundsAnimation = false; mAnimationType = animationType; // If we are changing UI mode, as in the PiP to fullscreen Loading Loading @@ -1645,7 +1653,7 @@ public class TaskStack extends WindowContainer<Task> implements mBoundsAnimationTarget, false /* forceUpdate */); } if (finalStackSize != null) { if (finalStackSize != null && !mCancelCurrentBoundsAnimation) { setPinnedStackSize(finalStackSize, null); } else { // We have been canceled, so the final stack size is null, still run the Loading Loading @@ -1758,6 +1766,7 @@ public class TaskStack extends WindowContainer<Task> implements } final @BoundsAnimationController.AnimationType int animationType = intendedAnimationType; mCancelCurrentBoundsAnimation = false; displayContent.mBoundsAnimationController.getHandler().post(() -> { displayContent.mBoundsAnimationController.animateBounds(this, fromBounds, finalToBounds, animationDuration, finalSchedulePipModeChangedState, Loading Loading
services/core/java/com/android/server/wm/BoundsAnimationController.java +12 −0 Original line number Diff line number Diff line Loading @@ -435,6 +435,18 @@ public class BoundsAnimationController { moveFromFullscreen, moveToFullscreen, animationType); } /** * Cancel existing animation if the destination was modified. */ void cancel(final BoundsAnimationTarget target) { final BoundsAnimator existing = mRunningAnimations.get(target); if (existing != null) { // Cancel animation. Since its already started, send animation end to client. if (DEBUG) Slog.d(TAG, "cancel: mTarget= " + target); existing.cancelAndCallAnimationEnd(); } } @VisibleForTesting BoundsAnimator animateBoundsImpl(final BoundsAnimationTarget target, Rect from, Rect to, int animationDuration, @SchedulePipModeChangedState int schedulePipModeChangedState, Loading
services/core/java/com/android/server/wm/TaskStack.java +11 −2 Original line number Diff line number Diff line Loading @@ -388,7 +388,9 @@ public class TaskStack extends WindowContainer<Task> implements * @return true if bounds were updated to some non-empty value. */ boolean calculatePinnedBoundsForConfigChange(Rect inOutBounds) { boolean animating = false; if ((mBoundsAnimatingRequested || mBoundsAnimating) && !mBoundsAnimationTarget.isEmpty()) { animating = true; getFinalAnimationBounds(mTmpRect2); } else { mTmpRect2.set(inOutBounds); Loading @@ -398,6 +400,13 @@ public class TaskStack extends WindowContainer<Task> implements if (updated) { inOutBounds.set(mTmpRect3); // The final boundary is updated while there is an existing boundary animation. Let's // cancel this animation to prevent the obsolete animation overwritten updated bounds. if (animating && !inOutBounds.equals(mBoundsAnimationTarget)) { final DisplayContent displayContent = getDisplayContent(); displayContent.mBoundsAnimationController.getHandler().post(() -> displayContent.mBoundsAnimationController.cancel(this)); } // Once we've set the bounds based on the rotation of the old bounds in the new // orientation, clear the animation target bounds since they are obsolete, and // cancel any currently running animations Loading Loading @@ -1585,7 +1594,6 @@ public class TaskStack extends WindowContainer<Task> implements mBoundsAnimatingRequested = false; mBoundsAnimating = true; mCancelCurrentBoundsAnimation = false; mAnimationType = animationType; // If we are changing UI mode, as in the PiP to fullscreen Loading Loading @@ -1645,7 +1653,7 @@ public class TaskStack extends WindowContainer<Task> implements mBoundsAnimationTarget, false /* forceUpdate */); } if (finalStackSize != null) { if (finalStackSize != null && !mCancelCurrentBoundsAnimation) { setPinnedStackSize(finalStackSize, null); } else { // We have been canceled, so the final stack size is null, still run the Loading Loading @@ -1758,6 +1766,7 @@ public class TaskStack extends WindowContainer<Task> implements } final @BoundsAnimationController.AnimationType int animationType = intendedAnimationType; mCancelCurrentBoundsAnimation = false; displayContent.mBoundsAnimationController.getHandler().post(() -> { displayContent.mBoundsAnimationController.animateBounds(this, fromBounds, finalToBounds, animationDuration, finalSchedulePipModeChangedState, Loading