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

Commit ace36c79 authored by Vali Calinescu's avatar Vali Calinescu
Browse files

Replace containing aspect ratio hard comparison with rounded one

Bug: 244489223
Test: atest WmTests:SizeCompatTests#testApplyAspectRatio_containingRatioAlmostEqualToMaxRatio_boundsUnchanged
Change-Id: Id604e80d6c9be2231750157c7a06eb606ddefb1c
parent 04f7a3b2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -439,6 +439,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    // finished destroying itself.
    private static final int DESTROY_TIMEOUT = 10 * 1000;

    // Rounding tolerance to be used in aspect ratio computations
    private static final float ASPECT_RATIO_ROUNDING_TOLERANCE = 0.005f;

    final ActivityTaskManagerService mAtmService;
    @NonNull
    final ActivityInfo info; // activity info provided by developer in AndroidManifest
@@ -8915,7 +8918,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        int activityWidth = containingAppWidth;
        int activityHeight = containingAppHeight;

        if (containingRatio > desiredAspectRatio) {
        if (containingRatio - desiredAspectRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) {
            if (containingAppWidth < containingAppHeight) {
                // Width is the shorter side, so we use that to figure-out what the max. height
                // should be given the aspect ratio.
@@ -8925,7 +8928,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                // should be given the aspect ratio.
                activityWidth = (int) ((activityHeight * desiredAspectRatio) + 0.5f);
            }
        } else if (containingRatio < desiredAspectRatio) {
        } else if (desiredAspectRatio - containingRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) {
            boolean adjustWidth;
            switch (getRequestedConfigurationOrientation()) {
                case ORIENTATION_LANDSCAPE:
+14 −0
Original line number Diff line number Diff line
@@ -2801,6 +2801,20 @@ public class SizeCompatTests extends WindowTestsBase {
        assertEquals(mActivity.getBounds(), display.getBounds());
    }

    @Test
    public void testApplyAspectRatio_containingRatioAlmostEqualToMaxRatio_boundsUnchanged() {
        setUpDisplaySizeWithApp(1981, 2576);
        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
        mWm.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);

        final Rect originalBounds = new Rect(mActivity.getBounds());
        prepareUnresizable(mActivity, 1.3f, SCREEN_ORIENTATION_UNSPECIFIED);

        // The containing aspect ratio is now 1.3003534, while the desired aspect ratio is 1.3. The
        // bounds of the activity should not be changed as the difference is too small
        assertEquals(mActivity.getBounds(), originalBounds);
    }

    @Test
    public void testUpdateResolvedBoundsHorizontalPosition_activityFillParentWidth() {
        // When activity width equals parent width, multiplier shouldn't have any effect.