summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java29
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;
}