Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c0fb89e authored by Mateusz Cicheński's avatar Mateusz Cicheński
Browse files

Update the min/max allowed pip size on aspect ratio change.

Test: manually, open YT app, play video go to pip and expand with double tap, close pip
then go to Maps app, start nagivating, enter pip and epand with double tap - no stretching
Bug: 241400465

Change-Id: Ie061be5ed15611b3b6917d084a13f5ee1eba7e3c
parent eb706b6e
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -503,6 +503,12 @@ public class PipController implements PipTransitionController.PipTransitionCallb
                            updateMovementBounds(null /* toBounds */, false /* fromRotation */,
                            updateMovementBounds(null /* toBounds */, false /* fromRotation */,
                                    false /* fromImeAdjustment */, false /* fromShelfAdjustment */,
                                    false /* fromImeAdjustment */, false /* fromShelfAdjustment */,
                                    null /* windowContainerTransaction */);
                                    null /* windowContainerTransaction */);
                        } else {
                            // when we enter pip for the first time, the destination bounds and pip
                            // bounds will already match, since they are calculated prior to
                            // starting the animation, so we only need to update the min/max size
                            // that is used for e.g. double tap to maximized state
                            mTouchHandler.updateMinMaxSize(ratio);
                        }
                        }
                    }
                    }


+22 −7
Original line number Original line Diff line number Diff line
@@ -412,13 +412,7 @@ public class PipTouchHandler {
                mPipBoundsState.getExpandedBounds(), insetBounds, expandedMovementBounds,
                mPipBoundsState.getExpandedBounds(), insetBounds, expandedMovementBounds,
                bottomOffset);
                bottomOffset);


        if (mPipResizeGestureHandler.isUsingPinchToZoom()) {
        updatePipSizeConstraints(insetBounds, normalBounds, aspectRatio);
            updatePinchResizeSizeConstraints(insetBounds, normalBounds, aspectRatio);
        } else {
            mPipResizeGestureHandler.updateMinSize(normalBounds.width(), normalBounds.height());
            mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getExpandedBounds().width(),
                    mPipBoundsState.getExpandedBounds().height());
        }


        // The extra offset does not really affect the movement bounds, but are applied based on the
        // The extra offset does not really affect the movement bounds, but are applied based on the
        // current state (ime showing, or shelf offset) when we need to actually shift
        // current state (ime showing, or shelf offset) when we need to actually shift
@@ -487,6 +481,27 @@ public class PipTouchHandler {
        }
        }
    }
    }


    /**
     * Update the values for min/max allowed size of picture in picture window based on the aspect
     * ratio.
     * @param aspectRatio aspect ratio to use for the calculation of min/max size
     */
    public void updateMinMaxSize(float aspectRatio) {
        updatePipSizeConstraints(mInsetBounds, mPipBoundsState.getNormalBounds(),
                aspectRatio);
    }

    private void updatePipSizeConstraints(Rect insetBounds, Rect normalBounds,
            float aspectRatio) {
        if (mPipResizeGestureHandler.isUsingPinchToZoom()) {
            updatePinchResizeSizeConstraints(insetBounds, normalBounds, aspectRatio);
        } else {
            mPipResizeGestureHandler.updateMinSize(normalBounds.width(), normalBounds.height());
            mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getExpandedBounds().width(),
                    mPipBoundsState.getExpandedBounds().height());
        }
    }

    private void updatePinchResizeSizeConstraints(Rect insetBounds, Rect normalBounds,
    private void updatePinchResizeSizeConstraints(Rect insetBounds, Rect normalBounds,
            float aspectRatio) {
            float aspectRatio) {
        final int shorterLength = Math.min(mPipBoundsState.getDisplayBounds().width(),
        final int shorterLength = Math.min(mPipBoundsState.getDisplayBounds().width(),