Merge "Bubble bar dismiss" into udc-qpr-dev

This commit is contained in:
Ivan Tkachenko
2023-07-31 17:54:17 +00:00
committed by Android (Google) Code Review
4 changed files with 58 additions and 4 deletions

View File

@@ -1049,6 +1049,20 @@ public class BubbleController implements ConfigurationChangeListener,
mBubbleData.setExpanded(false /* expanded */);
}
/**
* Update expanded state when a single bubble is dragged in Launcher.
* Will be called only when bubble bar is expanded.
* @param bubbleKey key of the bubble to collapse/expand
* @param isBeingDragged whether the bubble is being dragged
*/
public void onBubbleDrag(String bubbleKey, boolean isBeingDragged) {
if (mBubbleData.getSelectedBubble() != null
&& mBubbleData.getSelectedBubble().getKey().equals(bubbleKey)) {
// Should collapse/expand only if equals to selected bubble.
mBubbleBarViewCallback.expansionChanged(/* isExpanded = */ !isBeingDragged);
}
}
@VisibleForTesting
public boolean isBubbleNotificationSuppressedFromShade(String key, String groupKey) {
boolean isSuppressedBubble = (mBubbleData.hasAnyBubbleWithKey(key)
@@ -1434,6 +1448,17 @@ public class BubbleController implements ConfigurationChangeListener,
}
}
/**
* Removes all the bubbles.
* <p>
* Must be called from the main thread.
*/
@VisibleForTesting
@MainThread
public void removeAllBubbles(@Bubbles.DismissReason int reason) {
mBubbleData.dismissAll(reason);
}
private void onEntryAdded(BubbleEntry entry) {
if (canLaunchInTaskView(mContext, entry)) {
updateBubble(entry);
@@ -2095,14 +2120,25 @@ public class BubbleController implements ConfigurationChangeListener,
}
@Override
public void removeBubble(String key, int reason) {
// TODO (b/271466616) allow removals from launcher
public void removeBubble(String key) {
mMainExecutor.execute(
() -> mController.removeBubble(key, Bubbles.DISMISS_USER_GESTURE));
}
@Override
public void removeAllBubbles() {
mMainExecutor.execute(() -> mController.removeAllBubbles(Bubbles.DISMISS_USER_GESTURE));
}
@Override
public void collapseBubbles() {
mMainExecutor.execute(() -> mController.collapseStack());
}
@Override
public void onBubbleDrag(String bubbleKey, boolean isBeingDragged) {
mMainExecutor.execute(() -> mController.onBubbleDrag(bubbleKey, isBeingDragged));
}
}
private class BubblesImpl implements Bubbles {

View File

@@ -31,8 +31,12 @@ interface IBubbles {
oneway void showBubble(in String key, in int bubbleBarOffsetX, in int bubbleBarOffsetY) = 3;
oneway void removeBubble(in String key, in int reason) = 4;
oneway void removeBubble(in String key) = 4;
oneway void collapseBubbles() = 5;
oneway void removeAllBubbles() = 5;
oneway void collapseBubbles() = 6;
oneway void onBubbleDrag(in String key, in boolean isBeingDragged) = 7;
}

View File

@@ -215,6 +215,14 @@ public class BubbleBarAnimationHelper {
mExpandedViewAlphaAnimator.reverse();
}
/**
* Cancel current animations
*/
public void cancelAnimations() {
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
mExpandedViewAlphaAnimator.cancel();
}
private void updateExpandedView() {
if (mExpandedBubble == null || mExpandedBubble.getBubbleBarExpandedView() == null) {
Log.w(TAG, "Trying to update the expanded view without a bubble");

View File

@@ -150,6 +150,12 @@ public class BubbleBarLayerView extends FrameLayout
mExpandedView = null;
}
if (mExpandedView == null) {
if (expandedView.getParent() != null) {
// Expanded view might be animating collapse and is still attached
// Cancel current animations and remove from parent
mAnimationHelper.cancelAnimations();
removeView(expandedView);
}
mExpandedBubble = b;
mExpandedView = expandedView;
boolean isOverflowExpanded = b.getKey().equals(BubbleOverflow.KEY);