diff options
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index 6f3c88fc8706..ae71cece803f 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -612,12 +612,19 @@ final class SettingsState { String packageName) { List<String> changedKeys = new ArrayList<>(); final Iterator<Map.Entry<String, Setting>> iterator = mSettings.entrySet().iterator(); + int index = prefix.lastIndexOf('/'); + String namespace = index < 0 ? "" : prefix.substring(0, index); + Map<String, String> trunkFlagMap = + mNamespaceDefaults.get(namespace); // Delete old keys with the prefix that are not part of the new set. + // trunk flags will not be configured with restricted propagation + // trunk flags will be explicitly set, so not removing them here 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)) { + if (key != null && (trunkFlagMap == null || !trunkFlagMap.containsKey(key)) + && key.startsWith(prefix) && !keyValues.containsKey(key)) { iterator.remove(); FrameworkStatsLog.write(FrameworkStatsLog.SETTING_CHANGED, key, |