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

Commit efd98e3e authored by Ikram Gabiyev's avatar Ikram Gabiyev
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
parent b1f12e0f
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