Merge "Do not recompute display config if its config frame is not changed" into main
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 0fa1a21..e6f6215 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2131,7 +2131,8 @@
final DecorInsets.Info newInfo = mDecorInsets.mTmpInfo;
final InsetsState newInsetsState = newInfo.update(mDisplayContent, rotation, dw, dh);
final DecorInsets.Info currentInfo = getDecorInsetsInfo(rotation, dw, dh);
- if (newInfo.mConfigFrame.equals(currentInfo.mConfigFrame)
+ final boolean sameConfigFrame = newInfo.mConfigFrame.equals(currentInfo.mConfigFrame);
+ if (sameConfigFrame
&& newInfo.mOverrideConfigFrame.equals(currentInfo.mOverrideConfigFrame)) {
// Even if the config frame is not changed in current rotation, it may change the
// insets in other rotations if the frame of insets source is changed.
@@ -2155,7 +2156,7 @@
}
mDecorInsets.invalidate();
mDecorInsets.mInfoForRotation[rotation].set(newInfo);
- return true;
+ return !sameConfigFrame;
}
DecorInsets.Info getDecorInsetsInfo(int rotation, int w, int h) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
index f32a234..6a89178 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
@@ -413,15 +413,25 @@
@Test
public void testUpdateDisplayConfigurationByDecor() {
- if (Flags.insetsDecoupledConfiguration()) {
- // No configuration update when flag enables.
- return;
- }
doReturn(NO_CUTOUT).when(mDisplayContent).calculateDisplayCutoutForRotation(anyInt());
final WindowState navbar = createNavBarWithProvidedInsets(mDisplayContent);
final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
final DisplayInfo di = mDisplayContent.getDisplayInfo();
final int prevScreenHeightDp = mDisplayContent.getConfiguration().screenHeightDp;
+ if (Flags.insetsDecoupledConfiguration()) {
+ // No configuration update when flag enables.
+ assertFalse(displayPolicy.updateDecorInsetsInfo());
+ assertEquals(NAV_BAR_HEIGHT, displayPolicy.getDecorInsetsInfo(di.rotation,
+ di.logicalHeight, di.logicalWidth).mOverrideConfigInsets.bottom);
+
+ final int barHeight = 2 * NAV_BAR_HEIGHT;
+ navbar.mAttrs.providedInsets[0].setInsetsSize(Insets.of(0, 0, 0, barHeight));
+ assertFalse(displayPolicy.updateDecorInsetsInfo());
+ assertEquals(barHeight, displayPolicy.getDecorInsetsInfo(di.rotation,
+ di.logicalHeight, di.logicalWidth).mOverrideConfigInsets.bottom);
+ return;
+ }
+
assertTrue(navbar.providesDisplayDecorInsets() && displayPolicy.updateDecorInsetsInfo());
assertEquals(NAV_BAR_HEIGHT, displayPolicy.getDecorInsetsInfo(di.rotation,
di.logicalWidth, di.logicalHeight).mConfigInsets.bottom);
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 7bce828..8fa4667 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -4063,8 +4063,9 @@
.setInsetsSize(Insets.of(0, 0, 0, 150))
};
display.getDisplayPolicy().addWindowLw(navbar, navbar.mAttrs);
- assertTrue(display.getDisplayPolicy().updateDecorInsetsInfo());
- display.sendNewConfiguration();
+ if (display.getDisplayPolicy().updateDecorInsetsInfo()) {
+ display.sendNewConfiguration();
+ }
final ActivityRecord activity = getActivityBuilderOnSameTask()
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
@@ -4097,8 +4098,9 @@
.setInsetsSize(Insets.of(0, 0, 0, 150))
};
display.getDisplayPolicy().addWindowLw(navbar, navbar.mAttrs);
- assertTrue(display.getDisplayPolicy().updateDecorInsetsInfo());
- display.sendNewConfiguration();
+ if (display.getDisplayPolicy().updateDecorInsetsInfo()) {
+ display.sendNewConfiguration();
+ }
final ActivityRecord activity = getActivityBuilderOnSameTask()
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
@@ -4126,8 +4128,9 @@
.setInsetsSize(Insets.of(0, 0, 0, 150))
};
dc.getDisplayPolicy().addWindowLw(navbar, navbar.mAttrs);
- assertTrue(dc.getDisplayPolicy().updateDecorInsetsInfo());
- dc.sendNewConfiguration();
+ if (dc.getDisplayPolicy().updateDecorInsetsInfo()) {
+ dc.sendNewConfiguration();
+ }
final ActivityRecord activity = getActivityBuilderOnSameTask()
.setResizeMode(RESIZE_MODE_UNRESIZEABLE)