diff options
4 files changed, 22 insertions, 11 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java index b57e2d2c6ac2..b87c2f6ebad5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java @@ -228,6 +228,14 @@ public class PipBoundsState { mExpandedMovementBounds.set(bounds); } + /** Updates the min and max sizes based on the size spec and aspect ratio. */ + public void updateMinMaxSize(float aspectRatio) { + final Size minSize = mSizeSpecSource.getMinSize(aspectRatio); + mMinSize.set(minSize.getWidth(), minSize.getHeight()); + final Size maxSize = mSizeSpecSource.getMaxSize(aspectRatio); + mMaxSize.set(maxSize.getWidth(), maxSize.getHeight()); + } + /** Sets the max possible size for resize. */ public void setMaxSize(int width, int height) { mMaxSize.set(width, height); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index e018ecc0f7e3..6a1a62ea30a1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -1037,6 +1037,7 @@ public class PipTransition extends PipTransitionController { private void computeEnterPipRotatedBounds(int rotationDelta, int startRotation, int endRotation, TaskInfo taskInfo, Rect outDestinationBounds, @Nullable Rect outSourceHintRect) { mPipDisplayLayoutState.rotateTo(endRotation); + mPipBoundsState.updateMinMaxSize(mPipBoundsState.getAspectRatio()); final Rect displayBounds = mPipDisplayLayoutState.getDisplayBounds(); outDestinationBounds.set(mPipBoundsAlgorithm.getEntryDestinationBounds()); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 46840773cfc6..2cdec81d77ac 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -976,8 +976,16 @@ public class PipController implements PipTransitionController.PipTransitionCallb mPipBoundsState.addNamedUnrestrictedKeepClearArea(LAUNCHER_KEEP_CLEAR_AREA_TAG, hotseatKeepClearArea); onDisplayRotationChangedNotInPip(mContext, launcherRotation); + // cache current min/max size + Point minSize = mPipBoundsState.getMinSize(); + Point maxSize = mPipBoundsState.getMaxSize(); + mPipBoundsState.updateMinMaxSize(pictureInPictureParams.getAspectRatioFloat()); final Rect entryBounds = mPipTaskOrganizer.startSwipePipToHome(componentName, activityInfo, pictureInPictureParams); + // restore min/max size, as this is referenced later in OnDisplayChangingListener and needs + // to reflect the pre-rotation state for it to work + mPipBoundsState.setMinSize(minSize.x, minSize.y); + mPipBoundsState.setMaxSize(maxSize.x, maxSize.y); // sync mPipBoundsState with the newly calculated bounds. mPipBoundsState.setNormalBounds(entryBounds); return entryBounds; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java index e7dd31cc1fa9..c1adfffce074 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java @@ -467,17 +467,11 @@ public class PipTouchHandler { } private void updatePinchResizeSizeConstraints(float aspectRatio) { - final int minWidth, minHeight, maxWidth, maxHeight; - - minWidth = mSizeSpecSource.getMinSize(aspectRatio).getWidth(); - minHeight = mSizeSpecSource.getMinSize(aspectRatio).getHeight(); - maxWidth = mSizeSpecSource.getMaxSize(aspectRatio).getWidth(); - maxHeight = mSizeSpecSource.getMaxSize(aspectRatio).getHeight(); - - mPipResizeGestureHandler.updateMinSize(minWidth, minHeight); - mPipResizeGestureHandler.updateMaxSize(maxWidth, maxHeight); - mPipBoundsState.setMaxSize(maxWidth, maxHeight); - mPipBoundsState.setMinSize(minWidth, minHeight); + mPipBoundsState.updateMinMaxSize(aspectRatio); + mPipResizeGestureHandler.updateMinSize(mPipBoundsState.getMinSize().x, + mPipBoundsState.getMinSize().y); + mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getMaxSize().x, + mPipBoundsState.getMaxSize().y); } /** |