Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +38 −2 Original line number Original line Diff line number Diff line Loading @@ -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) Loading Loading @@ -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); Loading Loading @@ -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 { Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/IBubbles.aidl +6 −2 Original line number Original line Diff line number Diff line Loading @@ -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; } } No newline at end of file libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarAnimationHelper.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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"); Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/RelativeTouchListener.kt +19 −0 Original line number Original line Diff line number Diff line Loading @@ -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() Loading Loading @@ -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 Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +38 −2 Original line number Original line Diff line number Diff line Loading @@ -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) Loading Loading @@ -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); Loading Loading @@ -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 { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/IBubbles.aidl +6 −2 Original line number Original line Diff line number Diff line Loading @@ -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; } } No newline at end of file
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarAnimationHelper.java +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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"); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/bubbles/RelativeTouchListener.kt +19 −0 Original line number Original line Diff line number Diff line Loading @@ -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() Loading Loading @@ -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 Loading