Loading services/core/java/com/android/server/wm/ActivityRecord.java +16 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +17 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +16 −15 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +17 −2 Original line number Diff line number Diff line Loading @@ -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 Loading