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

Commit 541633e3 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Set pillar box bounds in fixed orientation display" into rvc-dev

parents 3616fd63 080ae841
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
@@ -7724,24 +7724,25 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                    outAppBounds.set(outBounds);
                }
            } else {
                outBounds.set(0, 0, mWidth, mHeight);
                getFrameByOrientation(outAppBounds, orientation);
                if (orientationRequested && !canChangeOrientation
                        && (outAppBounds.width() > outAppBounds.height()) != (mWidth > mHeight)) {
                    // The orientation is mismatched but the display cannot rotate. The bounds will
                    // fit to the short side of display.
                if (orientationRequested) {
                    getFrameByOrientation(outBounds, orientation);
                    if ((outBounds.width() > outBounds.height()) != (mWidth > mHeight)) {
                        // The orientation is mismatched but the display cannot rotate. The bounds
                        // will fit to the short side of display.
                        if (orientation == ORIENTATION_LANDSCAPE) {
                        outAppBounds.bottom = (int) ((float) mWidth * mWidth / mHeight);
                        outAppBounds.right = mWidth;
                            outBounds.bottom = (int) ((float) mWidth * mWidth / mHeight);
                            outBounds.right = mWidth;
                        } else {
                        outAppBounds.bottom = mHeight;
                        outAppBounds.right = (int) ((float) mHeight * mHeight / mWidth);
                            outBounds.bottom = mHeight;
                            outBounds.right = (int) ((float) mHeight * mHeight / mWidth);
                        }
                        outBounds.offset(
                                getHorizontalCenterOffset(mWidth, outBounds.width()), 0 /* dy */);
                    }
                    outAppBounds.offset(getHorizontalCenterOffset(outBounds.width(),
                            outAppBounds.width()), 0 /* dy */);
                } else {
                    outAppBounds.set(outBounds);
                    outBounds.set(0, 0, mWidth, mHeight);
                }
                outAppBounds.set(outBounds);
            }

            if (rotation != ROTATION_UNDEFINED) {
+17 −2
Original line number Diff line number Diff line
@@ -289,14 +289,29 @@ public class SizeCompatTests extends ActivityTestsBase {

        // Move the non-resizable activity to the new display.
        mStack.reparent(newDisplay.getDefaultTaskDisplayArea(), true /* onTop */);
        // The configuration bounds should keep the same.
        // The configuration bounds [820, 0 - 1820, 2500] should keep the same.
        assertEquals(origWidth, configBounds.width());
        assertEquals(origHeight, configBounds.height());
        assertScaled();

        final Rect newDisplayBounds = newDisplay.getWindowConfiguration().getBounds();
        // The scaled bounds should exclude notch area (1000 - 100 == 360 * 2500 / 1000 = 900).
        assertEquals(newDisplay.getBounds().height() - notchHeight,
        assertEquals(newDisplayBounds.height() - notchHeight,
                (int) ((float) mActivity.getBounds().width() * origHeight / origWidth));

        // Recompute the natural configuration in the new display.
        mActivity.clearSizeCompatMode();
        mActivity.ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
        // Because the display cannot rotate, the portrait activity will fit the short side of
        // display with keeping portrait bounds [200, 0 - 700, 1000] in center.
        assertEquals(newDisplayBounds.height(), configBounds.height());
        assertEquals(configBounds.height() * newDisplayBounds.height() / newDisplayBounds.width(),
                configBounds.width());
        assertFitted();
        // The appBounds should be [200, 100 - 700, 1000].
        final Rect appBounds = mActivity.getWindowConfiguration().getAppBounds();
        assertEquals(configBounds.width(), appBounds.width());
        assertEquals(configBounds.height() - notchHeight, appBounds.height());
    }

    @Test