diff options
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java | 4 | ||||
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java | 67 |
2 files changed, 47 insertions, 24 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index f64c3059e3a4..749ad0a993b3 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -967,7 +967,7 @@ public class SettingsProvider extends ContentProvider { for (int i = 0; i < nameCount; i++) { String name = names.get(i); Setting setting = settingsState.getSettingLocked(name); - pw.print("_id:"); pw.print(toDumpString(setting.getId())); + pw.print("_id:"); pw.print(toDumpString(String.valueOf(setting.getId()))); pw.print(" name:"); pw.print(toDumpString(name)); if (setting.getPackageName() != null) { pw.print(" pkg:"); pw.print(setting.getPackageName()); @@ -2785,7 +2785,7 @@ public class SettingsProvider extends ContentProvider { switch (column) { case Settings.NameValueTable._ID -> { - values[i] = setting.getId(); + values[i] = String.valueOf(setting.getId()); } case Settings.NameValueTable.NAME -> { values[i] = setting.getName(); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index 4165339aba5b..3c634f067a0d 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -567,7 +567,7 @@ final class SettingsState { } try { localCounter = Integer.parseInt(markerSetting.value); - } catch(NumberFormatException e) { + } catch (NumberFormatException e) { // reset local counter markerSetting.value = "0"; } @@ -1364,7 +1364,10 @@ final class SettingsState { } try { - if (writeSingleSetting(mVersion, serializer, setting.getId(), + if (writeSingleSetting( + mVersion, + serializer, + Long.toString(setting.getId()), setting.getName(), setting.getValue(), setting.getDefaultValue(), setting.getPackageName(), @@ -1633,7 +1636,7 @@ final class SettingsState { TypedXmlPullParser parser = Xml.resolvePullParser(in); parseStateLocked(parser); return true; - } catch (XmlPullParserException | IOException e) { + } catch (XmlPullParserException | IOException | NumberFormatException e) { Slog.e(LOG_TAG, "parse settings xml failed", e); return false; } finally { @@ -1653,7 +1656,7 @@ final class SettingsState { } private void parseStateLocked(TypedXmlPullParser parser) - throws IOException, XmlPullParserException { + throws IOException, XmlPullParserException, NumberFormatException { final int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT @@ -1709,7 +1712,7 @@ final class SettingsState { @GuardedBy("mLock") private void parseSettingsLocked(TypedXmlPullParser parser) - throws IOException, XmlPullParserException { + throws IOException, XmlPullParserException, NumberFormatException { mVersion = parser.getAttributeInt(null, ATTR_VERSION); @@ -1777,7 +1780,7 @@ final class SettingsState { } } mSettings.put(name, new Setting(name, value, defaultValue, packageName, tag, - fromSystem, id, isPreservedInRestore)); + fromSystem, Long.valueOf(id), isPreservedInRestore)); if (DEBUG_PERSISTENCE) { Slog.i(LOG_TAG, "[RESTORED] " + name + "=" + value); @@ -1867,7 +1870,7 @@ final class SettingsState { private String value; private String defaultValue; private String packageName; - private String id; + private long id; private String tag; // Whether the default is set by the system private boolean defaultFromSystem; @@ -1899,30 +1902,27 @@ final class SettingsState { } public Setting(String name, String value, String defaultValue, - String packageName, String tag, boolean fromSystem, String id) { + String packageName, String tag, boolean fromSystem, long id) { this(name, value, defaultValue, packageName, tag, fromSystem, id, /* isOverrideableByRestore */ false); } Setting(String name, String value, String defaultValue, - String packageName, String tag, boolean fromSystem, String id, + String packageName, String tag, boolean fromSystem, long id, boolean isValuePreservedInRestore) { - mNextId = Math.max(mNextId, Long.parseLong(id) + 1); - if (NULL_VALUE.equals(value)) { - value = null; - } + mNextId = Math.max(mNextId, id + 1); init(name, value, tag, defaultValue, packageName, fromSystem, id, isValuePreservedInRestore); } private void init(String name, String value, String tag, String defaultValue, - String packageName, boolean fromSystem, String id, + String packageName, boolean fromSystem, long id, boolean isValuePreservedInRestore) { this.name = name; - this.value = value; + this.value = internValue(value); this.tag = tag; - this.defaultValue = defaultValue; - this.packageName = packageName; + this.defaultValue = internValue(defaultValue); + this.packageName = TextUtils.safeIntern(packageName); this.id = id; this.defaultFromSystem = fromSystem; this.isValuePreservedInRestore = isValuePreservedInRestore; @@ -1960,7 +1960,7 @@ final class SettingsState { return isValuePreservedInRestore; } - public String getId() { + public long getId() { return id; } @@ -1993,9 +1993,6 @@ final class SettingsState { private boolean update(String value, boolean setDefault, String packageName, String tag, boolean forceNonSystemPackage, boolean overrideableByRestore, boolean resetToDefault) { - if (NULL_VALUE.equals(value)) { - value = null; - } final boolean callerSystem = !forceNonSystemPackage && !isNull() && (isCalledFromSystem(packageName) || isSystemPackage(mContext, packageName)); @@ -2040,7 +2037,7 @@ final class SettingsState { } init(name, value, tag, defaultValue, packageName, defaultFromSystem, - String.valueOf(mNextId++), isPreserved); + mNextId++, isPreserved); return true; } @@ -2052,6 +2049,32 @@ final class SettingsState { + " defaultFromSystem=" + defaultFromSystem + "}"; } + /** + * Interns a string if it's a common setting value. + * Otherwise returns the given string. + */ + static String internValue(String str) { + if (str == null) { + return null; + } + switch (str) { + case "true": + return "true"; + case "false": + return "false"; + case "0": + return "0"; + case "1": + return "1"; + case "": + return ""; + case "null": + return null; // explicit null has special handling + default: + return str; + } + } + private boolean shouldPreserveSetting(boolean overrideableByRestore, boolean resetToDefault, String packageName, String value) { if (resetToDefault) { |