summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java83
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java24
2 files changed, 23 insertions, 84 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 973d21c80616..f5d7dd8d9acd 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -2895,7 +2895,7 @@ public class SettingsProvider extends ContentProvider {
}
private final class UpgradeController {
- private static final int SETTINGS_VERSION = 146;
+ private static final int SETTINGS_VERSION = 145;
private final int mUserId;
@@ -3421,11 +3421,22 @@ public class SettingsProvider extends ContentProvider {
}
if (currentVersion == 141) {
- // This implementation was incorrectly setting the current value of
- // settings changed by non-system packages as the default which default
- // is set by the system. We add a new upgrade step at the end to properly
- // handle this case which would also fix incorrect changes made by the
- // old implementation of this step.
+ // Version 142: We added the notion of a default and whether the system set
+ // the setting. This is used for resetting the internal state and we need
+ // to make sure this value is updated for the existing settings, otherwise
+ // we would delete system set settings while they should stay unmodified.
+ SettingsState globalSettings = getGlobalSettingsLocked();
+ ensureLegacyDefaultValueAndSystemSetUpdatedLocked(globalSettings);
+ globalSettings.persistSyncLocked();
+
+ SettingsState secureSettings = getSecureSettingsLocked(mUserId);
+ ensureLegacyDefaultValueAndSystemSetUpdatedLocked(secureSettings);
+ secureSettings.persistSyncLocked();
+
+ SettingsState systemSettings = getSystemSettingsLocked(mUserId);
+ ensureLegacyDefaultValueAndSystemSetUpdatedLocked(systemSettings);
+ systemSettings.persistSyncLocked();
+
currentVersion = 142;
}
@@ -3485,31 +3496,6 @@ public class SettingsProvider extends ContentProvider {
currentVersion = 145;
}
- if (currentVersion == 145) {
- // Version 146: In step 142 we had a bug where incorrectly
- // some settings were considered system set and as a result
- // made the default and marked as the default being set by
- // the system. Here reevaluate the default and default system
- // set flags. This would both fix corruption by the old impl
- // of step 142 and also properly handle devices which never
- // run 142.
- if (userId == UserHandle.USER_SYSTEM) {
- SettingsState globalSettings = getGlobalSettingsLocked();
- ensureLegacyDefaultValueAndSystemSetUpdatedLocked(globalSettings, userId);
- globalSettings.persistSyncLocked();
- }
-
- SettingsState secureSettings = getSecureSettingsLocked(mUserId);
- ensureLegacyDefaultValueAndSystemSetUpdatedLocked(secureSettings, userId);
- secureSettings.persistSyncLocked();
-
- SettingsState systemSettings = getSystemSettingsLocked(mUserId);
- ensureLegacyDefaultValueAndSystemSetUpdatedLocked(systemSettings, userId);
- systemSettings.persistSyncLocked();
-
- currentVersion = 146;
- }
-
// vXXX: Add new settings above this point.
if (currentVersion != newVersion) {
@@ -3528,46 +3514,19 @@ public class SettingsProvider extends ContentProvider {
}
}
- private void ensureLegacyDefaultValueAndSystemSetUpdatedLocked(SettingsState settings,
- int userId) {
+ private void ensureLegacyDefaultValueAndSystemSetUpdatedLocked(SettingsState settings) {
List<String> names = settings.getSettingNamesLocked();
final int nameCount = names.size();
for (int i = 0; i < nameCount; i++) {
String name = names.get(i);
Setting setting = settings.getSettingLocked(name);
-
- // In the upgrade case we pretend the call is made from the app
- // that made the last change to the setting to properly determine
- // whether the call has been made by a system component.
- int callingUid = -1;
- try {
- callingUid = mPackageManager.getPackageUid(setting.getPackageName(), 0, userId);
- } catch (RemoteException e) {
- /* ignore - handled below */
- }
- if (callingUid < 0) {
- Slog.e(LOG_TAG, "Unknown package: " + setting.getPackageName());
- continue;
- }
- try {
- final boolean systemSet = SettingsState.isSystemPackage(getContext(),
- setting.getPackageName(), callingUid);
+ if (setting.getDefaultValue() == null) {
+ boolean systemSet = SettingsState.isSystemPackage(getContext(),
+ setting.getPackageName());
if (systemSet) {
settings.insertSettingLocked(name, setting.getValue(),
setting.getTag(), true, setting.getPackageName());
- } else if (setting.getDefaultValue() != null && setting.isDefaultFromSystem()) {
- // We had a bug where changes by non-system packages were marked
- // as system made and as a result set as the default. Therefore, if
- // the package changed the setting last is not a system one but the
- // setting is marked as its default coming from the system we clear
- // the default and clear the system set flag.
- settings.resetSettingDefaultValueLocked(name);
}
- } catch (IllegalStateException e) {
- // If the package goes over its quota during the upgrade, don't
- // crash but just log the error as the system does the upgrade.
- Slog.e(LOG_TAG, "Error upgrading setting: " + setting.getName(), e);
-
}
}
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index 6c983601b5a9..5f4b2391a763 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -298,22 +298,6 @@ final class SettingsState {
}
// The settings provider must hold its lock when calling here.
- public void resetSettingDefaultValueLocked(String name) {
- Setting oldSetting = getSettingLocked(name);
- if (oldSetting != null && !oldSetting.isNull() && oldSetting.getDefaultValue() != null) {
- String oldValue = oldSetting.getValue();
- String oldDefaultValue = oldSetting.getDefaultValue();
- Setting newSetting = new Setting(name, oldSetting.getValue(), null,
- oldSetting.getPackageName(), oldSetting.getTag(), false,
- oldSetting.getId());
- mSettings.put(name, newSetting);
- updateMemoryUsagePerPackageLocked(newSetting.getPackageName(), oldValue,
- newSetting.getValue(), oldDefaultValue, newSetting.getDefaultValue());
- scheduleWriteIfNeededLocked();
- }
- }
-
- // The settings provider must hold its lock when calling here.
public boolean insertSettingLocked(String name, String value, String tag,
boolean makeDefault, String packageName) {
if (TextUtils.isEmpty(name)) {
@@ -1019,10 +1003,6 @@ final class SettingsState {
}
public static boolean isSystemPackage(Context context, String packageName) {
- return isSystemPackage(context, packageName, Binder.getCallingUid());
- }
-
- public static boolean isSystemPackage(Context context, String packageName, int callingUid) {
synchronized (sLock) {
if (SYSTEM_PACKAGE_NAME.equals(packageName)) {
return true;
@@ -1035,7 +1015,7 @@ final class SettingsState {
}
// Native services running as a special UID get a pass
- final int callingAppId = UserHandle.getAppId(callingUid);
+ final int callingAppId = UserHandle.getAppId(Binder.getCallingUid());
if (callingAppId < FIRST_APPLICATION_UID) {
sSystemUids.put(callingAppId, callingAppId);
return true;
@@ -1046,7 +1026,7 @@ final class SettingsState {
// profile for the purpose of determining whether the other end is a
// system component we need to use the user id of the caller for
// pulling information about the caller from the package manager.
- final int callingUserId = UserHandle.getUserId(callingUid);
+ final int callingUserId = UserHandle.getCallingUserId();
final long identity = Binder.clearCallingIdentity();
try {