summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sudheer Shanka <sudheersai@google.com> 2018-10-10 18:24:19 -0700
committer Sudheer Shanka <sudheersai@google.com> 2018-10-10 18:27:32 -0700
commitc45c387584e12aaa81f64bd4eab1bcc04d5451d7 (patch)
tree30d84d00d342db2c246108fe7509a845f822ca00
parentb61b0e57313268132af94e9d8a5e3ee59d430ce3 (diff)
Update CoreSettingsObserver internal state correctly.
When a setting gets deleted, it needs to be removed from CoreSettingsObserver internal state too. Bug: 117555066 Test: atest services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java Change-Id: I7c488f941bf7e6ee652b784b6d41e95a48138f5a
-rw-r--r--services/core/java/com/android/server/am/CoreSettingsObserver.java1
-rw-r--r--services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java37
2 files changed, 30 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 160c753d9540..a5984a6b622f 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -121,6 +121,7 @@ final class CoreSettingsObserver extends ContentObserver {
value = Settings.Global.getString(context.getContentResolver(), setting);
}
if (value == null) {
+ snapshot.remove(setting);
continue;
}
Class<?> type = entry.getValue();
diff --git a/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java b/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java
index fe8256eeb977..719e0edc20b7 100644
--- a/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java
@@ -132,15 +132,36 @@ public class CoreSettingsObserverTest {
settingsBundle.containsKey(TEST_SETTING_SYSTEM_STRING));
}
+ @Test
+ public void testPopulateSettings_settingDeleted() {
+ Settings.Secure.putInt(mContentResolver, TEST_SETTING_SECURE_INT, TEST_INT);
+ Settings.Global.putFloat(mContentResolver, TEST_SETTING_GLOBAL_FLOAT, TEST_FLOAT);
+ Settings.System.putString(mContentResolver, TEST_SETTING_SYSTEM_STRING, TEST_STRING);
+
+ Bundle settingsBundle = getPopulatedBundle();
+
+ assertEquals("Unexpected value of " + TEST_SETTING_SECURE_INT,
+ TEST_INT, settingsBundle.getInt(TEST_SETTING_SECURE_INT));
+ assertEquals("Unexpected value of " + TEST_SETTING_GLOBAL_FLOAT,
+ TEST_FLOAT, settingsBundle.getFloat(TEST_SETTING_GLOBAL_FLOAT), 0);
+ assertEquals("Unexpected value of " + TEST_SETTING_SYSTEM_STRING,
+ TEST_STRING, settingsBundle.getString(TEST_SETTING_SYSTEM_STRING));
+
+ Settings.Global.putString(mContentResolver, TEST_SETTING_GLOBAL_FLOAT, null);
+ settingsBundle = getPopulatedBundle();
+
+ assertFalse("Bundle should not contain " + TEST_SETTING_GLOBAL_FLOAT,
+ settingsBundle.containsKey(TEST_SETTING_GLOBAL_FLOAT));
+ assertEquals("Unexpected value of " + TEST_SETTING_SECURE_INT,
+ TEST_INT, settingsBundle.getInt(TEST_SETTING_SECURE_INT));
+ assertEquals("Unexpected value of " + TEST_SETTING_SYSTEM_STRING,
+ TEST_STRING, settingsBundle.getString(TEST_SETTING_SYSTEM_STRING));
+
+ }
+
private Bundle getPopulatedBundle() {
- final Bundle settingsBundle = new Bundle();
- mCoreSettingsObserver.populateSettings(settingsBundle,
- CoreSettingsObserver.sGlobalSettingToTypeMap);
- mCoreSettingsObserver.populateSettings(settingsBundle,
- CoreSettingsObserver.sSecureSettingToTypeMap);
- mCoreSettingsObserver.populateSettings(settingsBundle,
- CoreSettingsObserver.sSystemSettingToTypeMap);
- return settingsBundle;
+ mCoreSettingsObserver.onChange(false);
+ return mCoreSettingsObserver.getCoreSettingsLocked();
}
private class TestInjector extends Injector {