diff options
| author | 2024-09-13 02:41:36 +0000 | |
|---|---|---|
| committer | 2024-09-13 02:41:36 +0000 | |
| commit | ef8c6a24c80c780364855b97721c9dc735c2843a (patch) | |
| tree | eddb2ec600a1cb90a44bd37454ce2cfea7e045a0 | |
| parent | e3857eb1502436a166c9c15d3485c9f70dfa66f1 (diff) | |
| parent | 50c0c9e93caecb84e93ad49921f02b0b62a7c3c2 (diff) | |
Merge "Support local overrides for sysprops" into main
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/SettingsToPropertiesMapper.java | 43 |
2 files changed, 53 insertions, 0 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig b/packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig index 62401a124ad1..aca26ecce29a 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig +++ b/packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig @@ -91,3 +91,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "support_local_overrides_sysprops" + namespace: "core_experiments_team_internal" + description: "When DeviceConfig overrides are deleted, delete new storage overrides too." + bug: "366022906" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java index 439bca0ea36a..a13ce654bb95 100644 --- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java @@ -370,6 +370,13 @@ public class SettingsToPropertiesMapper { String propertyName = "next_boot." + makeAconfigFlagPropertyName( actualNamespace, actualFlagName); + if (Flags.supportLocalOverridesSysprops()) { + // Don't propagate if there is a local override. + String overrideName = actualNamespace + ":" + actualFlagName; + if (DeviceConfig.getProperty(NAMESPACE_LOCAL_OVERRIDES, overrideName) != null) { + continue; + } + } setProperty(propertyName, flagValue); } @@ -388,6 +395,42 @@ public class SettingsToPropertiesMapper { if (enableAconfigStorageDaemon()) { setLocalOverridesInNewStorage(properties); } + + if (Flags.supportLocalOverridesSysprops()) { + String overridesNamespace = properties.getNamespace(); + for (String key : properties.getKeyset()) { + String realNamespace = key.split(":")[0]; + String realFlagName = key.split(":")[1]; + String aconfigPropertyName = + makeAconfigFlagPropertyName(realNamespace, realFlagName); + if (aconfigPropertyName == null) { + logErr("unable to construct system property for " + realNamespace + "/" + + key); + return; + } + + if (properties.getString(key, null) == null) { + String deviceConfigValue = + DeviceConfig.getProperty(realNamespace, realFlagName); + String stagedDeviceConfigValue = + DeviceConfig.getProperty(NAMESPACE_REBOOT_STAGING, + realNamespace + "*" + realFlagName); + + setProperty(aconfigPropertyName, deviceConfigValue); + if (stagedDeviceConfigValue == null) { + setProperty("next_boot." + aconfigPropertyName, deviceConfigValue); + } else { + setProperty("next_boot." + aconfigPropertyName, stagedDeviceConfigValue); + } + } else { + // Otherwise, propagate the override to sysprops. + setProperty(aconfigPropertyName, properties.getString(key, null)); + // If there's a staged value, make sure it's the override value. + setProperty("next_boot." + aconfigPropertyName, + properties.getString(key, null)); + } + } + } }); } |