Loading services/core/java/com/android/server/wm/ActivityRecord.java +5 −2 Original line number Diff line number Diff line Loading @@ -439,6 +439,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // finished destroying itself. private static final int DESTROY_TIMEOUT = 10 * 1000; // Rounding tolerance to be used in aspect ratio computations private static final float ASPECT_RATIO_ROUNDING_TOLERANCE = 0.005f; final ActivityTaskManagerService mAtmService; @NonNull final ActivityInfo info; // activity info provided by developer in AndroidManifest Loading Loading @@ -8950,7 +8953,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A int activityWidth = containingAppWidth; int activityHeight = containingAppHeight; if (containingRatio > desiredAspectRatio) { if (containingRatio - desiredAspectRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) { if (containingAppWidth < containingAppHeight) { // Width is the shorter side, so we use that to figure-out what the max. height // should be given the aspect ratio. Loading @@ -8960,7 +8963,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // should be given the aspect ratio. activityWidth = (int) ((activityHeight * desiredAspectRatio) + 0.5f); } } else if (containingRatio < desiredAspectRatio) { } else if (desiredAspectRatio - containingRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) { boolean adjustWidth; switch (getRequestedConfigurationOrientation()) { case ORIENTATION_LANDSCAPE: Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -3054,6 +3054,20 @@ public class SizeCompatTests extends WindowTestsBase { assertEquals(mActivity.getBounds(), display.getBounds()); } @Test public void testApplyAspectRatio_containingRatioAlmostEqualToMaxRatio_boundsUnchanged() { setUpDisplaySizeWithApp(1981, 2576); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f); final Rect originalBounds = new Rect(mActivity.getBounds()); prepareUnresizable(mActivity, 1.3f, SCREEN_ORIENTATION_UNSPECIFIED); // The containing aspect ratio is now 1.3003534, while the desired aspect ratio is 1.3. The // bounds of the activity should not be changed as the difference is too small assertEquals(mActivity.getBounds(), originalBounds); } @Test public void testUpdateResolvedBoundsHorizontalPosition_activityFillParentWidth() { // When activity width equals parent width, multiplier shouldn't have any effect. Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +5 −2 Original line number Diff line number Diff line Loading @@ -439,6 +439,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // finished destroying itself. private static final int DESTROY_TIMEOUT = 10 * 1000; // Rounding tolerance to be used in aspect ratio computations private static final float ASPECT_RATIO_ROUNDING_TOLERANCE = 0.005f; final ActivityTaskManagerService mAtmService; @NonNull final ActivityInfo info; // activity info provided by developer in AndroidManifest Loading Loading @@ -8950,7 +8953,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A int activityWidth = containingAppWidth; int activityHeight = containingAppHeight; if (containingRatio > desiredAspectRatio) { if (containingRatio - desiredAspectRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) { if (containingAppWidth < containingAppHeight) { // Width is the shorter side, so we use that to figure-out what the max. height // should be given the aspect ratio. Loading @@ -8960,7 +8963,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // should be given the aspect ratio. activityWidth = (int) ((activityHeight * desiredAspectRatio) + 0.5f); } } else if (containingRatio < desiredAspectRatio) { } else if (desiredAspectRatio - containingRatio > ASPECT_RATIO_ROUNDING_TOLERANCE) { boolean adjustWidth; switch (getRequestedConfigurationOrientation()) { case ORIENTATION_LANDSCAPE: Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +14 −0 Original line number Diff line number Diff line Loading @@ -3054,6 +3054,20 @@ public class SizeCompatTests extends WindowTestsBase { assertEquals(mActivity.getBounds(), display.getBounds()); } @Test public void testApplyAspectRatio_containingRatioAlmostEqualToMaxRatio_boundsUnchanged() { setUpDisplaySizeWithApp(1981, 2576); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mWm.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f); final Rect originalBounds = new Rect(mActivity.getBounds()); prepareUnresizable(mActivity, 1.3f, SCREEN_ORIENTATION_UNSPECIFIED); // The containing aspect ratio is now 1.3003534, while the desired aspect ratio is 1.3. The // bounds of the activity should not be changed as the difference is too small assertEquals(mActivity.getBounds(), originalBounds); } @Test public void testUpdateResolvedBoundsHorizontalPosition_activityFillParentWidth() { // When activity width equals parent width, multiplier shouldn't have any effect. Loading