diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java index a3832cdf8b..7426dc7259 100644 --- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java +++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java @@ -356,6 +356,13 @@ public class BubbleBarController extends IBubblesListener.Stub { } } + // if a bubble was updated upstream, but removed before the update was received, add it back + if (update.updatedBubble != null && !mBubbles.containsKey(update.updatedBubble.getKey())) { + mBubbles.put(update.updatedBubble.getKey(), update.updatedBubble); + mBubbleBarViewController.addBubble( + update.updatedBubble, isExpanding, suppressAnimation); + } + if (update.addedBubble != null && isCollapsed) { // If we're collapsed, the most recently added bubble will be selected. bubbleToSelect = update.addedBubble; diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java index ad815094bb..23c747eda0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java @@ -89,6 +89,8 @@ public class BubbleBarViewController { private BubbleBarViewAnimator mBubbleBarViewAnimator; + private TimeSource mTimeSource = System::currentTimeMillis; + @Nullable private BubbleBarBoundsChangeListener mBoundsChangeListener; @@ -576,7 +578,7 @@ public class BubbleBarViewController { * @param bubble dismissed bubble item */ public void onDismissBubbleWhileDragging(@NonNull BubbleBarItem bubble) { - mSystemUiProxy.dragBubbleToDismiss(bubble.getKey()); + mSystemUiProxy.dragBubbleToDismiss(bubble.getKey(), mTimeSource.currentTimeMillis()); } /** @@ -601,6 +603,11 @@ public class BubbleBarViewController { void onBoundsChanged(); } + /** Interface for getting the current timestamp. */ + interface TimeSource { + long currentTimeMillis(); + } + /** Dumps the state of BubbleBarViewController. */ public void dump(PrintWriter pw) { pw.println("Bubble bar view controller state:"); diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index 433baa9581..ec035a9145 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -831,12 +831,14 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable { /** * Tells SysUI to dismiss the bubble with the provided key. + * * @param key the key of the bubble to dismiss. + * @param timestamp the timestamp when the removal happened. */ - public void dragBubbleToDismiss(String key) { + public void dragBubbleToDismiss(String key, long timestamp) { if (mBubbles == null) return; try { - mBubbles.dragBubbleToDismiss(key); + mBubbles.dragBubbleToDismiss(key, timestamp); } catch (RemoteException e) { Log.w(TAG, "Failed call dragBubbleToDismiss"); }