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 */);
|
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
|
@VisibleForTesting
|
||||||
public boolean isBubbleNotificationSuppressedFromShade(String key, String groupKey) {
|
public boolean isBubbleNotificationSuppressedFromShade(String key, String groupKey) {
|
||||||
boolean isSuppressedBubble = (mBubbleData.hasAnyBubbleWithKey(key)
|
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) {
|
private void onEntryAdded(BubbleEntry entry) {
|
||||||
if (canLaunchInTaskView(mContext, entry)) {
|
if (canLaunchInTaskView(mContext, entry)) {
|
||||||
updateBubble(entry);
|
updateBubble(entry);
|
||||||
@@ -2095,14 +2120,25 @@ public class BubbleController implements ConfigurationChangeListener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeBubble(String key, int reason) {
|
public void removeBubble(String key) {
|
||||||
// TODO (b/271466616) allow removals from launcher
|
mMainExecutor.execute(
|
||||||
|
() -> mController.removeBubble(key, Bubbles.DISMISS_USER_GESTURE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAllBubbles() {
|
||||||
|
mMainExecutor.execute(() -> mController.removeAllBubbles(Bubbles.DISMISS_USER_GESTURE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collapseBubbles() {
|
public void collapseBubbles() {
|
||||||
mMainExecutor.execute(() -> mController.collapseStack());
|
mMainExecutor.execute(() -> mController.collapseStack());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collapseWhileDragging(String bubbleKey, boolean collapse) {
|
||||||
|
mMainExecutor.execute(() -> mController.collapseWhileDragging(bubbleKey, collapse));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class BubblesImpl implements Bubbles {
|
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 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();
|
mExpandedViewAlphaAnimator.reverse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel current animations
|
||||||
|
*/
|
||||||
|
public void cancelAnimations() {
|
||||||
|
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix).cancel();
|
||||||
|
mExpandedViewAlphaAnimator.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
private void updateExpandedView() {
|
private void updateExpandedView() {
|
||||||
if (mExpandedBubble == null || mExpandedBubble.getBubbleBarExpandedView() == null) {
|
if (mExpandedBubble == null || mExpandedBubble.getBubbleBarExpandedView() == null) {
|
||||||
Log.w(TAG, "Trying to update the expanded view without a bubble");
|
Log.w(TAG, "Trying to update the expanded view without a bubble");
|
||||||
|
|||||||
@@ -150,6 +150,12 @@ public class BubbleBarLayerView extends FrameLayout
|
|||||||
mExpandedView = null;
|
mExpandedView = null;
|
||||||
}
|
}
|
||||||
if (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;
|
mExpandedBubble = b;
|
||||||
mExpandedView = expandedView;
|
mExpandedView = expandedView;
|
||||||
boolean isOverflowExpanded = b.getKey().equals(BubbleOverflow.KEY);
|
boolean isOverflowExpanded = b.getKey().equals(BubbleOverflow.KEY);
|
||||||
|
|||||||
@@ -78,6 +78,24 @@ abstract class RelativeTouchListener : View.OnTouchListener {
|
|||||||
velY: Float
|
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. */
|
/** The raw coordinates of the last ACTION_DOWN event. */
|
||||||
private val touchDown = PointF()
|
private val touchDown = PointF()
|
||||||
|
|
||||||
@@ -146,6 +164,7 @@ abstract class RelativeTouchListener : View.OnTouchListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MotionEvent.ACTION_CANCEL -> {
|
MotionEvent.ACTION_CANCEL -> {
|
||||||
|
onCancel(v, ev, viewPositionOnTouchDown.x, viewPositionOnTouchDown.y, dx, dy)
|
||||||
v.handler.removeCallbacksAndMessages(null)
|
v.handler.removeCallbacksAndMessages(null)
|
||||||
velocityTracker.clear()
|
velocityTracker.clear()
|
||||||
movedEnough = false
|
movedEnough = false
|
||||||
|
|||||||
Reference in New Issue
Block a user