Respect forceNonSystemPackage param when creating new Setting objects.

Previously, new settings created via DeviceConfig.setProperty() resulted
in the forceNonSystemPackage param being ignored and the makeDefault
param being overwritten to true. This caused new Setting objects added
this way to always save their initial value as the default value. This
caused problems in tests that tried to make local changes and later
reset them to the prior state.

Test: atest FrameworksCoreTests:DeviceConfigTest
Bug: 147862338
Change-Id: I98a4585fc39cb8c39e630c0dcd318b05a085fcc3
This commit is contained in:
Matt Pape
2020-02-05 09:28:10 -08:00
parent fb961bf0bd
commit d3748577b6
2 changed files with 26 additions and 3 deletions

View File

@@ -375,6 +375,24 @@ public class DeviceConfigTest {
assertThat(result).isEqualTo(newValue);
}
@Test
public void resetToDefault_makeDefault() {
DeviceConfig.setProperty(NAMESPACE, KEY, VALUE, true);
assertThat(DeviceConfig.getProperty(NAMESPACE, KEY)).isEqualTo(VALUE);
DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS, NAMESPACE);
assertThat(DeviceConfig.getProperty(NAMESPACE, KEY)).isEqualTo(VALUE);
}
@Test
public void resetToDefault_doNotMakeDefault() {
DeviceConfig.setProperty(NAMESPACE, KEY, VALUE, false);
assertThat(DeviceConfig.getProperty(NAMESPACE, KEY)).isEqualTo(VALUE);
DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS, NAMESPACE);
assertThat(DeviceConfig.getProperty(NAMESPACE, KEY)).isNull();
}
@Test
public void getProperties_fullNamespace() {
Properties properties = DeviceConfig.getProperties(NAMESPACE);

View File

@@ -425,7 +425,8 @@ final class SettingsState {
}
newState = oldState;
} else {
newState = new Setting(name, value, makeDefault, packageName, tag);
newState = new Setting(name, value, makeDefault, packageName, tag,
forceNonSystemPackage);
mSettings.put(name, newState);
}
@@ -1173,11 +1174,15 @@ final class SettingsState {
public Setting(String name, String value, boolean makeDefault, String packageName,
String tag) {
this(name, value, makeDefault, packageName, tag, false);
}
Setting(String name, String value, boolean makeDefault, String packageName,
String tag, boolean forceNonSystemPackage) {
this.name = name;
// overrideableByRestore = true as the first initialization isn't considered a
// modification.
update(value, makeDefault, packageName, tag, false,
/* overrideableByRestore */ true);
update(value, makeDefault, packageName, tag, forceNonSystemPackage, true);
}
public Setting(String name, String value, String defaultValue,