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

Commit 83974911 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Reset isValuePreservedInRestore in Setting::reset()" into rvc-dev am: c6947ef6

Change-Id: Iab4fe0a7e1232e7ccddfae2b289c494582344aba
parents ab993e20 c6947ef6
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -1259,7 +1259,8 @@ final class SettingsState {
        public boolean reset() {
            // overrideableByRestore = true as resetting to default value isn't considered a
            // modification.
            return update(this.defaultValue, false, packageName, null, true, true);
            return update(this.defaultValue, false, packageName, null, true, true,
                    /* resetToDefault */ true);
        }

        public boolean isTransient() {
@@ -1272,6 +1273,13 @@ final class SettingsState {

        public boolean update(String value, boolean setDefault, String packageName, String tag,
                boolean forceNonSystemPackage, boolean overrideableByRestore) {
            return update(value, setDefault, packageName, tag, forceNonSystemPackage,
                    overrideableByRestore, /* resetToDefault */ false);
        }

        private boolean update(String value, boolean setDefault, String packageName, String tag,
                boolean forceNonSystemPackage, boolean overrideableByRestore,
                boolean resetToDefault) {
            if (NULL_VALUE.equals(value)) {
                value = null;
            }
@@ -1305,7 +1313,7 @@ final class SettingsState {
            }

            // isValuePreservedInRestore shouldn't change back to false if it has been set to true.
            boolean isPreserved = this.isValuePreservedInRestore || !overrideableByRestore;
            boolean isPreserved = shouldPreserveSetting(overrideableByRestore, resetToDefault);

            // Is something gonna change?
            if (Objects.equals(value, this.value)
@@ -1329,6 +1337,17 @@ final class SettingsState {
                    + " packageName=" + packageName + " tag=" + tag
                    + " defaultFromSystem=" + defaultFromSystem + "}";
        }

        private boolean shouldPreserveSetting(boolean overrideableByRestore,
                boolean resetToDefault) {
            if (resetToDefault) {
                // By default settings are not marked as preserved.
                return false;
            }

            // isValuePreservedInRestore shouldn't change back to false if it has been set to true.
            return this.isValuePreservedInRestore || !overrideableByRestore;
        }
    }

    /**
+12 −0
Original line number Diff line number Diff line
@@ -241,6 +241,18 @@ public class SettingsStateTest extends AndroidTestCase {
        assertTrue(settingsReader.getSettingLocked(SETTING_NAME).isValuePreservedInRestore());
    }

    public void testResetSetting_preservedFlagIsReset() {
        SettingsState settingsState = getSettingStateObject();
        // Initialize the setting.
        settingsState.insertSettingLocked(SETTING_NAME, "1", null, false, TEST_PACKAGE);
        // Update the setting so that preserved flag is set.
        settingsState.insertSettingLocked(SETTING_NAME, "2", null, false, TEST_PACKAGE);

        settingsState.resetSettingLocked(SETTING_NAME);
        assertFalse(settingsState.getSettingLocked(SETTING_NAME).isValuePreservedInRestore());

    }

    private SettingsState getSettingStateObject() {
        SettingsState settingsState = new SettingsState(getContext(), mLock, mSettingsFile, 1,
                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());