Merge "[SettingsProvider] fix the removing of old keys"

This commit is contained in:
Songchun Fan
2020-12-02 18:40:12 +00:00
committed by Android (Google) Code Review

View File

@@ -496,11 +496,14 @@ final class SettingsState {
public List<String> setSettingsLocked(String prefix, Map<String, String> keyValues,
String packageName) {
List<String> changedKeys = new ArrayList<>();
final Iterator<Map.Entry<String, Setting>> 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<String, Setting> 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,