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

Commit e2e919ab authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

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

Merge "Set pillar box bounds in fixed orientation display" into rvc-dev am: 541633e3 am: 03914e64

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11862406

Change-Id: I66e9c86aa58cccb4fa33a7bc1c7cd63d63eec258
parents ed87d2e4 03914e64
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