diff --git a/core/java/android/view/RoundedCorner.java b/core/java/android/view/RoundedCorner.java index cc7525b48aa2a..56b438350d068 100644 --- a/core/java/android/view/RoundedCorner.java +++ b/core/java/android/view/RoundedCorner.java @@ -163,7 +163,7 @@ public final class RoundedCorner implements Parcelable { * @hide */ public boolean isEmpty() { - return mRadius == 0 || mCenter.x == 0 || mCenter.y == 0; + return mRadius == 0 || mCenter.x <= 0 || mCenter.y <= 0; } private String getPositionString(@Position int position) { diff --git a/core/java/android/view/RoundedCorners.java b/core/java/android/view/RoundedCorners.java index 569c287901c7a..623d9692ac806 100644 --- a/core/java/android/view/RoundedCorners.java +++ b/core/java/android/view/RoundedCorners.java @@ -181,16 +181,16 @@ public class RoundedCorners implements Parcelable { boolean hasRoundedCorner; switch (position) { case POSITION_TOP_LEFT: - hasRoundedCorner = radius > insetTop || radius > insetLeft; + hasRoundedCorner = radius > insetTop && radius > insetLeft; break; case POSITION_TOP_RIGHT: - hasRoundedCorner = radius > insetTop || radius > insetRight; + hasRoundedCorner = radius > insetTop && radius > insetRight; break; case POSITION_BOTTOM_RIGHT: - hasRoundedCorner = radius > insetBottom || radius > insetRight; + hasRoundedCorner = radius > insetBottom && radius > insetRight; break; case POSITION_BOTTOM_LEFT: - hasRoundedCorner = radius > insetBottom || radius > insetLeft; + hasRoundedCorner = radius > insetBottom && radius > insetLeft; break; default: throw new IllegalArgumentException( diff --git a/core/tests/coretests/src/android/view/RoundedCornerTest.java b/core/tests/coretests/src/android/view/RoundedCornerTest.java index 8eb13bc03b4be..43490213c29a6 100644 --- a/core/tests/coretests/src/android/view/RoundedCornerTest.java +++ b/core/tests/coretests/src/android/view/RoundedCornerTest.java @@ -61,6 +61,13 @@ public class RoundedCornerTest { assertThat(roundedCorner.isEmpty(), is(true)); } + @Test + public void testIsEmpty_negativeCenter() { + RoundedCorner roundedCorner = + new RoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT, 1, -2, -3); + assertThat(roundedCorner.isEmpty(), is(true)); + } + @Test public void testEquals() { RoundedCorner roundedCorner = new RoundedCorner( diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 426e63181ff10..9f6087834a4e9 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1862,6 +1862,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // Update application display metrics. final WmDisplayCutout wmDisplayCutout = calculateDisplayCutoutForRotation(rotation); final DisplayCutout displayCutout = wmDisplayCutout.getDisplayCutout(); + final RoundedCorners roundedCorners = calculateRoundedCornersForRotation(rotation); final int appWidth = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayCutout); @@ -1878,6 +1879,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); } mDisplayInfo.displayCutout = displayCutout.isEmpty() ? null : displayCutout; + mDisplayInfo.roundedCorners = roundedCorners; mDisplayInfo.getAppMetrics(mDisplayMetrics); if (mDisplayScalingDisabled) { mDisplayInfo.flags |= Display.FLAG_SCALING_DISABLED;