diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 8 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java | 18 |
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; } |