diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index de4605b552722..d850dbc6addac 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -64,6 +64,8 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Collections; +import java.util.List; /** * Renders bubbles in a stack and handles animating expanded and collapsed states. @@ -164,6 +166,8 @@ public class BubbleStackView extends FrameLayout { int[] mTempLoc = new int[2]; RectF mTempRect = new RectF(); + private final List mSystemGestureExclusionRects = Collections.singletonList(new Rect()); + private ViewTreeObserver.OnPreDrawListener mViewUpdater = new ViewTreeObserver.OnPreDrawListener() { @Override @@ -175,6 +179,9 @@ public class BubbleStackView extends FrameLayout { } }; + private ViewTreeObserver.OnDrawListener mSystemGestureExcludeUpdater = + this::updateSystemGestureExcludeRects; + private ViewClippingUtil.ClippingParameters mClippingParameters = new ViewClippingUtil.ClippingParameters() { @@ -361,6 +368,19 @@ public class BubbleStackView extends FrameLayout { return false; } + private void updateSystemGestureExcludeRects() { + // Exclude the region occupied by the first BubbleView in the stack + Rect excludeZone = mSystemGestureExclusionRects.get(0); + if (mBubbleContainer.getChildCount() > 0) { + View firstBubble = mBubbleContainer.getChildAt(0); + excludeZone.set(firstBubble.getLeft(), firstBubble.getTop(), firstBubble.getRight(), + firstBubble.getBottom()); + } else { + excludeZone.setEmpty(); + } + mBubbleContainer.setSystemGestureExclusionRects(mSystemGestureExclusionRects); + } + /** * Updates the visibility of the 'dot' indicating an update on the bubble. * @param key the {@link NotificationEntry#key} associated with the bubble. @@ -669,12 +689,17 @@ public class BubbleStackView extends FrameLayout { updateExpandedBubble(); applyCurrentState(); + // This must be a separate OnDrawListener since it should be called for every draw. + getViewTreeObserver().addOnDrawListener(mSystemGestureExcludeUpdater); + mIsExpansionAnimating = true; Runnable updateAfter = () -> { applyCurrentState(); mIsExpansionAnimating = false; requestUpdate(); + getViewTreeObserver().removeOnDrawListener(mSystemGestureExcludeUpdater); + updateSystemGestureExcludeRects(); }; if (shouldExpand) {