Loading services/core/java/com/android/server/wm/LetterboxUiController.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -871,12 +871,14 @@ final class LetterboxUiController { // Check if we are in the given pose and in fullscreen mode. // Check if we are in the given pose and in fullscreen mode. // Note that we check the task rather than the parent as with ActivityEmbedding the parent might // Note that we check the task rather than the parent as with ActivityEmbedding the parent might // be a TaskFragment, and its windowing mode is always MULTI_WINDOW, even if the task is // be a TaskFragment, and its windowing mode is always MULTI_WINDOW, even if the task is // actually fullscreen. // actually fullscreen. If display is still in transition e.g. unfolding, don't return true // for HALF_FOLDED state or app will flicker. private boolean isDisplayFullScreenAndInPosture(boolean isTabletop) { private boolean isDisplayFullScreenAndInPosture(boolean isTabletop) { Task task = mActivityRecord.getTask(); Task task = mActivityRecord.getTask(); return mActivityRecord.mDisplayContent != null && task != null return mActivityRecord.mDisplayContent != null && task != null && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture( && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture( DeviceStateController.DeviceState.HALF_FOLDED, isTabletop) DeviceStateController.DeviceState.HALF_FOLDED, isTabletop) && !mActivityRecord.mDisplayContent.inTransition() && task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN; && task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN; } } Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -4120,6 +4120,35 @@ public class SizeCompatTests extends WindowTestsBase { assertEquals(letterboxNoFold, mActivity.getBounds()); assertEquals(letterboxNoFold, mActivity.getBounds()); } } @Test public void testUpdateResolvedBoundsVerticalPosition_unfoldDisplay_notTabletop() { // Set up a display in portrait with a fixed-orientation LANDSCAPE app. setUpDisplaySizeWithApp(1000, 2000); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mWmService.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier( 1.0f /*letterboxVerticalPositionMultiplier*/); prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE); // Make the activity full-screen. mTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN); // Simulate display unfolding. setFoldablePosture(true /* isHalfFolded */, true /* isTabletop */); doReturn(true).when(mActivity.mDisplayContent).inTransition(); resizeDisplay(mTask.mDisplayContent, 1400, 2800); // Make sure app doesn't jump to top (default tabletop position) when unfolding. assertEquals(1.0f, mActivity.mLetterboxUiController.getVerticalPositionMultiplier( mActivity.getParent().getConfiguration()), 0); // Simulate display fully open after unfolding. setFoldablePosture(false /* isHalfFolded */, false /* isTabletop */); doReturn(false).when(mActivity.mDisplayContent).inTransition(); assertEquals(1.0f, mActivity.mLetterboxUiController.getVerticalPositionMultiplier( mActivity.getParent().getConfiguration()), 0); } @Test @Test public void testGetFixedOrientationLetterboxAspectRatio_tabletop_centered() { public void testGetFixedOrientationLetterboxAspectRatio_tabletop_centered() { // Set up a display in portrait with a fixed-orientation LANDSCAPE app // Set up a display in portrait with a fixed-orientation LANDSCAPE app Loading Loading
services/core/java/com/android/server/wm/LetterboxUiController.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -871,12 +871,14 @@ final class LetterboxUiController { // Check if we are in the given pose and in fullscreen mode. // Check if we are in the given pose and in fullscreen mode. // Note that we check the task rather than the parent as with ActivityEmbedding the parent might // Note that we check the task rather than the parent as with ActivityEmbedding the parent might // be a TaskFragment, and its windowing mode is always MULTI_WINDOW, even if the task is // be a TaskFragment, and its windowing mode is always MULTI_WINDOW, even if the task is // actually fullscreen. // actually fullscreen. If display is still in transition e.g. unfolding, don't return true // for HALF_FOLDED state or app will flicker. private boolean isDisplayFullScreenAndInPosture(boolean isTabletop) { private boolean isDisplayFullScreenAndInPosture(boolean isTabletop) { Task task = mActivityRecord.getTask(); Task task = mActivityRecord.getTask(); return mActivityRecord.mDisplayContent != null && task != null return mActivityRecord.mDisplayContent != null && task != null && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture( && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture( DeviceStateController.DeviceState.HALF_FOLDED, isTabletop) DeviceStateController.DeviceState.HALF_FOLDED, isTabletop) && !mActivityRecord.mDisplayContent.inTransition() && task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN; && task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN; } } Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -4120,6 +4120,35 @@ public class SizeCompatTests extends WindowTestsBase { assertEquals(letterboxNoFold, mActivity.getBounds()); assertEquals(letterboxNoFold, mActivity.getBounds()); } } @Test public void testUpdateResolvedBoundsVerticalPosition_unfoldDisplay_notTabletop() { // Set up a display in portrait with a fixed-orientation LANDSCAPE app. setUpDisplaySizeWithApp(1000, 2000); mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); mActivity.mWmService.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier( 1.0f /*letterboxVerticalPositionMultiplier*/); prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE); // Make the activity full-screen. mTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN); // Simulate display unfolding. setFoldablePosture(true /* isHalfFolded */, true /* isTabletop */); doReturn(true).when(mActivity.mDisplayContent).inTransition(); resizeDisplay(mTask.mDisplayContent, 1400, 2800); // Make sure app doesn't jump to top (default tabletop position) when unfolding. assertEquals(1.0f, mActivity.mLetterboxUiController.getVerticalPositionMultiplier( mActivity.getParent().getConfiguration()), 0); // Simulate display fully open after unfolding. setFoldablePosture(false /* isHalfFolded */, false /* isTabletop */); doReturn(false).when(mActivity.mDisplayContent).inTransition(); assertEquals(1.0f, mActivity.mLetterboxUiController.getVerticalPositionMultiplier( mActivity.getParent().getConfiguration()), 0); } @Test @Test public void testGetFixedOrientationLetterboxAspectRatio_tabletop_centered() { public void testGetFixedOrientationLetterboxAspectRatio_tabletop_centered() { // Set up a display in portrait with a fixed-orientation LANDSCAPE app // Set up a display in portrait with a fixed-orientation LANDSCAPE app Loading