diff options
| author | 2024-06-14 01:22:10 +0000 | |
|---|---|---|
| committer | 2024-06-14 01:22:10 +0000 | |
| commit | 07b647de7c1517447fd84fca6a608d51b2f3ed7b (patch) | |
| tree | e76951017edd386f9a7d008d627c6303ca631c5f | |
| parent | 851062a32b1556a51d79357606d211d3f48cb7b1 (diff) | |
| parent | 32cda054bd6d4db4659dfdb8679fbfde41623013 (diff) | |
Merge "Avoid premature redraw of display cutout" into main
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/ScreenDecorations.java | 5 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java | 19 |
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 */, |