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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user