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

Commit c45c3875 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

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
parent b61b0e57
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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();
+29 −8
Original line number Diff line number Diff line
@@ -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 {