diff options
3 files changed, 38 insertions, 2 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index c2e4b82acf57..16bc7f2dae5e 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -61,6 +61,16 @@ flag { } flag { + name: "notification_over_expansion_clipping_fix" + namespace: "systemui" + description: "fix NSSL clipping when over-expanding; fixes split shade bug." + bug: "288553572" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "notification_async_group_header_inflation" namespace: "systemui" description: "Inflates the notification group summary header views from the background thread." diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index 0bb871b23d27..dedf3668ee94 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -291,7 +291,7 @@ public class AmbientState implements Dumpable { mOverExpansion = overExpansion; } - float getOverExpansion() { + public float getOverExpansion() { return mOverExpansion; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index fd675866fa82..30e78b1502b6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -23,6 +23,7 @@ import static android.view.MotionEvent.ACTION_UP; import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING; import static com.android.internal.jank.InteractionJankMonitor.CUJ_SHADE_CLEAR_ALL; import static com.android.systemui.Flags.newAodTransition; +import static com.android.systemui.Flags.notificationOverExpansionClippingFix; import static com.android.systemui.flags.Flags.UNCLEARED_TRANSIENT_HUN_FIX; import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_SILENT; import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_SWIPE; @@ -516,6 +517,7 @@ public class NotificationStackScrollLayout private int mRoundedRectClippingTop; private int mRoundedRectClippingBottom; private int mRoundedRectClippingRight; + private int mRoundedRectClippingYTranslation; private final float[] mBgCornerRadii = new float[8]; /** @@ -671,6 +673,9 @@ public class NotificationStackScrollLayout */ void setOverExpansion(float margin) { mAmbientState.setOverExpansion(margin); + if (notificationOverExpansionClippingFix() && !SceneContainerFlag.isEnabled()) { + setRoundingClippingYTranslation((int) margin); + } updateStackPosition(); requestChildrenUpdate(); } @@ -5115,6 +5120,7 @@ public class NotificationStackScrollLayout pw.append(" t=").print(mRoundedRectClippingTop); pw.append(" r=").print(mRoundedRectClippingRight); pw.append(" b=").print(mRoundedRectClippingBottom); + pw.append(" +y=").print(mRoundedRectClippingYTranslation); pw.append("} topRadius=").print(mBgCornerRadii[0]); pw.append(" bottomRadius=").println(mBgCornerRadii[4]); } @@ -5663,8 +5669,28 @@ public class NotificationStackScrollLayout mBgCornerRadii[5] = bottomRadius; mBgCornerRadii[6] = bottomRadius; mBgCornerRadii[7] = bottomRadius; + updateRoundedClipPath(); + } + + // see b/288553572 + private void setRoundingClippingYTranslation(int yTranslation) { + SceneContainerFlag.assertInLegacyMode(); + if (mRoundedRectClippingYTranslation == yTranslation) { + return; + } + mRoundedRectClippingYTranslation = yTranslation; + updateRoundedClipPath(); + } + + private void updateRoundedClipPath() { + SceneContainerFlag.assertInLegacyMode(); mRoundedClipPath.reset(); - mRoundedClipPath.addRoundRect(left, top, right, bottom, mBgCornerRadii, Path.Direction.CW); + mRoundedClipPath.addRoundRect( + mRoundedRectClippingLeft, + mRoundedRectClippingTop + mRoundedRectClippingYTranslation, + mRoundedRectClippingRight, + mRoundedRectClippingBottom + mRoundedRectClippingYTranslation, + mBgCornerRadii, Path.Direction.CW); if (mShouldUseRoundedRectClipping) { invalidate(); } |