Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50c0c9e9 authored by Ted Bauer's avatar Ted Bauer
Browse files

Support local overrides for sysprops

Change-Id: Ibaa5a456d06ed24589209e8912de1e68d053fcfb
Test: m
Bug: 324436145
Flag: com.android.providers.settings.support_local_overrides_sysprops
parent fb01df17
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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
    }
}
+43 −0
Original line number Diff line number Diff line
@@ -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));
                    }
                  }
                }
        });
    }