From 0c19166c770649326625c8dc8f3bd9207b0be197 Mon Sep 17 00:00:00 2001 From: "jorgegil@google.com" Date: Wed, 21 Oct 2020 13:18:53 -0700 Subject: [PATCH] Synchronize destination bounds after rotation in MotionHelper Make sure that the bounds state is updated with the final destination bounds after a rotation *before* sending the pip animation finished & cancelled callbacks. This ensures that the MotionHelper bounds are synchronized correctly at the end of the rotation to the post-rotation bounds and not the pre-rotation bounds by PipTouchHandler#onPinnedStackAnimationEnded. Bug: 171352429 Test: Enter PIP, rotate, move PIP - the window doesn't jump to the pre-rotation bounds when trying to move it. Change-Id: I36eb192210ec58ac3448c423f43b959ce29eff1f --- .../Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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