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

This commit is contained in:
Ruslan Tkhakokhov
2020-03-11 01:27:08 +00:00
committed by Android (Google) Code Review
2 changed files with 33 additions and 2 deletions

View File

@@ -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;
}
}
/**

View File

@@ -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());