Merge "Add device config for satellite emergency mode duration" into 24D1-dev
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index b8f01b8..1e7f8a5 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -918,12 +918,14 @@
// 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
// 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) {
Task task = mActivityRecord.getTask();
return mActivityRecord.mDisplayContent != null && task != null
&& mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture(
DeviceStateController.DeviceState.HALF_FOLDED, isTabletop)
+ && !mActivityRecord.mDisplayContent.inTransition()
&& task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index f2390c0..c3044cb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -4520,6 +4520,35 @@
}
@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
public void testGetFixedOrientationLetterboxAspectRatio_tabletop_centered() {
// Set up a display in portrait with a fixed-orientation LANDSCAPE app
setUpDisplaySizeWithApp(1400, 2800);