Loading services/core/java/com/android/server/wm/ActivityRecord.java +4 −6 Original line number Diff line number Diff line Loading @@ -6535,14 +6535,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final Configuration resolvedConfig = getResolvedOverrideConfiguration(); final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds(); final int requestedOrientation = getRequestedConfigurationOrientation(); final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED; final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED && !mDisplayContent.ignoreRotationForApps(); final int orientation = orientationRequested ? requestedOrientation : newParentConfiguration.orientation; int rotation = newParentConfiguration.windowConfiguration.getRotation(); final boolean canChangeOrientation = handlesOrientationChangeFromDescendant(); if (canChangeOrientation && mCompatDisplayInsets.mIsRotatable && !mCompatDisplayInsets.mIsFloating) { if (canChangeOrientation && !mCompatDisplayInsets.mIsFloating) { // Use parent rotation because the original display can rotate by requested orientation. resolvedConfig.windowConfiguration.setRotation(rotation); } else { Loading Loading @@ -7628,7 +7628,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A private final int mWidth; private final int mHeight; final boolean mIsFloating; final boolean mIsRotatable; /** * The nonDecorInsets for each rotation. Includes the navigation bar and cutout insets. It Loading @@ -7645,7 +7644,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** Constructs the environment to simulate the bounds behavior of the given container. */ CompatDisplayInsets(DisplayContent display, WindowContainer container) { mIsFloating = container.getWindowConfiguration().tasksAreFloating(); mIsRotatable = !mIsFloating && !display.ignoreRotationForApps(); if (mIsFloating) { final Rect containerBounds = container.getWindowConfiguration().getBounds(); mWidth = containerBounds.width(); Loading Loading @@ -7702,7 +7700,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } if (mIsRotatable && canChangeOrientation) { if (canChangeOrientation) { getBoundsByRotation(outBounds, rotation); if (orientationRequested) { getFrameByOrientation(outAppBounds, orientation); Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +11 −2 Original line number Diff line number Diff line Loading @@ -138,7 +138,7 @@ public class SizeCompatTests extends ActivityTestsBase { // Rotation is ignored so because the display size is close to square (700/600<1.333). assertTrue(mActivity.mDisplayContent.ignoreRotationForApps()); final Rect displayBounds = mActivity.mDisplayContent.getBounds(); final Rect displayBounds = mActivity.mDisplayContent.getWindowConfiguration().getBounds(); final float aspectRatio = 1.2f; mActivity.info.minAspectRatio = mActivity.info.maxAspectRatio = aspectRatio; prepareUnresizable(-1f, SCREEN_ORIENTATION_UNSPECIFIED); Loading @@ -160,13 +160,22 @@ public class SizeCompatTests extends ActivityTestsBase { assertFitted(); // After the orientation of activity is changed, even display is not rotated, the aspect // ratio should be the same (bounds=[0, 0 - 600, 600], appBounds=[0, 100 - 600, 600]). // ratio should be the same (appBounds=[9, 100 - 592, 800], x-offset=round((600-583)/2)=9). assertEquals(appBounds.width(), appBounds.height() * aspectRatio, 0.5f /* delta */); // The notch is still on top. assertEquals(mActivity.getBounds().height(), appBounds.height() + notchHeight); mActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT); assertFitted(); // Close-to-square display can rotate without being restricted by the requested orientation. // The notch becomes on the left side. The activity is horizontal centered in 100 ~ 800. // So the bounds and appBounds will be [200, 0 - 700, 600] (500x600) that is still fitted. // Left = 100 + (800 - 100 - 500) / 2 = 200. rotateDisplay(mActivity.mDisplayContent, ROTATION_90); assertFitted(); assertEquals(appBounds.left, notchHeight + (displayBounds.width() - notchHeight - appBounds.width()) / 2); } @Test Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +4 −6 Original line number Diff line number Diff line Loading @@ -6535,14 +6535,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final Configuration resolvedConfig = getResolvedOverrideConfiguration(); final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds(); final int requestedOrientation = getRequestedConfigurationOrientation(); final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED; final boolean orientationRequested = requestedOrientation != ORIENTATION_UNDEFINED && !mDisplayContent.ignoreRotationForApps(); final int orientation = orientationRequested ? requestedOrientation : newParentConfiguration.orientation; int rotation = newParentConfiguration.windowConfiguration.getRotation(); final boolean canChangeOrientation = handlesOrientationChangeFromDescendant(); if (canChangeOrientation && mCompatDisplayInsets.mIsRotatable && !mCompatDisplayInsets.mIsFloating) { if (canChangeOrientation && !mCompatDisplayInsets.mIsFloating) { // Use parent rotation because the original display can rotate by requested orientation. resolvedConfig.windowConfiguration.setRotation(rotation); } else { Loading Loading @@ -7628,7 +7628,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A private final int mWidth; private final int mHeight; final boolean mIsFloating; final boolean mIsRotatable; /** * The nonDecorInsets for each rotation. Includes the navigation bar and cutout insets. It Loading @@ -7645,7 +7644,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** Constructs the environment to simulate the bounds behavior of the given container. */ CompatDisplayInsets(DisplayContent display, WindowContainer container) { mIsFloating = container.getWindowConfiguration().tasksAreFloating(); mIsRotatable = !mIsFloating && !display.ignoreRotationForApps(); if (mIsFloating) { final Rect containerBounds = container.getWindowConfiguration().getBounds(); mWidth = containerBounds.width(); Loading Loading @@ -7702,7 +7700,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } if (mIsRotatable && canChangeOrientation) { if (canChangeOrientation) { getBoundsByRotation(outBounds, rotation); if (orientationRequested) { getFrameByOrientation(outAppBounds, orientation); Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +11 −2 Original line number Diff line number Diff line Loading @@ -138,7 +138,7 @@ public class SizeCompatTests extends ActivityTestsBase { // Rotation is ignored so because the display size is close to square (700/600<1.333). assertTrue(mActivity.mDisplayContent.ignoreRotationForApps()); final Rect displayBounds = mActivity.mDisplayContent.getBounds(); final Rect displayBounds = mActivity.mDisplayContent.getWindowConfiguration().getBounds(); final float aspectRatio = 1.2f; mActivity.info.minAspectRatio = mActivity.info.maxAspectRatio = aspectRatio; prepareUnresizable(-1f, SCREEN_ORIENTATION_UNSPECIFIED); Loading @@ -160,13 +160,22 @@ public class SizeCompatTests extends ActivityTestsBase { assertFitted(); // After the orientation of activity is changed, even display is not rotated, the aspect // ratio should be the same (bounds=[0, 0 - 600, 600], appBounds=[0, 100 - 600, 600]). // ratio should be the same (appBounds=[9, 100 - 592, 800], x-offset=round((600-583)/2)=9). assertEquals(appBounds.width(), appBounds.height() * aspectRatio, 0.5f /* delta */); // The notch is still on top. assertEquals(mActivity.getBounds().height(), appBounds.height() + notchHeight); mActivity.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT); assertFitted(); // Close-to-square display can rotate without being restricted by the requested orientation. // The notch becomes on the left side. The activity is horizontal centered in 100 ~ 800. // So the bounds and appBounds will be [200, 0 - 700, 600] (500x600) that is still fitted. // Left = 100 + (800 - 100 - 500) / 2 = 200. rotateDisplay(mActivity.mDisplayContent, ROTATION_90); assertFitted(); assertEquals(appBounds.left, notchHeight + (displayBounds.width() - notchHeight - appBounds.width()) / 2); } @Test Loading