Merge "Fix issue with callback not being made on the sysui main thread" into sc-dev
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
index 11c1464..dca5985 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
@@ -739,14 +739,11 @@
         return (isSummary && isSuppressedSummary) || isSuppressedBubble;
     }
 
-    private void removeSuppressedSummaryIfNecessary(String groupKey, Consumer<String> callback,
-            Executor callbackExecutor) {
+    private void removeSuppressedSummaryIfNecessary(String groupKey, Consumer<String> callback) {
         if (mBubbleData.isSummarySuppressed(groupKey)) {
             mBubbleData.removeSuppressedSummary(groupKey);
             if (callback != null) {
-                callbackExecutor.execute(() -> {
-                    callback.accept(mBubbleData.getSummaryKey(groupKey));
-                });
+                callback.accept(mBubbleData.getSummaryKey(groupKey));
             }
         }
     }
@@ -1298,8 +1295,10 @@
         public void removeSuppressedSummaryIfNecessary(String groupKey, Consumer<String> callback,
                 Executor callbackExecutor) {
             mMainExecutor.execute(() -> {
-                BubbleController.this.removeSuppressedSummaryIfNecessary(groupKey, callback,
-                        callbackExecutor);
+                Consumer<String> cb = callback != null
+                        ? (key) -> callbackExecutor.execute(() -> callback.accept(key))
+                        : null;
+                BubbleController.this.removeSuppressedSummaryIfNecessary(groupKey, cb);
             });
         }
 
@@ -1340,10 +1339,13 @@
 
         @Override
         public boolean handleDismissalInterception(BubbleEntry entry,
-                @Nullable List<BubbleEntry> children, IntConsumer removeCallback) {
+                @Nullable List<BubbleEntry> children, IntConsumer removeCallback,
+                Executor callbackExecutor) {
+            IntConsumer cb = removeCallback != null
+                    ? (index) -> callbackExecutor.execute(() -> removeCallback.accept(index))
+                    : null;
             return mMainExecutor.executeBlockingForResult(() -> {
-                return BubbleController.this.handleDismissalInterception(entry, children,
-                        removeCallback);
+                return BubbleController.this.handleDismissalInterception(entry, children, cb);
             }, Boolean.class);
         }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
index 9fc8aef..1bfb619 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
@@ -140,7 +140,7 @@
      * @return true if we want to intercept the dismissal of the entry, else false.
      */
     boolean handleDismissalInterception(BubbleEntry entry, @Nullable List<BubbleEntry> children,
-            IntConsumer removeCallback);
+            IntConsumer removeCallback, Executor callbackExecutor);
 
     /** Set the proxy to commnuicate with SysUi side components. */
     void setSysuiProxy(SysuiProxy proxy);
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
index 55b80dd..db77366 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
@@ -633,7 +633,7 @@
                     } else {
                         mNotificationGroupManager.onEntryRemoved(entry);
                     }
-                });
+                }, mSysuiMainExecutor);
     }
 
     /**