Merge "Atomically apply windowing mode and display windowing mode"

This commit is contained in:
TreeHugger Robot
2020-07-07 04:42:29 +00:00
committed by Android (Google) Code Review
2 changed files with 24 additions and 2 deletions

View File

@@ -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

View File

@@ -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;
}