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

Commit 9e518142 authored by Mina Granic's avatar Mina Granic Committed by Android (Google) Code Review
Browse files

Merge "Throw exceptions in LetterboxConfiguration setters, when passed invalid...

Merge "Throw exceptions in LetterboxConfiguration setters, when passed invalid values." into 24D1-dev
parents 089280f5 121b85af
Loading
Loading
Loading
Loading
+61 −52
Original line number Diff line number Diff line
@@ -327,14 +327,14 @@ final class LetterboxConfiguration {
                R.dimen.config_letterboxBackgroundWallpaperBlurRadius);
        mLetterboxBackgroundWallpaperDarkScrimAlpha = mContext.getResources().getFloat(
                R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha);
        mLetterboxHorizontalPositionMultiplier = mContext.getResources().getFloat(
                R.dimen.config_letterboxHorizontalPositionMultiplier);
        mLetterboxVerticalPositionMultiplier = mContext.getResources().getFloat(
                R.dimen.config_letterboxVerticalPositionMultiplier);
        mLetterboxBookModePositionMultiplier = mContext.getResources().getFloat(
                R.dimen.config_letterboxBookModePositionMultiplier);
        mLetterboxTabletopModePositionMultiplier = mContext.getResources().getFloat(
                R.dimen.config_letterboxTabletopModePositionMultiplier);
        setLetterboxHorizontalPositionMultiplier(mContext.getResources().getFloat(
                R.dimen.config_letterboxHorizontalPositionMultiplier));
        setLetterboxVerticalPositionMultiplier(mContext.getResources().getFloat(
                R.dimen.config_letterboxVerticalPositionMultiplier));
        setLetterboxBookModePositionMultiplier(mContext.getResources().getFloat(
                R.dimen.config_letterboxBookModePositionMultiplier));
        setLetterboxTabletopModePositionMultiplier(mContext.getResources()
                .getFloat(R.dimen.config_letterboxTabletopModePositionMultiplier));
        mIsHorizontalReachabilityEnabled = mContext.getResources().getBoolean(
                R.bool.config_letterboxIsHorizontalReachabilityEnabled);
        mIsVerticalReachabilityEnabled = mContext.getResources().getBoolean(
@@ -657,29 +657,8 @@ final class LetterboxConfiguration {
     * right side.
     */
    float getLetterboxHorizontalPositionMultiplier(boolean isInBookMode) {
        if (isInBookMode) {
            if (mLetterboxBookModePositionMultiplier < 0.0f
                    || mLetterboxBookModePositionMultiplier > 1.0f) {
                Slog.w(TAG,
                        "mLetterboxBookModePositionMultiplier out of bounds (isInBookMode=true): "
                        + mLetterboxBookModePositionMultiplier);
                // Default to left position if invalid value is provided.
                return 0.0f;
            } else {
                return mLetterboxBookModePositionMultiplier;
            }
        } else {
            if (mLetterboxHorizontalPositionMultiplier < 0.0f
                    || mLetterboxHorizontalPositionMultiplier > 1.0f) {
                Slog.w(TAG,
                        "mLetterboxBookModePositionMultiplier out of bounds (isInBookMode=false):"
                        + mLetterboxBookModePositionMultiplier);
                // Default to central position if invalid value is provided.
                return 0.5f;
            } else {
                return mLetterboxHorizontalPositionMultiplier;
            }
        }
        return isInBookMode ? mLetterboxBookModePositionMultiplier
                : mLetterboxHorizontalPositionMultiplier;
    }

    /*
@@ -689,37 +668,28 @@ final class LetterboxConfiguration {
     * bottom side.
     */
    float getLetterboxVerticalPositionMultiplier(boolean isInTabletopMode) {
        if (isInTabletopMode) {
            return (mLetterboxTabletopModePositionMultiplier < 0.0f
                    || mLetterboxTabletopModePositionMultiplier > 1.0f)
                    // Default to top position if invalid value is provided.
                    ? 0.0f : mLetterboxTabletopModePositionMultiplier;
        } else {
            return (mLetterboxVerticalPositionMultiplier < 0.0f
                    || mLetterboxVerticalPositionMultiplier > 1.0f)
                    // Default to central position if invalid value is provided.
                    ? 0.5f : mLetterboxVerticalPositionMultiplier;
        }
        return isInTabletopMode ? mLetterboxTabletopModePositionMultiplier
                : mLetterboxVerticalPositionMultiplier;
    }

    /**
     * Overrides horizontal position of a center of the letterboxed app window. If given value < 0
     * or > 1, then it and a value of {@link
     * com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier} are ignored and
     * central position (0.5) is used.
     * Overrides horizontal position of a center of the letterboxed app window.
     *
     * @throws IllegalArgumentException If given value < 0 or > 1.
     */
    void setLetterboxHorizontalPositionMultiplier(float multiplier) {
        mLetterboxHorizontalPositionMultiplier = multiplier;
        mLetterboxHorizontalPositionMultiplier = assertValidMultiplier(multiplier,
                "mLetterboxHorizontalPositionMultiplier");
    }

    /**
     * Overrides vertical position of a center of the letterboxed app window. If given value < 0
     * or > 1, then it and a value of {@link
     * com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier} are ignored and
     * central position (0.5) is used.
     * Overrides vertical position of a center of the letterboxed app window.
     *
     * @throws IllegalArgumentException If given value < 0 or > 1.
     */
    void setLetterboxVerticalPositionMultiplier(float multiplier) {
        mLetterboxVerticalPositionMultiplier = multiplier;
        mLetterboxVerticalPositionMultiplier = assertValidMultiplier(multiplier,
                "mLetterboxVerticalPositionMultiplier");
    }

    /**
@@ -740,6 +710,28 @@ final class LetterboxConfiguration {
                com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier);
    }

    /**
     * Sets tabletop mode position multiplier.
     *
     * @throws IllegalArgumentException If given value < 0 or > 1.
     */
    @VisibleForTesting
    void setLetterboxTabletopModePositionMultiplier(float multiplier) {
        mLetterboxTabletopModePositionMultiplier = assertValidMultiplier(multiplier,
                "mLetterboxTabletopModePositionMultiplier");
    }

    /**
     * Sets tabletop mode position multiplier.
     *
     * @throws IllegalArgumentException If given value < 0 or > 1.
     */
    @VisibleForTesting
    void setLetterboxBookModePositionMultiplier(float multiplier) {
        mLetterboxBookModePositionMultiplier = assertValidMultiplier(multiplier,
                "mLetterboxBookModePositionMultiplier");
    }

    /*
     * Whether horizontal reachability repositioning is allowed for letterboxed fullscreen apps in
     * landscape device orientation.
@@ -1356,4 +1348,21 @@ final class LetterboxConfiguration {
    void resetUserAppAspectRatioFullscreenEnabled() {
        setUserAppAspectRatioFullscreenOverrideEnabled(false);
    }

    /**
     * Checks whether the multiplier is between [0,1].
     *
     * @param multiplierName sent in the exception if multiplier is invalid, for easier debugging.
     *
     * @return multiplier, if valid
     * @throws IllegalArgumentException if outside bounds.
     */
    private float assertValidMultiplier(float multiplier, String multiplierName)
            throws IllegalArgumentException {
        if (multiplier < 0.0f || multiplier > 1.0f) {
            throw new IllegalArgumentException("Trying to set " + multiplierName
                    + " out of bounds: " + multiplier);
        }
        return multiplier;
    }
}
+12 −2
Original line number Diff line number Diff line
@@ -842,7 +842,12 @@ public class WindowManagerShellCommand extends ShellCommand {
            return -1;
        }
        synchronized (mInternal.mGlobalLock) {
            try {
                mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(multiplier);
            } catch (IllegalArgumentException  e) {
                getErrPrintWriter().println("Error: invalid multiplier value " + e);
                return -1;
            }
        }
        return 0;
    }
