diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index b1998c497022..00b1c9e5ced4 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<Rect> 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() { @@ -296,6 +303,9 @@ public class BubbleStackView extends FrameLayout { () -> mExpandedBubble.expandedView.updateInsets(insets)); return view.onApplyWindowInsets(insets); }); + + // This must be a separate OnDrawListener since it should be called for every draw. + getViewTreeObserver().addOnDrawListener(mSystemGestureExcludeUpdater); } /** @@ -362,6 +372,22 @@ 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()); + excludeZone.offset((int) (firstBubble.getTranslationX() + 0.5f), + (int) (firstBubble.getTranslationY() + 0.5f)); + mBubbleContainer.setSystemGestureExclusionRects(mSystemGestureExclusionRects); + } else { + excludeZone.setEmpty(); + mBubbleContainer.setSystemGestureExclusionRects(Collections.emptyList()); + } + } + /** * Updates the visibility of the 'dot' indicating an update on the bubble. * @param key the {@link NotificationEntry#key} associated with the bubble. |