Fix max bounds doesn't get updated on dual TDA build
Previously ConfigurationContainer only respects provideMaxBounds
in #setBounds, which leads to set bounds from WindowTransaction
doesn't work because it invokes onRequestedOverrideConfiguration.
This CL move the logic to override max bounds to
onRequestedOverrideConfiguration. It also modifies
DC#onRequestedOverrideConfiguration a bit because
ConfigurationContainer changes requestedOverrideConfiguration
on-the-fly.
Test: atest ConfigurationContainerTests#testOnRequestedOverrideConfigurationChangedOverrideMaxBounds
Test: atest WindowMetricsTests on Dual TDA test build
fixes: 173770528
Change-Id: Ibc0a98d21291bc3f04d2d4ba981b8a5dc3ab5312
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index 60a62dc..36a1ef9 100644
--- a/services/core/java/com/android/server/wm/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -182,6 +182,11 @@
// writing to proto (which has significant cost if we write a lot of empty configurations).
mHasOverrideConfiguration = !Configuration.EMPTY.equals(overrideConfiguration);
mRequestedOverrideConfiguration.setTo(overrideConfiguration);
+ final Rect newBounds = mRequestedOverrideConfiguration.windowConfiguration.getBounds();
+ if (mHasOverrideConfiguration && providesMaxBounds()
+ && diffRequestedOverrideMaxBounds(newBounds) != BOUNDS_CHANGE_NONE) {
+ mRequestedOverrideConfiguration.windowConfiguration.setMaxBounds(newBounds);
+ }
// Update full configuration of this container and all its children.
final ConfigurationContainer parent = getParent();
onConfigurationChanged(parent != null ? parent.getConfiguration() : Configuration.EMPTY);
@@ -341,9 +346,6 @@
mRequestsTmpConfig.setTo(getRequestedOverrideConfiguration());
mRequestsTmpConfig.windowConfiguration.setBounds(bounds);
- if (overrideMaxBounds) {
- mRequestsTmpConfig.windowConfiguration.setMaxBounds(bounds);
- }
onRequestedOverrideConfigurationChanged(mRequestsTmpConfig);
return boundsChange;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 4133ea2..cf1ac39 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -5188,7 +5188,7 @@
mCurrentOverrideConfigurationChanges = currOverrideConfig.diff(overrideConfiguration);
super.onRequestedOverrideConfigurationChanged(overrideConfiguration);
mCurrentOverrideConfigurationChanges = 0;
- mWmService.setNewDisplayOverrideConfiguration(overrideConfiguration, this);
+ mWmService.setNewDisplayOverrideConfiguration(currOverrideConfig, this);
mAtmService.addWindowLayoutReasons(
ActivityTaskManagerService.LAYOUT_REASON_CONFIG_CHANGED);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java
index 5828d02..59b12e4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java
@@ -366,6 +366,30 @@
assertTrue(child.getConfiguration().windowConfiguration.getMaxBounds().isEmpty());
}
+ @Test
+ public void testOnRequestedOverrideConfigurationChangedOverrideMaxBounds() {
+ final TestConfigurationContainer root =
+ new TestConfigurationContainer(true /* providesMaxBounds */);
+ final Rect bounds = new Rect(0, 0, 10, 10);
+ final TestConfigurationContainer child = new TestConfigurationContainer();
+ root.addChild(child);
+ final Configuration configuration = new Configuration();
+ configuration.windowConfiguration.setBounds(bounds);
+
+ root.onRequestedOverrideConfigurationChanged(configuration);
+
+ assertEquals(bounds, root.getBounds());
+ assertEquals(bounds, root.getConfiguration().windowConfiguration.getBounds());
+ assertEquals(bounds, child.getBounds());
+ assertEquals(bounds, child.getConfiguration().windowConfiguration.getBounds());
+
+ assertEquals(bounds, root.getMaxBounds());
+ assertEquals(bounds, root.getConfiguration().windowConfiguration.getMaxBounds());
+ assertEquals(bounds, child.getMaxBounds());
+ assertEquals(bounds, child.getConfiguration().windowConfiguration.getMaxBounds());
+ }
+
+
/**
* Contains minimal implementation of {@link ConfigurationContainer}'s abstract behavior needed
* for testing.