Merge "Set system gesture exclusion rects for Bubbles"

This commit is contained in:
Mark Renouf
2019-04-04 00:23:36 +00:00
committed by Android (Google) Code Review

View File

@@ -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() {
@@ -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) {