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

Commit ef11620c authored by jorgegil@google.com's avatar jorgegil@google.com
Browse files

Snap the PIP window to the left or right edge after pinch resize

Restrict the PIP resize to the left and right edges only,
instead of allowing the top or bottom edges as snap targets.

Bug: 186610221
Test: pinch to resize and let go at the center top or bottom
edge - verify it snaps to either side of the screen

Change-Id: Ifbc96fddc000ccb2ae344755a9276f24e67d4571
parent 63e732e8
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -367,7 +367,15 @@ public class PipBoundsAlgorithm {
     *         the default stack bounds when first entering PiP.
     */
    public float getSnapFraction(Rect stackBounds) {
        return mSnapAlgorithm.getSnapFraction(stackBounds, getMovementBounds(stackBounds));
        return getSnapFraction(stackBounds, getMovementBounds(stackBounds));
    }

    /**
     * @return the default snap fraction to apply instead of the default gravity when calculating
     *         the default stack bounds when first entering PiP.
     */
    public float getSnapFraction(Rect stackBounds, Rect movementBounds) {
        return mSnapAlgorithm.getSnapFraction(stackBounds, movementBounds);
    }

    /**
+12 −1
Original line number Diff line number Diff line
@@ -514,7 +514,18 @@ public class PipResizeGestureHandler {
                        || mLastResizeBounds.height() >= PINCH_RESIZE_AUTO_MAX_RATIO * mMaxSize.y) {
                    resizeRectAboutCenter(mLastResizeBounds, mMaxSize.x, mMaxSize.y);
                }
                final float snapFraction = mPipBoundsAlgorithm.getSnapFraction(mLastResizeBounds);
                final int leftEdge = mLastResizeBounds.left;
                final Rect movementBounds =
                        mPipBoundsAlgorithm.getMovementBounds(mLastResizeBounds);
                final int fromLeft = Math.abs(leftEdge - movementBounds.left);
                final int fromRight = Math.abs(movementBounds.right - leftEdge);
                // The PIP will be snapped to either the right or left edge, so calculate which one
                // is closest to the current position.
                final int newLeft = fromLeft < fromRight
                        ? movementBounds.left : movementBounds.right;
                mLastResizeBounds.offsetTo(newLeft, mLastResizeBounds.top);
                final float snapFraction = mPipBoundsAlgorithm.getSnapFraction(
                        mLastResizeBounds, movementBounds);
                mPipBoundsAlgorithm.applySnapFraction(mLastResizeBounds, snapFraction);
                mPipTaskOrganizer.scheduleAnimateResizePip(startBounds, mLastResizeBounds,
                        PINCH_RESIZE_SNAP_DURATION, mAngle, callback);