From d3748577b6d62bfcf7beb65812477c95c35cd78c Mon Sep 17 00:00:00 2001 From: Matt Pape Date: Wed, 5 Feb 2020 09:28:10 -0800 Subject: [PATCH] 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 --- .../src/android/provider/DeviceConfigTest.java | 18 ++++++++++++++++++ .../providers/settings/SettingsState.java | 11 ++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/core/tests/coretests/src/android/provider/DeviceConfigTest.java b/core/tests/coretests/src/android/provider/DeviceConfigTest.java index 84c42dbc14e76..d649b945492be 100644 --- a/core/tests/coretests/src/android/provider/DeviceConfigTest.java +++ b/core/tests/coretests/src/android/provider/DeviceConfigTest.java @@ -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); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index 9934e59d8d565..cd62420f39ac4 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -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,