diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java index 36e78fba80..39543b0d7d 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java @@ -95,7 +95,11 @@ public final class QuickstepWidgetHolder extends LauncherWidgetHolder { 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) {