summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
index d744fc398d7a..2e70c59be0c9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
@@ -31,6 +31,8 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.Co
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -75,6 +77,7 @@ import javax.inject.Singleton;
public final class NotifBindPipeline {
private final Map<NotificationEntry, BindEntry> mBindEntries = new ArrayMap<>();
private final NotifBindPipelineLogger mLogger;
+ private final List<BindCallback> mScratchCallbacksList = new ArrayList<>();
private BindStage mStage;
@Inject
@@ -162,10 +165,15 @@ public final class NotifBindPipeline {
mLogger.logFinishedPipeline(entry.getKey(), callbacks.size());
bindEntry.invalidated = false;
- for (BindCallback cb : callbacks) {
- cb.onBindFinished(entry);
- }
+ // Move all callbacks to separate list as callbacks may themselves add/remove callbacks.
+ // TODO: Throw an exception for this re-entrant behavior once we deprecate
+ // NotificationGroupAlertTransferHelper
+ mScratchCallbacksList.addAll(callbacks);
callbacks.clear();
+ for (int i = 0; i < mScratchCallbacksList.size(); i++) {
+ mScratchCallbacksList.get(i).onBindFinished(entry);
+ }
+ mScratchCallbacksList.clear();
}
private final NotifCollectionListener mCollectionListener = new NotifCollectionListener() {