summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shawn Lin <shawnlin@google.com> 2022-03-28 02:17:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-03-28 02:17:43 +0000
commit2b192c53d4c70b06d762dbe15defb69c03153f2b (patch)
tree969285cb3affec00ab83a82c9daa0841645ff3a1
parent617b65e4fbfad41aaec83660ffc4a822464b3540 (diff)
parente1d2b2b70d47b905345fec8e79e6bdb009ffe867 (diff)
Merge "Fixed cutout not being updated for non hwc layer" into tm-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java52
2 files changed, 64 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 2f5292cec909..2ec9174caee6 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -139,8 +139,9 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
protected RoundedCornerResDelegate mRoundedCornerResDelegate;
@VisibleForTesting
protected OverlayWindow[] mOverlays = null;
+ @VisibleForTesting
@Nullable
- private DisplayCutoutView[] mCutoutViews;
+ DisplayCutoutView[] mCutoutViews;
@VisibleForTesting
ViewGroup mScreenDecorHwcWindow;
@VisibleForTesting
@@ -361,6 +362,16 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
}
updateRoundedCornerDrawable();
}
+ if (mCutoutViews != null) {
+ final int size = mCutoutViews.length;
+ for (int i = 0; i < size; i++) {
+ final DisplayCutoutView cutoutView = mCutoutViews[i];
+ if (cutoutView == null) {
+ continue;
+ }
+ cutoutView.onDisplayChanged(displayId);
+ }
+ }
if (mScreenDecorHwcLayer != null) {
mScreenDecorHwcLayer.onDisplayChanged(displayId);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index ec92adb0f48c..bcccbc7fcda8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -125,6 +125,8 @@ public class ScreenDecorationsTest extends SysuiTestCase {
private CornerDecorProvider mPrivacyDotBottomLeftDecorProvider;
@Mock
private CornerDecorProvider mPrivacyDotBottomRightDecorProvider;
+ @Mock
+ private Display.Mode mDisplayMode;
@Before
public void setup() {
@@ -1135,6 +1137,56 @@ public class ScreenDecorationsTest extends SysuiTestCase {
}
+ @Test
+ public void testOnDisplayChanged_hwcLayer() {
+ setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
+ 0 /* roundedPadding */, false /* multipleRadius */,
+ true /* fillCutout */, false /* privacyDot */);
+ final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport();
+ decorationSupport.format = PixelFormat.R_8;
+ doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport();
+
+ // top cutout
+ final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null};
+ doReturn(getDisplayCutoutForRotation(Insets.of(0, 1, 0, 0), bounds))
+ .when(mScreenDecorations).getCutout();
+
+ mScreenDecorations.start();
+
+ final ScreenDecorHwcLayer hwcLayer = mScreenDecorations.mScreenDecorHwcLayer;
+ spyOn(hwcLayer);
+ doReturn(mDisplay).when(hwcLayer).getDisplay();
+ doReturn(mDisplayMode).when(mDisplay).getMode();
+
+ mScreenDecorations.mDisplayListener.onDisplayChanged(1);
+
+ verify(hwcLayer, times(1)).onDisplayChanged(1);
+ }
+
+ @Test
+ public void testOnDisplayChanged_nonHwcLayer() {
+ setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
+ 0 /* roundedPadding */, false /* multipleRadius */,
+ true /* fillCutout */, false /* privacyDot */);
+
+ // top cutout
+ final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null};
+ doReturn(getDisplayCutoutForRotation(Insets.of(0, 1, 0, 0), bounds))
+ .when(mScreenDecorations).getCutout();
+
+ mScreenDecorations.start();
+
+ final ScreenDecorations.DisplayCutoutView cutoutView =
+ mScreenDecorations.mCutoutViews[BOUNDS_POSITION_TOP];
+ spyOn(cutoutView);
+ doReturn(mDisplay).when(cutoutView).getDisplay();
+ doReturn(mDisplayMode).when(mDisplay).getMode();
+
+ mScreenDecorations.mDisplayListener.onDisplayChanged(1);
+
+ verify(cutoutView, times(1)).onDisplayChanged(1);
+ }
+
private void setupResources(int radius, int radiusTop, int radiusBottom, int roundedPadding,
boolean multipleRadius, boolean fillCutout, boolean privacyDot) {
mContext.getOrCreateTestableResources().addOverride(