Send the bubble removal timestamp to wm shell

The removal and update of bubbles happen in different processes, so
it's possible for race conditions to allow users to remove bubbles
without knowing that an update exists.

Passing the removal timestamp allows wm shell to determine whether
the removal happened before or after the latest update was received
for the bubble. This largely mitigates the race but does not solve
it completely. Will file a separate bug to track that.

Flag: com.android.wm.shell.enable_bubble_bar
Bug: 351026092
Test: Manual
       - Note the issue here is a race condition so requires code
         changes to force repro it
       - Locally I added an artificial delay between the time the
       - bubble is removed and until the removal is sent to wmshell
       - Create bubbles and expand the bubble bar
       - Dismiss bubble by dragging it to dismiss
       - Send an update to the same bubble before removal is processed
         in wmshell
       - Verify bubble is added back
       - Verify bubble is not removed when the removal is processed
         in wmshell
Change-Id: I05ddc692fe30709125e380351b223d20a0778264
This commit is contained in:
Liran Binyamin
2024-07-03 17:07:09 -04:00
parent 4cebffa209
commit bdd96de69a
3 changed files with 19 additions and 3 deletions
@@ -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:");