summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/aconfig/systemui.aconfig10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java28
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();
}