diff options
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 8c8a71ccf01e..785003a355fc 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -3030,11 +3030,25 @@ public class SettingsProvider extends ContentProvider { } @GuardedBy("mLock") - public void ensureSettingsForUserLocked(int userId) { + @Nullable + private SettingsState getOrCreateSettingsStateLocked(int key) { + SettingsState settingsState = mSettingsStates.get(key); + if (settingsState != null) { + return settingsState; + } + + if (!ensureSettingsForUserLocked(getUserIdFromKey(key))) { + return null; + } + return mSettingsStates.get(key); + } + + @GuardedBy("mLock") + public boolean ensureSettingsForUserLocked(int userId) { // First make sure this user actually exists. if (mUserManager.getUserInfo(userId) == null) { Slog.wtf(LOG_TAG, "Requested user " + userId + " does not exist"); - return; + return false; } // Migrate the setting for this user if needed. @@ -3072,6 +3086,7 @@ public class SettingsProvider extends ContentProvider { // Upgrade the settings to the latest version. UpgradeController upgrader = new UpgradeController(userId); upgrader.upgradeIfNeededLocked(); + return true; } @GuardedBy("mLock") @@ -3149,7 +3164,7 @@ public class SettingsProvider extends ContentProvider { boolean success = false; boolean wasUnsetNonPredefinedSetting = false; - SettingsState settingsState = mSettingsStates.get(key); + SettingsState settingsState = getOrCreateSettingsStateLocked(key); if (settingsState != null) { if (!isSettingPreDefined(name, type) && !settingsState.hasSetting(name)) { wasUnsetNonPredefinedSetting = true; @@ -3184,7 +3199,7 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") public boolean setConfigSettingsLocked(int key, String prefix, Map<String, String> keyValues, String packageName) { - SettingsState settingsState = mSettingsStates.get(key); + SettingsState settingsState = getOrCreateSettingsStateLocked(key); if (settingsState != null) { if (settingsState.isNewConfigBannedLocked(prefix, keyValues)) { return false; @@ -3207,7 +3222,7 @@ public class SettingsProvider extends ContentProvider { final int key = makeKey(type, userId); boolean success = false; - SettingsState settingsState = mSettingsStates.get(key); + SettingsState settingsState = getOrCreateSettingsStateLocked(key); if (settingsState != null) { success = settingsState.deleteSettingLocked(name); } @@ -3232,7 +3247,7 @@ public class SettingsProvider extends ContentProvider { final int key = makeKey(type, userId); boolean success = false; - SettingsState settingsState = mSettingsStates.get(key); + SettingsState settingsState = getOrCreateSettingsStateLocked(key); if (settingsState != null) { success = settingsState.updateSettingLocked(name, value, tag, makeDefault, packageName); @@ -3284,7 +3299,7 @@ public class SettingsProvider extends ContentProvider { public boolean resetSettingsLocked(int type, int userId, String packageName, int mode, String tag, @Nullable String prefix) { final int key = makeKey(type, userId); - SettingsState settingsState = mSettingsStates.get(key); + SettingsState settingsState = getOrCreateSettingsStateLocked(key); if (settingsState == null) { return false; } |