Rounded corner not align to right on land
1. On landscape mode, the right rounded corner shall be aligned to the
right side, not left side
2. Add correct null check in onDisplayChanged() inside ScreenDecorations
3. ScreenDecorHwcLayer::updateRoundedCornerExistenceAndSize() shall
compare top size
Bug: 230592960
Test: atest ScreenDecorHwcLayerTest ScreenDecorationsTest
Test: Rotate app to landscape mode and check rounded corner drawn on
correct pos
Change-Id: Ifb62e0a74f8e3c93c2ea897fa67c4a9393096f7e
This commit is contained in:
@@ -380,7 +380,7 @@ class ScreenDecorHwcLayer(context: Context, displayDecorationSupport: DisplayDec
|
||||
) {
|
||||
if (hasTopRoundedCorner == hasTop &&
|
||||
hasBottomRoundedCorner == hasBottom &&
|
||||
roundedCornerBottomSize == bottomSize &&
|
||||
roundedCornerTopSize == topSize &&
|
||||
roundedCornerBottomSize == bottomSize) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -346,7 +346,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId) {
|
||||
final int newRotation = mContext.getDisplay().getRotation();
|
||||
if (mOverlays != null && mRotation != newRotation) {
|
||||
if ((mOverlays != null || mScreenDecorHwcWindow != null)
|
||||
&& mRotation != newRotation) {
|
||||
// We cannot immediately update the orientation. Otherwise
|
||||
// WindowManager is still deferring layout until it has finished dispatching
|
||||
// the config changes, which may cause divergence between what we draw
|
||||
@@ -360,11 +361,13 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
|
||||
+ mRotation);
|
||||
}
|
||||
|
||||
for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
|
||||
if (mOverlays[i] != null) {
|
||||
final ViewGroup overlayView = mOverlays[i].getRootView();
|
||||
overlayView.getViewTreeObserver().addOnPreDrawListener(
|
||||
new RestartingPreDrawListener(overlayView, i, newRotation));
|
||||
if (mOverlays != null) {
|
||||
for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
|
||||
if (mOverlays[i] != null) {
|
||||
final ViewGroup overlayView = mOverlays[i].getRootView();
|
||||
overlayView.getViewTreeObserver().addOnPreDrawListener(
|
||||
new RestartingPreDrawListener(overlayView, i, newRotation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ private fun Int.toLayoutGravity(@Surface.Rotation rotation: Int): Int = when (ro
|
||||
DisplayCutout.BOUNDS_POSITION_LEFT -> Gravity.BOTTOM
|
||||
DisplayCutout.BOUNDS_POSITION_TOP -> Gravity.LEFT
|
||||
DisplayCutout.BOUNDS_POSITION_RIGHT -> Gravity.TOP
|
||||
else /* DisplayCutout.BOUNDS_POSITION_BOTTOM */ -> Gravity.LEFT
|
||||
else /* DisplayCutout.BOUNDS_POSITION_BOTTOM */ -> Gravity.RIGHT
|
||||
}
|
||||
Surface.ROTATION_270 -> when (this) {
|
||||
DisplayCutout.BOUNDS_POSITION_LEFT -> Gravity.TOP
|
||||
|
||||
Reference in New Issue
Block a user