summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java18
2 files changed, 24 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 0ee9cbbff62a..759899f648ab 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -2310,8 +2310,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
@Override
public void setWindowingMode(int windowingMode) {
- super.setWindowingMode(windowingMode);
- super.setDisplayWindowingMode(windowingMode);
+ // Intentionally call onRequestedOverrideConfigurationChanged() directly to change windowing
+ // mode and display windowing mode atomically.
+ mTmpConfiguration.setTo(getRequestedOverrideConfiguration());
+ mTmpConfiguration.windowConfiguration.setWindowingMode(windowingMode);
+ mTmpConfiguration.windowConfiguration.setDisplayWindowingMode(windowingMode);
+ onRequestedOverrideConfigurationChanged(mTmpConfiguration);
}
@Override
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index f00f65ec28a3..9157a3e540f8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -1511,6 +1511,24 @@ public class DisplayContentTests extends WindowTestsBase {
mDisplayContent.ensureActivitiesVisible(null, 0, false, false);
}
+ @Test
+ public void testSetWindowingModeAtomicallyUpdatesWindoingModeAndDisplayWindowingMode() {
+ final DisplayContent dc = createNewDisplay();
+ final ActivityStack stack =
+ new ActivityTestsBase.StackBuilder(mWm.mAtmService.mRootWindowContainer)
+ .setDisplay(dc)
+ .build();
+ doAnswer(invocation -> {
+ Object[] args = invocation.getArguments();
+ final Configuration config = ((Configuration) args[0]);
+ assertEquals(config.windowConfiguration.getWindowingMode(),
+ config.windowConfiguration.getDisplayWindowingMode());
+ return null;
+ }).when(stack).onConfigurationChanged(any());
+ dc.setWindowingMode(WINDOWING_MODE_FREEFORM);
+ dc.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
+ }
+
private boolean isOptionsPanelAtRight(int displayId) {
return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT;
}