Letterbox resizable fixed orientation activities in multi-window.
Bug: 214602463 Test: atest WmTests:SizeCompatTests Change-Id: I2d9a89959f7203963830fc12063bda76e0c73c1e
This commit is contained in:
@@ -7983,20 +7983,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
// orientation with insets applied.
|
||||
return;
|
||||
}
|
||||
// Not using Task#isResizeable() or ActivityRecord#isResizeable() directly because app
|
||||
// compatibility testing showed that android:supportsPictureInPicture="true" alone is not
|
||||
// sufficient signal for not letterboxing an app.
|
||||
// TODO(214602463): Remove multi-window check since orientation and aspect ratio
|
||||
// restrictions should always be applied in multi-window.
|
||||
final boolean isResizeable = task != null
|
||||
// Activity should be resizable if the task is.
|
||||
? task.isResizeable(/* checkPictureInPictureSupport */ false)
|
||||
|| isResizeable(/* checkPictureInPictureSupport */ false)
|
||||
: isResizeable(/* checkPictureInPictureSupport */ false);
|
||||
if (WindowConfiguration.inMultiWindowMode(windowingMode) && isResizeable) {
|
||||
// Ignore orientation request for resizable apps in multi window.
|
||||
return;
|
||||
}
|
||||
|
||||
if (windowingMode == WINDOWING_MODE_PINNED) {
|
||||
// PiP bounds have higher priority than the requested orientation. Otherwise the
|
||||
// activity may be squeezed into a small piece.
|
||||
|
||||
@@ -611,10 +611,9 @@ public class ActivityRecordTests extends WindowTestsBase {
|
||||
activity.setRequestedOrientation(activityCurOrientation == ORIENTATION_LANDSCAPE
|
||||
? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE);
|
||||
|
||||
// Asserts fixed orientation request is ignored, and the orientation is not changed
|
||||
// (fill Task).
|
||||
assertEquals(activityCurOrientation, activity.getConfiguration().orientation);
|
||||
assertFalse(activity.isLetterboxedForFixedOrientationAndAspectRatio());
|
||||
// Asserts fixed orientation request is not ignored, and the orientation is changed.
|
||||
assertNotEquals(activityCurOrientation, activity.getConfiguration().orientation);
|
||||
assertTrue(activity.isLetterboxedForFixedOrientationAndAspectRatio());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1875,6 +1875,28 @@ public class SizeCompatTests extends WindowTestsBase {
|
||||
assertLetterboxSurfacesDrawnBetweenActivityAndParentBounds(organizer.mPrimary.getBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResizableFixedOrientationAppInSplitScreen_letterboxForDifferentOrientation() {
|
||||
setUpDisplaySizeWithApp(1000, 2800);
|
||||
final TestSplitOrganizer organizer =
|
||||
new TestSplitOrganizer(mAtm, mActivity.getDisplayContent());
|
||||
|
||||
// Resizable landscape-only activity.
|
||||
prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_LANDSCAPE, /* isUnresizable= */ false);
|
||||
|
||||
final Rect originalBounds = new Rect(mActivity.getBounds());
|
||||
|
||||
// Move activity to split screen which takes half of the screen.
|
||||
mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
|
||||
organizer.mPrimary.setBounds(0, 0, 1000, 1400);
|
||||
assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
|
||||
assertEquals(WINDOWING_MODE_MULTI_WINDOW, mActivity.getWindowingMode());
|
||||
|
||||
// Resizable activity is not in size compat mode but in the letterbox for fixed orientation.
|
||||
assertFitted();
|
||||
assertTrue(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSupportsNonResizableInSplitScreen_fillTaskForSameOrientation() {
|
||||
// Support non resizable in multi window
|
||||
|
||||
Reference in New Issue
Block a user