@@ -861,7 +866,12 @@ public class WindowManagerShellCommand extends ShellCommand {
            return -1;
        }
        synchronized (mInternal.mGlobalLock) {
            try {
                mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(multiplier);
            } catch (IllegalArgumentException  e) {
                getErrPrintWriter().println("Error: invalid multiplier value " + e);
                return -1;
            }
        }
        return 0;
    }
+56 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_RE
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;

import static com.android.server.wm.testing.Assert.assertThrows;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
@@ -37,6 +39,8 @@ import android.platform.test.annotations.Presubmit;

import androidx.test.filters.SmallTest;

import com.android.server.wm.testing.Assert;

import org.junit.Before;
import org.junit.Test;

@@ -288,4 +292,56 @@ public class LetterboxConfigurationTest {
                false /* forTabletopMode */,
                LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
    }

    @Test
    public void test_setLetterboxHorizontalPositionMultiplier_validValues() {
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(-1));
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(2));

        // Does not throw an exception for values [0,1].
        mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(0);
        mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(0.5f);
        mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(1);
    }

    @Test
    public void test_setLetterboxVerticalPositionMultiplier_validValues() {
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(-1));
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(2));

        // Does not throw an exception for values [0,1].
        mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0);
        mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);
        mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(1);
    }

    @Test
    public void test_setLetterboxBookModePositionMultiplier_validValues() {
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxBookModePositionMultiplier(-1));
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxBookModePositionMultiplier(2));

        // Does not throw an exception for values [0,1].
        mLetterboxConfiguration.setLetterboxBookModePositionMultiplier(0);
        mLetterboxConfiguration.setLetterboxBookModePositionMultiplier(0.5f);
        mLetterboxConfiguration.setLetterboxBookModePositionMultiplier(1);
    }

    @Test
    public void test_setLetterboxTabletopModePositionMultiplier_validValues() {
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxTabletopModePositionMultiplier(-1));
        assertThrows(IllegalArgumentException.class,
                () -> mLetterboxConfiguration.setLetterboxTabletopModePositionMultiplier(2));

        // Does not throw an exception for values [0,1].
        mLetterboxConfiguration.setLetterboxTabletopModePositionMultiplier(0);
        mLetterboxConfiguration.setLetterboxTabletopModePositionMultiplier(0.5f);
        mLetterboxConfiguration.setLetterboxTabletopModePositionMultiplier(1);
    }
}
+0 −50
Original line number Diff line number Diff line
@@ -4100,31 +4100,6 @@ public class SizeCompatTests extends WindowTestsBase {
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
    }

    @Test
    public void testUpdateResolvedBoundsHorizontalPosition_invalidMultiplier_defaultToCenter() {
        // Display configured as (2800, 1400).

        // Below 0.0.
        assertHorizontalPositionForDifferentDisplayConfigsForPortraitActivity(
                /* letterboxHorizontalPositionMultiplier */ -1.0f,
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(350, 0, 1050, 1400),
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));

        // Above 1.0
        assertHorizontalPositionForDifferentDisplayConfigsForPortraitActivity(
                /* letterboxHorizontalPositionMultiplier */ 2.0f,
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(350, 0, 1050, 1400),
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
    }

    @Test
    public void testUpdateResolvedBoundsHorizontalPosition_right() {
        // Display configured as (2800, 1400).
@@ -4330,31 +4305,6 @@ public class SizeCompatTests extends WindowTestsBase {
                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));
    }

    @Test
    public void testUpdateResolvedBoundsVerticalPosition_invalidMultiplier_defaultToCenter() {
        // Display configured as (1400, 2800).

        // Below 0.0.
        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
                /* letterboxVerticalPositionMultiplier */ -1.0f,
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(0, 1050, 1400, 1750),
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(700, 350, 2100, 1050),
                // After the display is resized to (1400, 700).
                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));

        // Above 1.0
        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
                /* letterboxVerticalPositionMultiplier */ 2.0f,
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(0, 1050, 1400, 1750),
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(700, 350, 2100, 1050),
                // After the display is resized to (1400, 700).
                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));
    }

    @Test
    public void testUpdateResolvedBoundsVerticalPosition_bottom() {
        // Display configured as (1400, 2800).