summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-09-13 02:41:36 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-13 02:41:36 +0000
commitef8c6a24c80c780364855b97721c9dc735c2843a (patch)
treeeddb2ec600a1cb90a44bd37454ce2cfea7e045a0
parente3857eb1502436a166c9c15d3485c9f70dfa66f1 (diff)
parent50c0c9e93caecb84e93ad49921f02b0b62a7c3c2 (diff)
Merge "Support local overrides for sysprops" into main
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/device_config_service.aconfig10
-rw-r--r--services/core/java/com/android/server/am/SettingsToPropertiesMapper.java43
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));
+ }
+ }
+ }
});
}