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

Commit 6d1ef3b4 authored by Jorge Gil's avatar Jorge Gil Committed by Android (Google) Code Review
Browse files

Merge "Use reentry size to calculate PIP entry bounds" into rvc-qpr-dev

parents c4da5706 98e7fb1d
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ public class PipBoundsHandler {
        }
        if (isValidPictureInPictureAspectRatio(mAspectRatio)) {
            transformBoundsToAspectRatio(normalBounds, mAspectRatio,
                    false /* useCurrentMinEdgeSize */);
                    false /* useCurrentMinEdgeSize */, false /* useCurrentSize */);
        }
        displayInfo.copyFrom(mDisplayInfo);
    }
@@ -278,7 +278,9 @@ public class PipBoundsHandler {
            destinationBounds = new Rect(bounds);
        }
        if (isValidPictureInPictureAspectRatio(aspectRatio)) {
            transformBoundsToAspectRatio(destinationBounds, aspectRatio, useCurrentMinEdgeSize);
            boolean useCurrentSize = bounds == null && mReentrySize != null;
            transformBoundsToAspectRatio(destinationBounds, aspectRatio, useCurrentMinEdgeSize,
                    useCurrentSize);
        }
        mAspectRatio = aspectRatio;
        return destinationBounds;
@@ -384,7 +386,8 @@ public class PipBoundsHandler {
     * @param stackBounds
     */
    public void transformBoundsToAspectRatio(Rect stackBounds) {
        transformBoundsToAspectRatio(stackBounds, mAspectRatio, true);
        transformBoundsToAspectRatio(stackBounds, mAspectRatio, true /* useCurrentMinEdgeSize */,
                true /* useCurrentSize */);
    }

    /**
@@ -392,18 +395,16 @@ public class PipBoundsHandler {
     * specified aspect ratio.
     */
    private void transformBoundsToAspectRatio(Rect stackBounds, float aspectRatio,
            boolean useCurrentMinEdgeSize) {
            boolean useCurrentMinEdgeSize, boolean useCurrentSize) {
        // Save the snap fraction and adjust the size based on the new aspect ratio.
        final float snapFraction = mSnapAlgorithm.getSnapFraction(stackBounds,
                getMovementBounds(stackBounds));
        final int minEdgeSize;
        final int minEdgeSize = useCurrentMinEdgeSize ? mCurrentMinSize : mDefaultMinSize;
        final Size size;
        if (useCurrentMinEdgeSize) {
            minEdgeSize = mCurrentMinSize;
        if (useCurrentMinEdgeSize || useCurrentSize) {
            size = mSnapAlgorithm.getSizeForAspectRatio(
                    new Size(stackBounds.width(), stackBounds.height()), aspectRatio, minEdgeSize);
        } else {
            minEdgeSize = mDefaultMinSize;
            size = mSnapAlgorithm.getSizeForAspectRatio(aspectRatio, minEdgeSize,
                    mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
        }
+31 −0
Original line number Diff line number Diff line
@@ -269,6 +269,21 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
        assertBoundsInclusionWithMargin("restoreLastPosition", oldPosition, newPosition);
    }

    @Test
    public void onSaveReentryBounds_restoreLastSize() {
        final Rect oldSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
                DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);

        oldSize.scale(1.25f);
        mPipBoundsHandler.onSaveReentryBounds(mTestComponentName1, oldSize);

        final Rect newSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
                DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);

        assertEquals(oldSize.width(), newSize.width());
        assertEquals(oldSize.height(), newSize.height());
    }

    @Test
    public void onResetReentryBounds_useDefaultBounds() {
        final Rect defaultBounds = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
@@ -299,6 +314,22 @@ public class PipBoundsHandlerTest extends SysuiTestCase {
        assertBoundsInclusionWithMargin("restoreLastPosition", newBounds, actualBounds);
    }

    @Test
    public void onSaveReentryBounds_componentMismatch_restoreLastSize() {
        final Rect oldSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
                DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);

        oldSize.scale(1.25f);
        mPipBoundsHandler.onSaveReentryBounds(mTestComponentName1, oldSize);

        mPipBoundsHandler.onResetReentryBounds(mTestComponentName2);
        final Rect newSize = mPipBoundsHandler.getDestinationBounds(mTestComponentName1,
                DEFAULT_ASPECT_RATIO, EMPTY_CURRENT_BOUNDS, EMPTY_MINIMAL_SIZE);

        assertEquals(oldSize.width(), newSize.width());
        assertEquals(oldSize.height(), newSize.height());
    }

    private void assertBoundsInclusionWithMargin(String from, Rect expected, Rect actual) {
        final Rect expectedWithMargin = new Rect(expected);
        expectedWithMargin.inset(-ROUNDING_ERROR_MARGIN, -ROUNDING_ERROR_MARGIN);