diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index b061df1423bac..40b0fcff3aaca 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -496,11 +496,14 @@ final class SettingsState { public List setSettingsLocked(String prefix, Map keyValues, String packageName) { List changedKeys = new ArrayList<>(); + final Iterator> iterator = mSettings.entrySet().iterator(); // Delete old keys with the prefix that are not part of the new set. - for (int i = 0; i < mSettings.keySet().size(); ++i) { - String key = mSettings.keyAt(i); - if (key.startsWith(prefix) && !keyValues.containsKey(key)) { - Setting oldState = mSettings.remove(key); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + final String key = entry.getKey(); + final Setting oldState = entry.getValue(); + if (key != null && key.startsWith(prefix) && !keyValues.containsKey(key)) { + iterator.remove(); FrameworkStatsLog.write(FrameworkStatsLog.SETTING_CHANGED, key, /* value= */ "", /* newValue= */ "", oldState.value, /* tag */ "", false,