diff options
| author | 2018-10-10 18:24:19 -0700 | |
|---|---|---|
| committer | 2018-10-10 18:27:32 -0700 | |
| commit | c45c387584e12aaa81f64bd4eab1bcc04d5451d7 (patch) | |
| tree | 30d84d00d342db2c246108fe7509a845f822ca00 | |
| parent | b61b0e57313268132af94e9d8a5e3ee59d430ce3 (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.java | 1 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java | 37 |
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 { |