diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 6990186ece3dd..02d6ac33b20a0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -743,6 +743,10 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, if (animator == null || !animator.isRunning() || animator.getTransitionDirection() != TRANSITION_DIRECTION_TO_PIP) { if (mState.isInPip() && fromRotation) { + // Update bounds state to final destination first. It's important to do this + // before finishing & cancelling the transition animation so that the MotionHelper + // bounds are synchronized to the destination bounds when the animation ends. + mPipBoundsState.setBounds(destinationBoundsOut); // If we are rotating while there is a current animation, immediately cancel the // animation (remove the listeners so we don't trigger the normal finish resize // call that should only happen on the update thread) @@ -756,7 +760,6 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, sendOnPipTransitionCancelled(direction); sendOnPipTransitionFinished(direction); } - mPipBoundsState.setBounds(destinationBoundsOut); // Create a reset surface transaction for the new bounds and update the window // container transaction