diff --git a/services/core/java/com/android/server/notification/ShortcutHelper.java b/services/core/java/com/android/server/notification/ShortcutHelper.java index 94b690a4dfce8..9c3d6d352c894 100644 --- a/services/core/java/com/android/server/notification/ShortcutHelper.java +++ b/services/core/java/com/android/server/notification/ShortcutHelper.java @@ -102,9 +102,13 @@ public class ShortcutHelper { HashMap shortcutBubbles = mActiveShortcutBubbles.get(packageName); ArrayList bubbleKeysToRemove = new ArrayList<>(); if (shortcutBubbles != null) { + // Copy to avoid a concurrent modification exception when we remove bubbles from + // shortcutBubbles. + final Set shortcutIds = new HashSet<>(shortcutBubbles.keySet()); + // If we can't find one of our bubbles in the shortcut list, that bubble needs // to be removed. - for (String shortcutId : shortcutBubbles.keySet()) { + for (String shortcutId : shortcutIds) { boolean foundShortcut = false; for (int i = 0; i < shortcuts.size(); i++) { if (shortcuts.get(i).getId().equals(shortcutId)) {