Bubble bar dismiss
* Added additional methods to `IBubbles` protocol in order to communicate bubble dismissal to the WMShell. * Added animation cancellation if the expanded state changes in the middle of animation. * Implemented bubble dismiss functionality in `BubbleController` Bug: 271466616 Test: manual, TBD Flag: WM_BUBBLE_BAR Change-Id: Iaf3de681d425adb1ff6270ff4a380c6b59abc6c2
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user