diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java b/packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java index 153359204d5fd..d219a9e65a3cc 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipAnimationController.java @@ -110,6 +110,10 @@ public class PipAnimationController { return mCurrentAnimator; } + PipTransitionAnimator getCurrentAnimator() { + return mCurrentAnimator; + } + private PipTransitionAnimator setupPipTransitionAnimator(PipTransitionAnimator animator) { animator.setSurfaceTransactionHelper(mSurfaceTransactionHelper); animator.setInterpolator(mFastOutSlowInInterpolator); @@ -239,6 +243,9 @@ public class PipAnimationController { void setDestinationBounds(Rect destinationBounds) { mDestinationBounds.set(destinationBounds); + if (mAnimationType == ANIM_TYPE_ALPHA) { + onStartTransaction(mLeash, newSurfaceControlTransaction()); + } } void setCurrentValue(T value) { diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java index 4969fc81978ec..1868536dca988 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipBoundsHandler.java @@ -199,6 +199,10 @@ public class PipBoundsHandler { return mLastDestinationBounds; } + public Rect getDisplayBounds() { + return new Rect(0, 0, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight); + } + /** * Responds to IPinnedStackListener on {@link DisplayInfo} change. * It will normally follow up with a diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index da171b27d97cf..4b3847217e016 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -318,6 +318,29 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub { null /* updateBoundsCallback */); } + /** + * TODO(b/152809058): consolidate the display info handling logic in SysUI + */ + @SuppressWarnings("unchecked") + public void mayUpdateCurrentAnimationOnRotationChange() { + final PipAnimationController.PipTransitionAnimator animator = + mPipAnimationController.getCurrentAnimator(); + if (animator != null && animator.isRunning() + && animator.getTransitionDirection() == TRANSITION_DIRECTION_TO_PIP) { + final Rect currentDestinationBounds = animator.getDestinationBounds(); + if (mPipBoundsHandler.getDisplayBounds().contains(currentDestinationBounds)) { + return; + } + final Rect newDestinationBounds = mPipBoundsHandler.getDestinationBounds( + getAspectRatioOrDefault(mTaskInfo.pictureInPictureParams), + null /* bounds */, getMinimalSize(mTaskInfo.topActivityInfo)); + if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) { + animator.updateEndValue(newDestinationBounds); + } + animator.setDestinationBounds(newDestinationBounds); + } + } + /** * @return {@code true} if the aspect ratio is changed since no other parameters within * {@link PictureInPictureParams} would affect the bounds. diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index ea195327a410d..8a25f4d441d3c 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -363,6 +363,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds, animatingBounds, fromImeAdjustment, fromShelfAdjustment, mTmpDisplayInfo.rotation); + mPipTaskOrganizer.mayUpdateCurrentAnimationOnRotationChange(); } public void dump(PrintWriter pw) {