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

Commit b3fc3bd6 authored by Oleg Blinnikov's avatar Oleg Blinnikov Committed by Automerger Merge Worker
Browse files

Merge "Do not scale Letterbox Inner bounds" into tm-qpr-dev am: 35a96232

parents 54e5406d 35a96232
Loading
Loading
Loading
Loading
+9 −10
Original line number Original line Diff line number Diff line
@@ -648,10 +648,9 @@ final class LetterboxUiController {
        if (mLetterbox != null) {
        if (mLetterbox != null) {
            outBounds.set(mLetterbox.getInnerFrame());
            outBounds.set(mLetterbox.getInnerFrame());
            final WindowState w = mActivityRecord.findMainWindow();
            final WindowState w = mActivityRecord.findMainWindow();
            if (w == null) {
            if (w != null) {
                return;
                adjustBoundsForTaskbar(w, outBounds);
            }
            }
            adjustBoundsIfNeeded(w, outBounds);
        } else {
        } else {
            outBounds.setEmpty();
            outBounds.setEmpty();
        }
        }
@@ -1086,7 +1085,12 @@ final class LetterboxUiController {
        // It is important to call {@link #adjustBoundsIfNeeded} before {@link cropBounds.offsetTo}
        // It is important to call {@link #adjustBoundsIfNeeded} before {@link cropBounds.offsetTo}
        // because taskbar bounds used in {@link #adjustBoundsIfNeeded}
        // because taskbar bounds used in {@link #adjustBoundsIfNeeded}
        // are in screen coordinates
        // are in screen coordinates
        adjustBoundsIfNeeded(mainWindow, cropBounds);
        adjustBoundsForTaskbar(mainWindow, cropBounds);

        final float scale = mainWindow.mInvGlobalScale;
        if (scale != 1f && scale > 0f) {
            cropBounds.scale(scale);
        }


        // ActivityRecord bounds are in screen coordinates while (0,0) for activity's surface
        // ActivityRecord bounds are in screen coordinates while (0,0) for activity's surface
        // control is in the top left corner of an app window so offsetting bounds
        // control is in the top left corner of an app window so offsetting bounds
@@ -1139,7 +1143,7 @@ final class LetterboxUiController {
        return null;
        return null;
    }
    }


    private void adjustBoundsIfNeeded(final WindowState mainWindow, final Rect bounds) {
    private void adjustBoundsForTaskbar(final WindowState mainWindow, final Rect bounds) {
        // Rounded corners should be displayed above the taskbar. When taskbar is hidden,
        // Rounded corners should be displayed above the taskbar. When taskbar is hidden,
        // an insets frame is equal to a navigation bar which shouldn't affect position of
        // an insets frame is equal to a navigation bar which shouldn't affect position of
        // rounded corners since apps are expected to handle navigation bar inset.
        // rounded corners since apps are expected to handle navigation bar inset.
@@ -1153,11 +1157,6 @@ final class LetterboxUiController {
            // Rounded corners should be displayed above the expanded taskbar.
            // Rounded corners should be displayed above the expanded taskbar.
            bounds.bottom = Math.min(bounds.bottom, expandedTaskbarOrNull.getFrame().top);
            bounds.bottom = Math.min(bounds.bottom, expandedTaskbarOrNull.getFrame().top);
        }
        }

        final float scale = mainWindow.mInvGlobalScale;
        if (scale != 1f && scale > 0f) {
            bounds.scale(scale);
        }
    }
    }


    private int getInsetsStateCornerRadius(
    private int getInsetsStateCornerRadius(
+59 −0
Original line number Original line Diff line number Diff line
@@ -1433,6 +1433,65 @@ public class SizeCompatTests extends WindowTestsBase {
                activity.getBounds().width(), 0.5);
                activity.getBounds().width(), 0.5);
    }
    }


    @Test
    public void testGetLetterboxInnerBounds_noScalingApplied() {
        // Set up a display in portrait and ignoring orientation request.
        final int dw = 1400;
        final int dh = 2800;
        setUpDisplaySizeWithApp(dw, dh);
        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);

        // Rotate display to landscape.
        rotateDisplay(mActivity.mDisplayContent, ROTATION_90);

        // Portrait fixed app without max aspect.
        prepareUnresizable(mActivity, 0, SCREEN_ORIENTATION_LANDSCAPE);

        // Need a window to call adjustBoundsForTaskbar with.
        addWindowToActivity(mActivity);

        // App should launch in fullscreen.
        assertFalse(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
        assertFalse(mActivity.inSizeCompatMode());

        // Activity inherits max bounds from TaskDisplayArea.
        assertMaxBoundsInheritDisplayAreaBounds();

        // Rotate display to portrait.
        rotateDisplay(mActivity.mDisplayContent, ROTATION_0);

        final Rect rotatedDisplayBounds = new Rect(mActivity.mDisplayContent.getBounds());
        final Rect rotatedActivityBounds = new Rect(mActivity.getBounds());
        assertTrue(rotatedDisplayBounds.width() < rotatedDisplayBounds.height());

        // App should be in size compat.
        assertFalse(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
        assertScaled();
        assertThat(mActivity.inSizeCompatMode()).isTrue();
        assertActivityMaxBoundsSandboxed();


	final int scale = dh / dw;

        // App bounds should be dh / scale x dw / scale
        assertEquals(dw, rotatedDisplayBounds.width());
        assertEquals(dh, rotatedDisplayBounds.height());

        assertEquals(dh / scale, rotatedActivityBounds.width());
        assertEquals(dw / scale, rotatedActivityBounds.height());

        // Compute the frames of the window and invoke {@link ActivityRecord#layoutLetterbox}.
        mActivity.mRootWindowContainer.performSurfacePlacement();

        LetterboxDetails letterboxDetails = mActivity.mLetterboxUiController.getLetterboxDetails();

        assertEquals(dh / scale, letterboxDetails.getLetterboxInnerBounds().width());
        assertEquals(dw / scale, letterboxDetails.getLetterboxInnerBounds().height());

        assertEquals(dw, letterboxDetails.getLetterboxFullBounds().width());
        assertEquals(dh, letterboxDetails.getLetterboxFullBounds().height());
    }

    @Test
    @Test
    public void testLaunchWithFixedRotationTransform() {
    public void testLaunchWithFixedRotationTransform() {
        final int dw = 1000;
        final int dw = 1000;