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

Commit 9bd7f625 authored by Ikram Gabiyev's avatar Ikram Gabiyev Committed by Hongwei Wang
Browse files

Fix getOverrideMinSize to not go beyond min bounds

Fixed getOverrideMinSize in PipSizeSpecHandler to set
a lower bound on the possible overridden min sizes.

Also adjusting unit tests to reflect the new purpose of
getOverrideMinEdgeSize()

Bug: 198643358
Test: atest PinnedStackTests#testEnterPipWithTinyMinimalSize
Change-Id: Ie6c6f3bdbb939156cd0cbd1fb76e680592a9b426
Merged-In: Ie6c6f3bdbb939156cd0cbd1fb76e680592a9b426
parent aacf0210
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -45,8 +45,9 @@ public class PipSizeSpecHandler {
    @VisibleForTesting
    final SizeSpecSource mSizeSpecSourceImpl;

    /** The preferred minimum (and default) size specified by apps. */
    /** The preferred minimum (and default minimum) size specified by apps. */
    @Nullable private Size mOverrideMinSize;
    private int mOverridableMinSize;

    /** Used to store values obtained from resource files. */
    private Point mScreenEdgeInsets;
@@ -386,6 +387,8 @@ public class PipSizeSpecHandler {

        mDefaultMinSize = res.getDimensionPixelSize(
                R.dimen.default_minimal_size_pip_resizable_task);
        mOverridableMinSize = res.getDimensionPixelSize(
                R.dimen.overridable_minimal_size_pip_resizable_task);

        final String screenEdgeInsetsDpString = res.getString(
                R.string.config_defaultPictureInPictureScreenEdgeInsets);
@@ -443,13 +446,19 @@ public class PipSizeSpecHandler {
    /** Returns the preferred minimal size specified by the activity in PIP. */
    @Nullable
    public Size getOverrideMinSize() {
        if (mOverrideMinSize != null
                && (mOverrideMinSize.getWidth() < mOverridableMinSize
                || mOverrideMinSize.getHeight() < mOverridableMinSize)) {
            return new Size(mOverridableMinSize, mOverridableMinSize);
        }

        return mOverrideMinSize;
    }

    /** Returns the minimum edge size of the override minimum size, or 0 if not set. */
    public int getOverrideMinEdgeSize() {
        if (mOverrideMinSize == null) return 0;
        return Math.min(mOverrideMinSize.getWidth(), mOverrideMinSize.getHeight());
        return Math.min(getOverrideMinSize().getWidth(), getOverrideMinSize().getHeight());
    }

    public int getMinEdgeSize() {
@@ -505,7 +514,7 @@ public class PipSizeSpecHandler {
        if (mOverrideMinSize == null) {
            return null;
        }
        final Size size = mOverrideMinSize;
        final Size size = getOverrideMinSize();
        final float sizeAspectRatio = size.getWidth() / (float) size.getHeight();
        if (sizeAspectRatio > aspectRatio) {
            // Size is wider, fix the width and increase the height
+3 −3
Original line number Diff line number Diff line
@@ -300,9 +300,9 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
                (MAX_ASPECT_RATIO + DEFAULT_ASPECT_RATIO) / 2
        };
        final Size[] minimalSizes = new Size[] {
                new Size((int) (100 * aspectRatios[0]), 100),
                new Size((int) (100 * aspectRatios[1]), 100),
                new Size((int) (100 * aspectRatios[2]), 100)
                new Size((int) (200 * aspectRatios[0]), 200),
                new Size((int) (200 * aspectRatios[1]), 200),
                new Size((int) (200 * aspectRatios[2]), 200)
        };
        for (int i = 0; i < aspectRatios.length; i++) {
            final float aspectRatio = aspectRatios[i];
+6 −6
Original line number Diff line number Diff line
@@ -162,10 +162,10 @@ public class PipBoundsStateTest extends ShellTestCase {
    @Test
    public void testSetOverrideMinSize_notChanged_callbackNotInvoked() {
        final Runnable callback = mock(Runnable.class);
        mPipBoundsState.setOverrideMinSize(new Size(5, 5));
        mPipBoundsState.setOverrideMinSize(new Size(100, 150));
        mPipBoundsState.setOnMinimalSizeChangeCallback(callback);

        mPipBoundsState.setOverrideMinSize(new Size(5, 5));
        mPipBoundsState.setOverrideMinSize(new Size(100, 150));

        verify(callback, never()).run();
    }
@@ -175,11 +175,11 @@ public class PipBoundsStateTest extends ShellTestCase {
        mPipBoundsState.setOverrideMinSize(null);
        assertEquals(0, mPipBoundsState.getOverrideMinEdgeSize());

        mPipBoundsState.setOverrideMinSize(new Size(5, 10));
        assertEquals(5, mPipBoundsState.getOverrideMinEdgeSize());
        mPipBoundsState.setOverrideMinSize(new Size(100, 110));
        assertEquals(100, mPipBoundsState.getOverrideMinEdgeSize());

        mPipBoundsState.setOverrideMinSize(new Size(15, 10));
        assertEquals(10, mPipBoundsState.getOverrideMinEdgeSize());
        mPipBoundsState.setOverrideMinSize(new Size(150, 200));
        assertEquals(150, mPipBoundsState.getOverrideMinEdgeSize());
    }

    @Test