From 3e69219a371e71c41f8c18ae326e7f3551e4ed00 Mon Sep 17 00:00:00 2001 From: omarmt Date: Tue, 29 Nov 2022 14:28:17 +0000 Subject: [PATCH] Invalidate NotificationChildrenContainer whenever NotificationHeaderViewWrapper.applyRoundnessAndInvalidate() Test: manual test Bug: 257000427 Change-Id: I8ce4567adc89552338fa6729320849fcf0b3b41c --- .../NotificationHeaderViewWrapper.java | 25 +++++++++++++++++++ .../stack/NotificationChildrenContainer.java | 10 ++++++++ 2 files changed, 35 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java index 87a9098579a67..1f664cb161794 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java @@ -71,6 +71,8 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple private View mFeedbackIcon; private boolean mIsLowPriority; private boolean mTransformLowPriorityTitle; + private boolean mUseRoundnessSourceTypes; + private RoundnessChangedListener mRoundnessChangedListener; protected NotificationHeaderViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { super(ctx, view, row); @@ -117,6 +119,20 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple return mRoundableState; } + @Override + public void applyRoundnessAndInvalidate() { + if (mUseRoundnessSourceTypes && mRoundnessChangedListener != null) { + // We cannot apply the rounded corner to this View, so our parents (in drawChild()) will + // clip our canvas. So we should invalidate our parent. + mRoundnessChangedListener.applyRoundnessAndInvalidate(); + } + Roundable.super.applyRoundnessAndInvalidate(); + } + + public void setOnRoundnessChangedListener(RoundnessChangedListener listener) { + mRoundnessChangedListener = listener; + } + protected void resolveHeaderViews() { mIcon = mView.findViewById(com.android.internal.R.id.icon); mHeaderText = mView.findViewById(com.android.internal.R.id.header_text); @@ -344,6 +360,15 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple } } + /** + * Enable the support for rounded corner based on the SourceType + * + * @param enabled true if is supported + */ + public void useRoundnessSourceTypes(boolean enabled) { + mUseRoundnessSourceTypes = enabled; + } + /** * Interface that handle the Roundness changes */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java index 6350e49f64df4..4a8e2dbb5334a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java @@ -396,6 +396,10 @@ public class NotificationChildrenContainer extends ViewGroup getContext(), mNotificationHeader, mContainingNotification); + mNotificationHeaderWrapper.useRoundnessSourceTypes(mUseRoundnessSourceTypes); + if (mUseRoundnessSourceTypes) { + mNotificationHeaderWrapper.setOnRoundnessChangedListener(this::invalidate); + } addView(mNotificationHeader, 0); invalidate(); } else { @@ -433,6 +437,12 @@ public class NotificationChildrenContainer extends ViewGroup getContext(), mNotificationHeaderLowPriority, mContainingNotification); + mNotificationHeaderWrapperLowPriority.useRoundnessSourceTypes( + mUseRoundnessSourceTypes + ); + if (mUseRoundnessSourceTypes) { + mNotificationHeaderWrapper.setOnRoundnessChangedListener(this::invalidate); + } addView(mNotificationHeaderLowPriority, 0); invalidate(); } else {