Fix ConcurrentModificationException in QuickstepWidgetHolder
If the listeners would modify the listener list in the widget holder, this would cause a ConcurrentModificationException.
Fix: 275100497
Test: N/A
Change-Id: I3ae0e92db71f1c21d35dbf391dfcb92b46dd30f1
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
index 36e78fb..39543b0 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
@@ -95,7 +95,11 @@
i -> MAIN_EXECUTOR.execute(() ->
sHolders.forEach(h -> h.mAppWidgetRemovedCallback.accept(i))),
() -> MAIN_EXECUTOR.execute(() ->
- sHolders.forEach(h -> h.mProviderChangedListeners.forEach(
+ sHolders.forEach(h ->
+ // Listeners might remove themselves from the list during the
+ // iteration. Creating a copy of the list to avoid exceptions
+ // for concurrent modification.
+ new ArrayList<>(h.mProviderChangedListeners).forEach(
ProviderChangedListener::notifyWidgetProvidersChanged))),
UI_HELPER_EXECUTOR.getLooper());
if (!WidgetsModel.GO_DISABLE_WIDGETS) {