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

Commit 8407a8cc 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: 541633e3

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

Change-Id: Ibd9b1a764508f84378f53a775045e3ef9939fe94
parents 302db9a7 541633e3
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