Merge "Bubble bar drag to dismiss" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
aa278351d4
@@ -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 collapse whether to collapse or expand
|
||||
*/
|
||||
public void collapseWhileDragging(String bubbleKey, boolean collapse) {
|
||||
if (mBubbleData.getSelectedBubble() != null
|
||||
&& mBubbleData.getSelectedBubble().getKey().equals(bubbleKey)) {
|
||||
// Should collapse/expand only if equals to selected bubble.
|
||||
mBubbleBarViewCallback.expansionChanged(/* isExpanded = */ !collapse);
|
||||
}
|
||||
}
|
||||
|
||||
@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 collapseWhileDragging(String bubbleKey, boolean collapse) {
|
||||
mMainExecutor.execute(() -> mController.collapseWhileDragging(bubbleKey, collapse));
|
||||
}
|
||||
}
|
||||
|
||||
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 collapseWhileDragging(in String key, in boolean collapse) = 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);
|
||||
|
||||
@@ -78,6 +78,24 @@ abstract class RelativeTouchListener : View.OnTouchListener {
|
||||
velY: Float
|
||||
)
|
||||
|
||||
/**
|
||||
* Called when an ACTION_CANCEL event is received for the given view. This signals that the
|
||||
* current gesture has been aborted.
|
||||
*
|
||||
* @param viewInitialX The view's translationX value when this touch gesture started.
|
||||
* @param viewInitialY The view's translationY value when this touch gesture started.
|
||||
* @param dx Horizontal distance covered since the initial ACTION_DOWN event, in pixels.
|
||||
* @param dy Vertical distance covered since the initial ACTION_DOWN event, in pixels.
|
||||
*/
|
||||
open fun onCancel(
|
||||
v: View,
|
||||
ev: MotionEvent,
|
||||
viewInitialX: Float,
|
||||
viewInitialY: Float,
|
||||
dx: Float,
|
||||
dy: Float
|
||||
) {}
|
||||
|
||||
/** The raw coordinates of the last ACTION_DOWN event. */
|
||||
private val touchDown = PointF()
|
||||
|
||||
@@ -146,6 +164,7 @@ abstract class RelativeTouchListener : View.OnTouchListener {
|
||||
}
|
||||
|
||||
MotionEvent.ACTION_CANCEL -> {
|
||||
onCancel(v, ev, viewPositionOnTouchDown.x, viewPositionOnTouchDown.y, dx, dy)
|
||||
v.handler.removeCallbacksAndMessages(null)
|
||||
velocityTracker.clear()
|
||||
movedEnough = false
|
||||
|
||||
Reference in New Issue
Block a user