summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2024-06-14 01:22:10 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-06-14 01:22:10 +0000
commit07b647de7c1517447fd84fca6a608d51b2f3ed7b (patch)
treee76951017edd386f9a7d008d627c6303ca631c5f
parent851062a32b1556a51d79357606d211d3f48cb7b1 (diff)
parent32cda054bd6d4db4659dfdb8679fbfde41623013 (diff)
Merge "Avoid premature redraw of display cutout" into main
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java19
2 files changed, 24 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 4c9af6607afa..e055e7c9683b 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -1250,6 +1250,11 @@ public class ScreenDecorations implements
if (mOverlays == null) {
return;
}
+ if (mPendingConfigChange) {
+ // Let RestartingPreDrawListener's onPreDraw call updateConfiguration
+ // -> updateOverlayProviderViews to redraw with display change synchronously.
+ return;
+ }
++mProviderRefreshToken;
for (final OverlayWindow overlay: mOverlays) {
if (overlay == null) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index d267ad449f45..54a14a292ba1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -39,6 +39,7 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -1182,6 +1183,24 @@ public class ScreenDecorationsTest extends SysuiTestCase {
}
@Test
+ public void testUpdateOverlayProviderViews_PendingConfigChange() {
+ final DecorProvider cutout = new CutoutDecorProviderImpl(BOUNDS_POSITION_TOP);
+ spyOn(cutout);
+ doNothing().when(cutout).onReloadResAndMeasure(any(), anyInt(), anyInt(), anyInt(), any());
+ mMockCutoutList.add(cutout);
+ mScreenDecorations.start();
+ doCallRealMethod().when(mScreenDecorations).updateOverlayProviderViews(any());
+
+ mScreenDecorations.mPendingConfigChange = true;
+ mScreenDecorations.updateOverlayProviderViews(null /* filterIds */);
+ verify(cutout, never()).onReloadResAndMeasure(any(), anyInt(), anyInt(), anyInt(), any());
+
+ mScreenDecorations.mPendingConfigChange = false;
+ mScreenDecorations.updateOverlayProviderViews(null /* filterIds */);
+ verify(cutout).onReloadResAndMeasure(any(), anyInt(), anyInt(), anyInt(), any());
+ }
+
+ @Test
public void testSupportHwcLayer_SwitchFrom_NotSupport() {
setupResources(0 /* radius */, 10 /* radiusTop */, 20 /* radiusBottom */,
null /* roundedTopDrawable */, null /* roundedBottomDrawable */,