Merge "Snap the PIP window to the left or right edge after pinch resize" into sc-dev

This commit is contained in:
Jorge Gil
2021-05-18 23:44:26 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 2 deletions

View File

@@ -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);
}
/**

View File

@@ -517,7 +517,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);