Merge "[SettingsProvider] minor refactor before lock changes" into main
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 4e2fad0..95d7039 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -40,7 +40,6 @@
import static com.android.providers.settings.SettingsState.isConfigSettingsKey;
import static com.android.providers.settings.SettingsState.isGlobalSettingsKey;
import static com.android.providers.settings.SettingsState.isSecureSettingsKey;
-import static com.android.providers.settings.SettingsState.isSsaidSettingsKey;
import static com.android.providers.settings.SettingsState.isSystemSettingsKey;
import static com.android.providers.settings.SettingsState.makeKey;
@@ -412,6 +411,9 @@
SettingsState.cacheSystemPackageNamesAndSystemSignature(getContext());
synchronized (mLock) {
mSettingsRegistry.migrateAllLegacySettingsIfNeededLocked();
+ for (UserInfo user : mUserManager.getAliveUsers()) {
+ mSettingsRegistry.ensureSettingsForUserLocked(user.id);
+ }
mSettingsRegistry.syncSsaidTableOnStartLocked();
}
mHandler.post(() -> {
@@ -427,65 +429,53 @@
public Bundle call(String method, String name, Bundle args) {
final int requestingUserId = getRequestingUserId(args);
switch (method) {
- case Settings.CALL_METHOD_GET_CONFIG: {
+ case Settings.CALL_METHOD_GET_CONFIG -> {
Setting setting = getConfigSetting(name);
return packageValueForCallResult(SETTINGS_TYPE_CONFIG, name, requestingUserId,
setting, isTrackingGeneration(args));
}
-
- case Settings.CALL_METHOD_GET_GLOBAL: {
+ case Settings.CALL_METHOD_GET_GLOBAL -> {
Setting setting = getGlobalSetting(name);
return packageValueForCallResult(SETTINGS_TYPE_GLOBAL, name, requestingUserId,
setting, isTrackingGeneration(args));
}
-
- case Settings.CALL_METHOD_GET_SECURE: {
+ case Settings.CALL_METHOD_GET_SECURE -> {
Setting setting = getSecureSetting(name, requestingUserId);
return packageValueForCallResult(SETTINGS_TYPE_SECURE, name, requestingUserId,
setting, isTrackingGeneration(args));
}
-
- case Settings.CALL_METHOD_GET_SYSTEM: {
+ case Settings.CALL_METHOD_GET_SYSTEM -> {
Setting setting = getSystemSetting(name, requestingUserId);
return packageValueForCallResult(SETTINGS_TYPE_SYSTEM, name, requestingUserId,
setting, isTrackingGeneration(args));
}
-
- case Settings.CALL_METHOD_PUT_CONFIG: {
+ case Settings.CALL_METHOD_PUT_CONFIG -> {
String value = getSettingValue(args);
final boolean makeDefault = getSettingMakeDefault(args);
insertConfigSetting(name, value, makeDefault);
- break;
}
-
- case Settings.CALL_METHOD_PUT_GLOBAL: {
+ case Settings.CALL_METHOD_PUT_GLOBAL -> {
String value = getSettingValue(args);
String tag = getSettingTag(args);
final boolean makeDefault = getSettingMakeDefault(args);
final boolean overrideableByRestore = getSettingOverrideableByRestore(args);
insertGlobalSetting(name, value, tag, makeDefault, requestingUserId, false,
overrideableByRestore);
- break;
}
-
- case Settings.CALL_METHOD_PUT_SECURE: {
+ case Settings.CALL_METHOD_PUT_SECURE -> {
String value = getSettingValue(args);
String tag = getSettingTag(args);
final boolean makeDefault = getSettingMakeDefault(args);
final boolean overrideableByRestore = getSettingOverrideableByRestore(args);
insertSecureSetting(name, value, tag, makeDefault, requestingUserId, false,
overrideableByRestore);
- break;
}
-
- case Settings.CALL_METHOD_PUT_SYSTEM: {
+ case Settings.CALL_METHOD_PUT_SYSTEM -> {
String value = getSettingValue(args);
boolean overrideableByRestore = getSettingOverrideableByRestore(args);
insertSystemSetting(name, value, requestingUserId, overrideableByRestore);
- break;
}
-
- case Settings.CALL_METHOD_SET_ALL_CONFIG: {
+ case Settings.CALL_METHOD_SET_ALL_CONFIG -> {
String prefix = getSettingPrefix(args);
Map<String, String> flags = getSettingFlags(args);
Bundle result = new Bundle();
@@ -493,120 +483,96 @@
setAllConfigSettings(prefix, flags));
return result;
}
-
- case Settings.CALL_METHOD_SET_SYNC_DISABLED_MODE_CONFIG: {
+ case Settings.CALL_METHOD_SET_SYNC_DISABLED_MODE_CONFIG -> {
final int mode = getSyncDisabledMode(args);
setSyncDisabledModeConfig(mode);
- break;
}
-
- case Settings.CALL_METHOD_GET_SYNC_DISABLED_MODE_CONFIG: {
+ case Settings.CALL_METHOD_GET_SYNC_DISABLED_MODE_CONFIG -> {
Bundle result = new Bundle();
result.putInt(Settings.KEY_CONFIG_GET_SYNC_DISABLED_MODE_RETURN,
getSyncDisabledModeConfig());
return result;
}
-
- case Settings.CALL_METHOD_RESET_CONFIG: {
+ case Settings.CALL_METHOD_RESET_CONFIG -> {
final int mode = getResetModeEnforcingPermission(args);
String prefix = getSettingPrefix(args);
resetConfigSetting(mode, prefix);
- break;
}
-
- case Settings.CALL_METHOD_RESET_GLOBAL: {
+ case Settings.CALL_METHOD_RESET_GLOBAL -> {
final int mode = getResetModeEnforcingPermission(args);
String tag = getSettingTag(args);
resetGlobalSetting(requestingUserId, mode, tag);
- break;
}
-
- case Settings.CALL_METHOD_RESET_SECURE: {
+ case Settings.CALL_METHOD_RESET_SECURE -> {
final int mode = getResetModeEnforcingPermission(args);
String tag = getSettingTag(args);
resetSecureSetting(requestingUserId, mode, tag);
- break;
}
-
- case Settings.CALL_METHOD_RESET_SYSTEM: {
+ case Settings.CALL_METHOD_RESET_SYSTEM -> {
final int mode = getResetModeEnforcingPermission(args);
String tag = getSettingTag(args);
resetSystemSetting(requestingUserId, mode, tag);
- break;
}
-
- case Settings.CALL_METHOD_DELETE_CONFIG: {
- int rows = deleteConfigSetting(name) ? 1 : 0;
+ case Settings.CALL_METHOD_DELETE_CONFIG -> {
+ int rows = deleteConfigSetting(name) ? 1 : 0;
Bundle result = new Bundle();
result.putInt(RESULT_ROWS_DELETED, rows);
return result;
}
-
- case Settings.CALL_METHOD_DELETE_GLOBAL: {
+ case Settings.CALL_METHOD_DELETE_GLOBAL -> {
int rows = deleteGlobalSetting(name, requestingUserId, false) ? 1 : 0;
Bundle result = new Bundle();
result.putInt(RESULT_ROWS_DELETED, rows);
return result;
}
-
- case Settings.CALL_METHOD_DELETE_SECURE: {
+ case Settings.CALL_METHOD_DELETE_SECURE -> {
int rows = deleteSecureSetting(name, requestingUserId, false) ? 1 : 0;
Bundle result = new Bundle();
result.putInt(RESULT_ROWS_DELETED, rows);
return result;
}
-
- case Settings.CALL_METHOD_DELETE_SYSTEM: {
+ case Settings.CALL_METHOD_DELETE_SYSTEM -> {
int rows = deleteSystemSetting(name, requestingUserId) ? 1 : 0;
Bundle result = new Bundle();
result.putInt(RESULT_ROWS_DELETED, rows);
return result;
}
-
- case Settings.CALL_METHOD_LIST_CONFIG: {
+ case Settings.CALL_METHOD_LIST_CONFIG -> {
String prefix = getSettingPrefix(args);
Bundle result = packageValuesForCallResult(prefix, getAllConfigFlags(prefix),
isTrackingGeneration(args));
reportDeviceConfigAccess(prefix);
return result;
}
-
- case Settings.CALL_METHOD_REGISTER_MONITOR_CALLBACK_CONFIG: {
+ case Settings.CALL_METHOD_REGISTER_MONITOR_CALLBACK_CONFIG -> {
RemoteCallback callback = args.getParcelable(
Settings.CALL_METHOD_MONITOR_CALLBACK_KEY);
setMonitorCallback(callback);
- break;
}
-
- case Settings.CALL_METHOD_UNREGISTER_MONITOR_CALLBACK_CONFIG: {
+ case Settings.CALL_METHOD_UNREGISTER_MONITOR_CALLBACK_CONFIG -> {
clearMonitorCallback();
- break;
}
-
- case Settings.CALL_METHOD_LIST_GLOBAL: {
+ case Settings.CALL_METHOD_LIST_GLOBAL -> {
Bundle result = new Bundle();
result.putStringArrayList(RESULT_SETTINGS_LIST,
buildSettingsList(getAllGlobalSettings(null)));
return result;
}
-
- case Settings.CALL_METHOD_LIST_SECURE: {
+ case Settings.CALL_METHOD_LIST_SECURE -> {
Bundle result = new Bundle();
result.putStringArrayList(RESULT_SETTINGS_LIST,
buildSettingsList(getAllSecureSettings(requestingUserId, null)));
return result;
}
-
- case Settings.CALL_METHOD_LIST_SYSTEM: {
+ case Settings.CALL_METHOD_LIST_SYSTEM -> {
Bundle result = new Bundle();
result.putStringArrayList(RESULT_SETTINGS_LIST,
buildSettingsList(getAllSystemSettings(requestingUserId, null)));
return result;
}
-
- default: {
+ default -> {
Slog.w(LOG_TAG, "call() with invalid method: " + method);
- } break;
+ }
}
return null;
@@ -638,7 +604,7 @@
}
switch (args.table) {
- case TABLE_GLOBAL: {
+ case TABLE_GLOBAL -> {
if (args.name != null) {
Setting setting = getGlobalSetting(args.name);
return packageSettingForQuery(setting, normalizedProjection);
@@ -646,8 +612,7 @@
return getAllGlobalSettings(projection);
}
}
-
- case TABLE_SECURE: {
+ case TABLE_SECURE -> {
final int userId = UserHandle.getCallingUserId();
if (args.name != null) {
Setting setting = getSecureSetting(args.name, userId);
@@ -656,8 +621,7 @@
return getAllSecureSettings(userId, projection);
}
}
-
- case TABLE_SYSTEM: {
+ case TABLE_SYSTEM -> {
final int userId = UserHandle.getCallingUserId();
if (args.name != null) {
Setting setting = getSystemSetting(args.name, userId);
@@ -666,8 +630,7 @@
return getAllSystemSettings(userId, projection);
}
}
-
- default: {
+ default -> {
throw new IllegalArgumentException("Invalid Uri path:" + uri);
}
}
@@ -708,30 +671,27 @@
String value = values.getAsString(Settings.Secure.VALUE);
switch (table) {
- case TABLE_GLOBAL: {
+ case TABLE_GLOBAL -> {
if (insertGlobalSetting(name, value, null, false,
UserHandle.getCallingUserId(), false,
/* overrideableByRestore */ false)) {
- return Uri.withAppendedPath(Settings.Global.CONTENT_URI, name);
+ return Uri.withAppendedPath(Global.CONTENT_URI, name);
}
- } break;
-
- case TABLE_SECURE: {
+ }
+ case TABLE_SECURE -> {
if (insertSecureSetting(name, value, null, false,
UserHandle.getCallingUserId(), false,
/* overrideableByRestore */ false)) {
- return Uri.withAppendedPath(Settings.Secure.CONTENT_URI, name);
+ return Uri.withAppendedPath(Secure.CONTENT_URI, name);
}
- } break;
-
- case TABLE_SYSTEM: {
+ }
+ case TABLE_SYSTEM -> {
if (insertSystemSetting(name, value, UserHandle.getCallingUserId(),
/* overridableByRestore */ false)) {
return Uri.withAppendedPath(Settings.System.CONTENT_URI, name);
}
- } break;
-
- default: {
+ }
+ default -> {
throw new IllegalArgumentException("Bad Uri path:" + uri);
}
}
@@ -775,22 +735,19 @@
}
switch (args.table) {
- case TABLE_GLOBAL: {
+ case TABLE_GLOBAL -> {
final int userId = UserHandle.getCallingUserId();
return deleteGlobalSetting(args.name, userId, false) ? 1 : 0;
}
-
- case TABLE_SECURE: {
+ case TABLE_SECURE -> {
final int userId = UserHandle.getCallingUserId();
return deleteSecureSetting(args.name, userId, false) ? 1 : 0;
}
-
- case TABLE_SYSTEM: {
+ case TABLE_SYSTEM -> {
final int userId = UserHandle.getCallingUserId();
return deleteSystemSetting(args.name, userId) ? 1 : 0;
}
-
- default: {
+ default -> {
throw new IllegalArgumentException("Bad Uri path:" + uri);
}
}
@@ -816,24 +773,21 @@
String value = values.getAsString(Settings.Secure.VALUE);
switch (args.table) {
- case TABLE_GLOBAL: {
+ case TABLE_GLOBAL -> {
final int userId = UserHandle.getCallingUserId();
return updateGlobalSetting(args.name, value, null, false,
userId, false) ? 1 : 0;
}
-
- case TABLE_SECURE: {
+ case TABLE_SECURE -> {
final int userId = UserHandle.getCallingUserId();
return updateSecureSetting(args.name, value, null, false,
userId, false) ? 1 : 0;
}
-
- case TABLE_SYSTEM: {
+ case TABLE_SYSTEM -> {
final int userId = UserHandle.getCallingUserId();
return updateSystemSetting(args.name, value, userId) ? 1 : 0;
}
-
- default: {
+ default -> {
throw new IllegalArgumentException("Invalid Uri path:" + uri);
}
}
@@ -1034,27 +988,38 @@
private void registerBroadcastReceivers() {
IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(Intent.ACTION_USER_ADDED);
userFilter.addAction(Intent.ACTION_USER_REMOVED);
userFilter.addAction(Intent.ACTION_USER_STOPPED);
getContext().registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ if (intent.getAction() == null) {
+ return;
+ }
final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
- UserHandle.USER_SYSTEM);
+ UserHandle.USER_NULL);
+ if (userId == UserHandle.USER_NULL) {
+ return;
+ }
switch (intent.getAction()) {
- case Intent.ACTION_USER_REMOVED: {
+ case Intent.ACTION_USER_ADDED -> {
+ synchronized (mLock) {
+ mSettingsRegistry.ensureSettingsForUserLocked(userId);
+ }
+ }
+ case Intent.ACTION_USER_REMOVED -> {
synchronized (mLock) {
mSettingsRegistry.removeUserStateLocked(userId, true);
}
- } break;
-
- case Intent.ACTION_USER_STOPPED: {
+ }
+ case Intent.ACTION_USER_STOPPED -> {
synchronized (mLock) {
mSettingsRegistry.removeUserStateLocked(userId, false);
}
- } break;
+ }
}
}
}, userFilter);
@@ -1350,26 +1315,24 @@
// Perform the mutation.
synchronized (mLock) {
switch (operation) {
- case MUTATION_OPERATION_INSERT: {
+ case MUTATION_OPERATION_INSERT -> {
enforceDeviceConfigWritePermission(getContext(), Collections.singleton(name));
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_CONFIG,
UserHandle.USER_SYSTEM, name, value, null, makeDefault, true,
callingPackage, false, null,
/* overrideableByRestore */ false);
}
-
- case MUTATION_OPERATION_DELETE: {
+ case MUTATION_OPERATION_DELETE -> {
enforceDeviceConfigWritePermission(getContext(), Collections.singleton(name));
return mSettingsRegistry.deleteSettingLocked(SETTINGS_TYPE_CONFIG,
UserHandle.USER_SYSTEM, name, false, null);
}
-
- case MUTATION_OPERATION_RESET: {
+ case MUTATION_OPERATION_RESET -> {
enforceDeviceConfigWritePermission(getContext(),
getAllConfigFlags(prefix).keySet());
- mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_CONFIG,
+ return mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_CONFIG,
UserHandle.USER_SYSTEM, callingPackage, mode, null, prefix);
- } return true;
+ }
}
}
@@ -1523,7 +1486,7 @@
enforceHasAtLeastOnePermission(Manifest.permission.WRITE_SECURE_SETTINGS);
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(requestingUserId);
// If this is a setting that is currently restricted for this user, do not allow
// unrestricting changes.
@@ -1536,28 +1499,25 @@
// Perform the mutation.
synchronized (mLock) {
switch (operation) {
- case MUTATION_OPERATION_INSERT: {
+ case MUTATION_OPERATION_INSERT -> {
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_GLOBAL,
UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
callingPackage, forceNotify,
CRITICAL_GLOBAL_SETTINGS, overrideableByRestore);
}
-
- case MUTATION_OPERATION_DELETE: {
+ case MUTATION_OPERATION_DELETE -> {
return mSettingsRegistry.deleteSettingLocked(SETTINGS_TYPE_GLOBAL,
UserHandle.USER_SYSTEM, name, forceNotify, CRITICAL_GLOBAL_SETTINGS);
}
-
- case MUTATION_OPERATION_UPDATE: {
+ case MUTATION_OPERATION_UPDATE -> {
return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_GLOBAL,
UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
callingPackage, forceNotify, CRITICAL_GLOBAL_SETTINGS);
}
-
- case MUTATION_OPERATION_RESET: {
- mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_GLOBAL,
+ case MUTATION_OPERATION_RESET -> {
+ return mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_GLOBAL,
UserHandle.USER_SYSTEM, callingPackage, mode, tag);
- } return true;
+ }
}
}
@@ -1580,12 +1540,12 @@
}
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(userId);
// The relevant "calling package" userId will be the owning userId for some
// profiles, and we can't do the lookup inside our [lock held] loop, so work out
// up front who the effective "new SSAID" user ID for that settings name will be.
- final int ssaidUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId,
+ final int ssaidUserId = resolveOwningUserIdForSecureSetting(callingUserId,
Settings.Secure.ANDROID_ID);
final PackageInfo ssaidCallingPkg = getCallingPackageInfo(ssaidUserId);
@@ -1600,7 +1560,7 @@
for (int i = 0; i < nameCount; i++) {
String name = names.get(i);
// Determine the owning user as some profile settings are cloned from the parent.
- final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId,
+ final int owningUserId = resolveOwningUserIdForSecureSetting(callingUserId,
name);
if (!isSecureSettingAccessible(name)) {
@@ -1638,13 +1598,13 @@
}
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(requestingUserId);
// Ensure the caller can access the setting.
enforceSettingReadable(name, SETTINGS_TYPE_SECURE, UserHandle.getCallingUserId());
// Determine the owning user as some profile settings are cloned from the parent.
- final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name);
+ final int owningUserId = resolveOwningUserIdForSecureSetting(callingUserId, name);
if (!isSecureSettingAccessible(name)) {
// This caller is not permitted to access this setting. Pretend the setting doesn't
@@ -1811,7 +1771,7 @@
enforceHasAtLeastOnePermission(Manifest.permission.WRITE_SECURE_SETTINGS);
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(requestingUserId);
// If this is a setting that is currently restricted for this user, do not allow
// unrestricting changes.
@@ -1820,7 +1780,7 @@
}
// Determine the owning user as some profile settings are cloned from the parent.
- final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name);
+ final int owningUserId = resolveOwningUserIdForSecureSetting(callingUserId, name);
// Only the owning user can change the setting.
if (owningUserId != callingUserId) {
@@ -1832,28 +1792,25 @@
// Mutate the value.
synchronized (mLock) {
switch (operation) {
- case MUTATION_OPERATION_INSERT: {
+ case MUTATION_OPERATION_INSERT -> {
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_SECURE,
owningUserId, name, value, tag, makeDefault,
callingPackage, forceNotify, CRITICAL_SECURE_SETTINGS,
overrideableByRestore);
}
-
- case MUTATION_OPERATION_DELETE: {
+ case MUTATION_OPERATION_DELETE -> {
return mSettingsRegistry.deleteSettingLocked(SETTINGS_TYPE_SECURE,
owningUserId, name, forceNotify, CRITICAL_SECURE_SETTINGS);
}
-
- case MUTATION_OPERATION_UPDATE: {
+ case MUTATION_OPERATION_UPDATE -> {
return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_SECURE,
owningUserId, name, value, tag, makeDefault,
callingPackage, forceNotify, CRITICAL_SECURE_SETTINGS);
}
-
- case MUTATION_OPERATION_RESET: {
- mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_SECURE,
+ case MUTATION_OPERATION_RESET -> {
+ return mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_SECURE,
UserHandle.USER_SYSTEM, callingPackage, mode, tag);
- } return true;
+ }
}
}
@@ -1866,7 +1823,7 @@
}
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(userId);
synchronized (mLock) {
List<String> names = getSettingsNamesLocked(SETTINGS_TYPE_SYSTEM, callingUserId);
@@ -1903,7 +1860,7 @@
}
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(requestingUserId);
// Ensure the caller can access the setting.
enforceSettingReadable(name, SETTINGS_TYPE_SYSTEM, UserHandle.getCallingUserId());
@@ -1978,7 +1935,7 @@
}
// Resolve the userId on whose behalf the call is made.
- final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(runAsUserId);
+ final int callingUserId = resolveCallingUserIdEnforcingPermissions(runAsUserId);
if (isSettingRestrictedForUser(name, callingUserId, value, Binder.getCallingUid())) {
Slog.e(LOG_TAG, "UserId: " + callingUserId + " is disallowed to change system "
@@ -2012,37 +1969,30 @@
// Mutate the value.
synchronized (mLock) {
switch (operation) {
- case MUTATION_OPERATION_INSERT: {
+ case MUTATION_OPERATION_INSERT -> {
validateSystemSettingValue(name, value);
success = mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_SYSTEM,
owningUserId, name, value, null, false, callingPackage,
false, null, overrideableByRestore);
- break;
}
-
- case MUTATION_OPERATION_DELETE: {
+ case MUTATION_OPERATION_DELETE -> {
success = mSettingsRegistry.deleteSettingLocked(SETTINGS_TYPE_SYSTEM,
owningUserId, name, false, null);
- break;
}
-
- case MUTATION_OPERATION_UPDATE: {
+ case MUTATION_OPERATION_UPDATE -> {
validateSystemSettingValue(name, value);
success = mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_SYSTEM,
owningUserId, name, value, null, false, callingPackage,
false, null);
- break;
}
-
- case MUTATION_OPERATION_RESET: {
+ case MUTATION_OPERATION_RESET -> {
success = mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_SYSTEM,
runAsUserId, callingPackage, mode, tag);
- break;
}
-
- default:
+ default -> {
success = false;
Slog.e(LOG_TAG, "Unknown operation code: " + operation);
+ }
}
}
@@ -2113,8 +2063,8 @@
* Returns {@code true} if the specified secure setting should be accessible to the caller.
*/
private boolean isSecureSettingAccessible(String name) {
- switch (name) {
- case "bluetooth_address":
+ return switch (name) {
+ case "bluetooth_address" ->
// BluetoothManagerService for some reason stores the Android's Bluetooth MAC
// address in this secure setting. Secure settings can normally be read by any app,
// which thus enables them to bypass the recently introduced restrictions on access
@@ -2122,22 +2072,23 @@
// To mitigate this we make this setting available only to callers privileged to see
// this device's MAC addresses, same as through public API
// BluetoothAdapter.getAddress() (see BluetoothManagerService for details).
- return getContext().checkCallingOrSelfPermission(
- Manifest.permission.LOCAL_MAC_ADDRESS) == PackageManager.PERMISSION_GRANTED;
- default:
- return true;
- }
+ getContext().checkCallingOrSelfPermission(Manifest.permission.LOCAL_MAC_ADDRESS)
+ == PackageManager.PERMISSION_GRANTED;
+ default -> true;
+ };
}
- private int resolveOwningUserIdForSecureSettingLocked(int userId, String setting) {
- return resolveOwningUserIdLocked(userId, sSecureCloneToManagedSettings, setting);
+ private int resolveOwningUserIdForSecureSetting(int userId, String setting) {
+ // no need to lock because sSecureCloneToManagedSettings is never modified
+ return resolveOwningUserId(userId, sSecureCloneToManagedSettings, setting);
}
+ @GuardedBy("mLock")
private int resolveOwningUserIdForSystemSettingLocked(int userId, String setting) {
final int parentId;
// Resolves dependency if setting has a dependency and the calling user has a parent
if (sSystemCloneFromParentOnDependency.containsKey(setting)
- && (parentId = getGroupParentLocked(userId)) != userId) {
+ && (parentId = getGroupParent(userId)) != userId) {
// The setting has a dependency and the profile has a parent
String dependency = sSystemCloneFromParentOnDependency.get(setting);
// Lookup the dependency setting as ourselves, some callers may not have access to it.
@@ -2151,11 +2102,11 @@
Binder.restoreCallingIdentity(token);
}
}
- return resolveOwningUserIdLocked(userId, sSystemCloneToManagedSettings, setting);
+ return resolveOwningUserId(userId, sSystemCloneToManagedSettings, setting);
}
- private int resolveOwningUserIdLocked(int userId, Set<String> keys, String name) {
- final int parentId = getGroupParentLocked(userId);
+ private int resolveOwningUserId(int userId, Set<String> keys, String name) {
+ final int parentId = getGroupParent(userId);
if (parentId != userId && keys.contains(name)) {
return parentId;
}
@@ -2174,9 +2125,8 @@
}
switch (operation) {
- case MUTATION_OPERATION_INSERT:
- // Insert updates.
- case MUTATION_OPERATION_UPDATE: {
+ // Insert updates.
+ case MUTATION_OPERATION_INSERT, MUTATION_OPERATION_UPDATE -> {
if (Settings.System.PUBLIC_SETTINGS.contains(name)) {
return;
}
@@ -2192,9 +2142,8 @@
warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk(
packageInfo.applicationInfo.targetSdkVersion, name);
- } break;
-
- case MUTATION_OPERATION_DELETE: {
+ }
+ case MUTATION_OPERATION_DELETE -> {
if (Settings.System.PUBLIC_SETTINGS.contains(name)
|| Settings.System.PRIVATE_SETTINGS.contains(name)) {
throw new IllegalArgumentException("You cannot delete system defined"
@@ -2212,34 +2161,26 @@
warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk(
packageInfo.applicationInfo.targetSdkVersion, name);
- } break;
+ }
}
}
- private Set<String> getInstantAppAccessibleSettings(int settingsType) {
- switch (settingsType) {
- case SETTINGS_TYPE_GLOBAL:
- return Settings.Global.INSTANT_APP_SETTINGS;
- case SETTINGS_TYPE_SECURE:
- return Settings.Secure.INSTANT_APP_SETTINGS;
- case SETTINGS_TYPE_SYSTEM:
- return Settings.System.INSTANT_APP_SETTINGS;
- default:
- throw new IllegalArgumentException("Invalid settings type: " + settingsType);
- }
+ private static Set<String> getInstantAppAccessibleSettings(int settingsType) {
+ return switch (settingsType) {
+ case SETTINGS_TYPE_GLOBAL -> Global.INSTANT_APP_SETTINGS;
+ case SETTINGS_TYPE_SECURE -> Secure.INSTANT_APP_SETTINGS;
+ case SETTINGS_TYPE_SYSTEM -> Settings.System.INSTANT_APP_SETTINGS;
+ default -> throw new IllegalArgumentException("Invalid settings type: " + settingsType);
+ };
}
- private Set<String> getOverlayInstantAppAccessibleSettings(int settingsType) {
- switch (settingsType) {
- case SETTINGS_TYPE_GLOBAL:
- return OVERLAY_ALLOWED_GLOBAL_INSTANT_APP_SETTINGS;
- case SETTINGS_TYPE_SYSTEM:
- return OVERLAY_ALLOWED_SYSTEM_INSTANT_APP_SETTINGS;
- case SETTINGS_TYPE_SECURE:
- return OVERLAY_ALLOWED_SECURE_INSTANT_APP_SETTINGS;
- default:
- throw new IllegalArgumentException("Invalid settings type: " + settingsType);
- }
+ private static Set<String> getOverlayInstantAppAccessibleSettings(int settingsType) {
+ return switch (settingsType) {
+ case SETTINGS_TYPE_GLOBAL -> OVERLAY_ALLOWED_GLOBAL_INSTANT_APP_SETTINGS;
+ case SETTINGS_TYPE_SYSTEM -> OVERLAY_ALLOWED_SYSTEM_INSTANT_APP_SETTINGS;
+ case SETTINGS_TYPE_SECURE -> OVERLAY_ALLOWED_SECURE_INSTANT_APP_SETTINGS;
+ default -> throw new IllegalArgumentException("Invalid settings type: " + settingsType);
+ };
}
@GuardedBy("mLock")
@@ -2270,7 +2211,7 @@
switch (settingName) {
// missing READ_PRIVILEGED_PHONE_STATE permission protection
// see alternative API {@link SubscriptionManager#getPreferredDataSubscriptionId()
- case Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION:
+ case Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION -> {
// app-compat handling, not break apps targeting on previous SDKs.
if (CompatChanges.isChangeEnabled(
ENFORCE_READ_PERMISSION_FOR_MULTI_SIM_DATA_CALL)) {
@@ -2278,7 +2219,7 @@
Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
"access global settings MULTI_SIM_DATA_CALL_SUBSCRIPTION");
}
- break;
+ }
}
if (!ai.isInstantApp()) {
return;
@@ -2306,23 +2247,22 @@
final Set<String> readableFields;
final ArrayMap<String, Integer> readableFieldsWithMaxTargetSdk;
switch (settingsType) {
- case SETTINGS_TYPE_GLOBAL:
+ case SETTINGS_TYPE_GLOBAL -> {
allFields = sAllGlobalSettings;
readableFields = sReadableGlobalSettings;
readableFieldsWithMaxTargetSdk = sReadableGlobalSettingsWithMaxTargetSdk;
- break;
- case SETTINGS_TYPE_SYSTEM:
+ }
+ case SETTINGS_TYPE_SYSTEM -> {
allFields = sAllSystemSettings;
readableFields = sReadableSystemSettings;
readableFieldsWithMaxTargetSdk = sReadableSystemSettingsWithMaxTargetSdk;
- break;
- case SETTINGS_TYPE_SECURE:
+ }
+ case SETTINGS_TYPE_SECURE -> {
allFields = sAllSecureSettings;
readableFields = sReadableSecureSettings;
readableFieldsWithMaxTargetSdk = sReadableSecureSettingsWithMaxTargetSdk;
- break;
- default:
- throw new IllegalArgumentException("Invalid settings type: " + settingsType);
+ }
+ default -> throw new IllegalArgumentException("Invalid settings type: " + settingsType);
}
if (allFields.contains(settingName)) {
@@ -2380,7 +2320,7 @@
throw new IllegalStateException("Calling package doesn't exist");
}
- private int getGroupParentLocked(int userId) {
+ private int getGroupParent(int userId) {
// Most frequent use case.
if (userId == UserHandle.USER_SYSTEM) {
return userId;
@@ -2480,7 +2420,7 @@
}
}
- private static int resolveCallingUserIdEnforcingPermissionsLocked(int requestingUserId) {
+ private static int resolveCallingUserIdEnforcingPermissions(int requestingUserId) {
if (requestingUserId == UserHandle.getCallingUserId()) {
return requestingUserId;
}
@@ -2654,28 +2594,28 @@
private static int getResetModeEnforcingPermission(Bundle args) {
final int mode = (args != null) ? args.getInt(Settings.CALL_METHOD_RESET_MODE_KEY) : 0;
switch (mode) {
- case Settings.RESET_MODE_UNTRUSTED_DEFAULTS: {
+ case Settings.RESET_MODE_UNTRUSTED_DEFAULTS -> {
if (!isCallerSystemOrShellOrRootOnDebuggableBuild()) {
throw new SecurityException("Only system, shell/root on a "
+ "debuggable build can reset to untrusted defaults");
}
return mode;
}
- case Settings.RESET_MODE_UNTRUSTED_CHANGES: {
+ case Settings.RESET_MODE_UNTRUSTED_CHANGES -> {
if (!isCallerSystemOrShellOrRootOnDebuggableBuild()) {
throw new SecurityException("Only system, shell/root on a "
+ "debuggable build can reset untrusted changes");
}
return mode;
}
- case Settings.RESET_MODE_TRUSTED_DEFAULTS: {
+ case Settings.RESET_MODE_TRUSTED_DEFAULTS -> {
if (!isCallerSystemOrShellOrRootOnDebuggableBuild()) {
throw new SecurityException("Only system, shell/root on a "
+ "debuggable build can reset to trusted defaults");
}
return mode;
}
- case Settings.RESET_MODE_PACKAGE_DEFAULTS: {
+ case Settings.RESET_MODE_PACKAGE_DEFAULTS -> {
return mode;
}
}
@@ -2736,21 +2676,18 @@
String column = cursor.getColumnName(i);
switch (column) {
- case Settings.NameValueTable._ID: {
+ case Settings.NameValueTable._ID -> {
values[i] = setting.getId();
- } break;
-
- case Settings.NameValueTable.NAME: {
+ }
+ case Settings.NameValueTable.NAME -> {
values[i] = setting.getName();
- } break;
-
- case Settings.NameValueTable.VALUE: {
+ }
+ case Settings.NameValueTable.VALUE -> {
values[i] = setting.getValue();
- } break;
-
- case Settings.NameValueTable.IS_PRESERVED_IN_RESTORE: {
+ }
+ case Settings.NameValueTable.IS_PRESERVED_IN_RESTORE -> {
values[i] = String.valueOf(setting.isValuePreservedInRestore());
- } break;
+ }
}
}
@@ -2762,19 +2699,11 @@
}
private String resolveCallingPackage() {
- switch (Binder.getCallingUid()) {
- case Process.ROOT_UID: {
- return "root";
- }
-
- case Process.SHELL_UID: {
- return "com.android.shell";
- }
-
- default: {
- return getCallingPackage();
- }
- }
+ return switch (Binder.getCallingUid()) {
+ case Process.ROOT_UID -> "root";
+ case Process.SHELL_UID -> "com.android.shell";
+ default -> getCallingPackage();
+ };
}
private static final class Arguments {
@@ -2796,17 +2725,17 @@
public Arguments(Uri uri, String where, String[] whereArgs, boolean supportAll) {
final int segmentSize = uri.getPathSegments().size();
switch (segmentSize) {
- case 1: {
+ case 1 -> {
if (where != null
&& (WHERE_PATTERN_WITH_PARAM_NO_BRACKETS.matcher(where).matches()
- || WHERE_PATTERN_WITH_PARAM_IN_BRACKETS.matcher(where).matches())
+ || WHERE_PATTERN_WITH_PARAM_IN_BRACKETS.matcher(where).matches())
&& whereArgs.length == 1) {
name = whereArgs[0];
table = computeTableForSetting(uri, name);
return;
} else if (where != null
&& (WHERE_PATTERN_NO_PARAM_NO_BRACKETS.matcher(where).matches()
- || WHERE_PATTERN_NO_PARAM_IN_BRACKETS.matcher(where).matches())) {
+ || WHERE_PATTERN_NO_PARAM_IN_BRACKETS.matcher(where).matches())) {
final int startIndex = Math.max(where.indexOf("'"),
where.indexOf("\"")) + 1;
final int endIndex = Math.max(where.lastIndexOf("'"),
@@ -2819,15 +2748,14 @@
table = computeTableForSetting(uri, null);
return;
}
- } break;
-
- case 2: {
+ }
+ case 2 -> {
if (where == null && whereArgs == null) {
name = uri.getPathSegments().get(1);
table = computeTableForSetting(uri, name);
return;
}
- } break;
+ }
}
EventLogTags.writeUnsupportedSettingsQuery(
@@ -2960,6 +2888,7 @@
mBackupManager = new BackupManager(getContext());
}
+ @GuardedBy("mLock")
private void generateUserKeyLocked(int userId) {
// Generate a random key for each user used for creating a new ssaid.
final byte[] keyBytes = new byte[32];
@@ -2983,6 +2912,7 @@
return ByteBuffer.allocate(4).putInt(data.length).array();
}
+ @GuardedBy("mLock")
public Setting generateSsaidLocked(PackageInfo callingPkg, int userId) {
// Read the user's key from the ssaid table.
Setting userKeySetting = getSettingLocked(SETTINGS_TYPE_SSAID, userId, SSAID_USER_KEY);
@@ -3044,6 +2974,7 @@
return getSettingLocked(SETTINGS_TYPE_SSAID, userId, uid);
}
+ @GuardedBy("mLock")
private void syncSsaidTableOnStartLocked() {
// Verify that each user's packages and ssaid's are in sync.
for (UserInfo user : mUserManager.getAliveUsers()) {
@@ -3078,15 +3009,17 @@
}
}
+ @GuardedBy("mLock")
public List<String> getSettingsNamesLocked(int type, int userId) {
final int key = makeKey(type, userId);
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState == null) {
return new ArrayList<>();
}
return settingsState.getSettingNamesLocked();
}
+ @GuardedBy("mLock")
public SparseBooleanArray getKnownUsersLocked() {
SparseBooleanArray users = new SparseBooleanArray();
for (int i = mSettingsStates.size()-1; i >= 0; i--) {
@@ -3095,17 +3028,19 @@
return users;
}
+ @GuardedBy("mLock")
@Nullable
public SettingsState getSettingsLocked(int type, int userId) {
final int key = makeKey(type, userId);
- return peekSettingsStateLocked(key);
+ return mSettingsStates.get(key);
}
- public boolean ensureSettingsForUserLocked(int userId) {
+ @GuardedBy("mLock")
+ public void 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 false;
+ return;
}
// Migrate the setting for this user if needed.
@@ -3143,9 +3078,9 @@
// Upgrade the settings to the latest version.
UpgradeController upgrader = new UpgradeController(userId);
upgrader.upgradeIfNeededLocked();
- return true;
}
+ @GuardedBy("mLock")
private void ensureSettingsStateLocked(int key) {
if (mSettingsStates.get(key) == null) {
final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key));
@@ -3155,6 +3090,7 @@
}
}
+ @GuardedBy("mLock")
public void removeUserStateLocked(int userId, boolean permanently) {
// We always keep the global settings in memory.
@@ -3166,12 +3102,7 @@
mSettingsStates.remove(systemKey);
systemSettingsState.destroyLocked(null);
} else {
- systemSettingsState.destroyLocked(new Runnable() {
- @Override
- public void run() {
- mSettingsStates.remove(systemKey);
- }
- });
+ systemSettingsState.destroyLocked(() -> mSettingsStates.remove(systemKey));
}
}
@@ -3183,12 +3114,7 @@
mSettingsStates.remove(secureKey);
secureSettingsState.destroyLocked(null);
} else {
- secureSettingsState.destroyLocked(new Runnable() {
- @Override
- public void run() {
- mSettingsStates.remove(secureKey);
- }
- });
+ secureSettingsState.destroyLocked(() -> mSettingsStates.remove(secureKey));
}
}
@@ -3200,12 +3126,7 @@
mSettingsStates.remove(ssaidKey);
ssaidSettingsState.destroyLocked(null);
} else {
- ssaidSettingsState.destroyLocked(new Runnable() {
- @Override
- public void run() {
- mSettingsStates.remove(ssaidKey);
- }
- });
+ ssaidSettingsState.destroyLocked(() -> mSettingsStates.remove(ssaidKey));
}
}
@@ -3213,6 +3134,7 @@
mGenerationRegistry.onUserRemoved(userId);
}
+ @GuardedBy("mLock")
public boolean insertSettingLocked(int type, int userId, String name, String value,
String tag, boolean makeDefault, String packageName, boolean forceNotify,
Set<String> criticalSettings, boolean overrideableByRestore) {
@@ -3220,6 +3142,7 @@
packageName, forceNotify, criticalSettings, overrideableByRestore);
}
+ @GuardedBy("mLock")
public boolean insertSettingLocked(int type, int userId, String name, String value,
String tag, boolean makeDefault, boolean forceNonSystemPackage, String packageName,
boolean forceNotify, Set<String> criticalSettings, boolean overrideableByRestore) {
@@ -3232,7 +3155,7 @@
boolean success = false;
boolean wasUnsetNonPredefinedSetting = false;
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState != null) {
if (!isSettingPreDefined(name, type) && !settingsState.hasSetting(name)) {
wasUnsetNonPredefinedSetting = true;
@@ -3264,9 +3187,10 @@
* Set Config Settings using consumed keyValues, returns true if the keyValues can be set,
* false otherwise.
*/
+ @GuardedBy("mLock")
public boolean setConfigSettingsLocked(int key, String prefix,
Map<String, String> keyValues, String packageName) {
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState != null) {
if (settingsState.isNewConfigBannedLocked(prefix, keyValues)) {
return false;
@@ -3283,12 +3207,13 @@
return true;
}
+ @GuardedBy("mLock")
public boolean deleteSettingLocked(int type, int userId, String name, boolean forceNotify,
Set<String> criticalSettings) {
final int key = makeKey(type, userId);
boolean success = false;
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState != null) {
success = settingsState.deleteSettingLocked(name);
}
@@ -3306,13 +3231,14 @@
return success;
}
+ @GuardedBy("mLock")
public boolean updateSettingLocked(int type, int userId, String name, String value,
String tag, boolean makeDefault, String packageName, boolean forceNotify,
Set<String> criticalSettings) {
final int key = makeKey(type, userId);
boolean success = false;
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState != null) {
success = settingsState.updateSettingLocked(name, value, tag,
makeDefault, packageName);
@@ -3331,10 +3257,11 @@
return success;
}
+ @GuardedBy("mLock")
public Setting getSettingLocked(int type, int userId, String name) {
final int key = makeKey(type, userId);
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState == null) {
return null;
}
@@ -3352,16 +3279,18 @@
return Global.SECURE_FRP_MODE.equals(setting.getName());
}
+ @GuardedBy("mLock")
public boolean resetSettingsLocked(int type, int userId, String packageName, int mode,
String tag) {
return resetSettingsLocked(type, userId, packageName, mode, tag, /*prefix=*/
null);
}
+ @GuardedBy("mLock")
public boolean resetSettingsLocked(int type, int userId, String packageName, int mode,
String tag, @Nullable String prefix) {
final int key = makeKey(type, userId);
- SettingsState settingsState = peekSettingsStateLocked(key);
+ SettingsState settingsState = mSettingsStates.get(key);
if (settingsState == null) {
return false;
}
@@ -3369,7 +3298,7 @@
boolean success = false;
banConfigurationIfNecessary(type, prefix, settingsState);
switch (mode) {
- case Settings.RESET_MODE_PACKAGE_DEFAULTS: {
+ case Settings.RESET_MODE_PACKAGE_DEFAULTS -> {
for (String name : settingsState.getSettingNamesLocked()) {
boolean someSettingChanged = false;
Setting setting = settingsState.getSettingLocked(name);
@@ -3389,9 +3318,8 @@
success = true;
}
}
- } break;
-
- case Settings.RESET_MODE_UNTRUSTED_DEFAULTS: {
+ }
+ case Settings.RESET_MODE_UNTRUSTED_DEFAULTS -> {
for (String name : settingsState.getSettingNamesLocked()) {
boolean someSettingChanged = false;
Setting setting = settingsState.getSettingLocked(name);
@@ -3411,9 +3339,8 @@
success = true;
}
}
- } break;
-
- case Settings.RESET_MODE_UNTRUSTED_CHANGES: {
+ }
+ case Settings.RESET_MODE_UNTRUSTED_CHANGES -> {
for (String name : settingsState.getSettingNamesLocked()) {
boolean someSettingChanged = false;
Setting setting = settingsState.getSettingLocked(name);
@@ -3439,9 +3366,8 @@
success = true;
}
}
- } break;
-
- case Settings.RESET_MODE_TRUSTED_DEFAULTS: {
+ }
+ case Settings.RESET_MODE_TRUSTED_DEFAULTS -> {
for (String name : settingsState.getSettingNamesLocked()) {
Setting setting = settingsState.getSettingLocked(name);
boolean someSettingChanged = false;
@@ -3464,11 +3390,12 @@
success = true;
}
}
- } break;
+ }
}
return success;
}
+ @GuardedBy("mLock")
public void removeSettingsForPackageLocked(String packageName, int userId) {
// Global and secure settings are signature protected. Apps signed
// by the platform certificate are generally not uninstalled and
@@ -3482,6 +3409,7 @@
}
}
+ @GuardedBy("mLock")
public void onUidRemovedLocked(int uid) {
final SettingsState ssaidSettings = getSettingsLocked(SETTINGS_TYPE_SSAID,
UserHandle.getUserId(uid));
@@ -3490,19 +3418,7 @@
}
}
- @Nullable
- private SettingsState peekSettingsStateLocked(int key) {
- SettingsState settingsState = mSettingsStates.get(key);
- if (settingsState != null) {
- return settingsState;
- }
-
- if (!ensureSettingsForUserLocked(getUserIdFromKey(key))) {
- return null;
- }
- return mSettingsStates.get(key);
- }
-
+ @GuardedBy("mLock")
private void migrateAllLegacySettingsIfNeededLocked() {
final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
File globalFile = getSettingsFile(key);
@@ -3538,6 +3454,7 @@
}
}
+ @GuardedBy("mLock")
private void migrateLegacySettingsForUserIfNeededLocked(int userId) {
// Every user has secure settings and if no file we need to migrate.
final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId);
@@ -3552,6 +3469,7 @@
migrateLegacySettingsForUserLocked(dbHelper, database, userId);
}
+ @GuardedBy("mLock")
private void migrateLegacySettingsForUserLocked(DatabaseHelper dbHelper,
SQLiteDatabase database, int userId) {
// Move over the system settings.
@@ -3596,6 +3514,7 @@
}
}
+ @GuardedBy("mLock")
private void migrateLegacySettingsLocked(SettingsState settingsState,
SQLiteDatabase database, String table) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
@@ -3630,7 +3549,7 @@
}
}
- @GuardedBy("secureSettings.mLock")
+ @GuardedBy("mLock")
private void ensureSecureSettingAndroidIdSetLocked(SettingsState secureSettings) {
Setting value = secureSettings.getSettingLocked(Settings.Secure.ANDROID_ID);
@@ -3706,6 +3625,7 @@
name, type, changeType);
}
+ @GuardedBy("mLock")
private void notifyForConfigSettingsChangeLocked(int key, String prefix,
List<String> changedSettings) {
@@ -3787,30 +3707,18 @@
}
}
- private File getSettingsFile(int key) {
- if (isConfigSettingsKey(key)) {
- final int userId = getUserIdFromKey(key);
- return new File(Environment.getUserSystemDirectory(userId),
- SETTINGS_FILE_CONFIG);
- } else if (isGlobalSettingsKey(key)) {
- final int userId = getUserIdFromKey(key);
- return new File(Environment.getUserSystemDirectory(userId),
- SETTINGS_FILE_GLOBAL);
- } else if (isSystemSettingsKey(key)) {
- final int userId = getUserIdFromKey(key);
- return new File(Environment.getUserSystemDirectory(userId),
- SETTINGS_FILE_SYSTEM);
- } else if (isSecureSettingsKey(key)) {
- final int userId = getUserIdFromKey(key);
- return new File(Environment.getUserSystemDirectory(userId),
- SETTINGS_FILE_SECURE);
- } else if (isSsaidSettingsKey(key)) {
- final int userId = getUserIdFromKey(key);
- return new File(Environment.getUserSystemDirectory(userId),
- SETTINGS_FILE_SSAID);
- } else {
- throw new IllegalArgumentException("Invalid settings key:" + key);
- }
+ private static File getSettingsFile(int key) {
+ final int userId = getUserIdFromKey(key);
+ final int type = getTypeFromKey(key);
+ final File userSystemDirectory = Environment.getUserSystemDirectory(userId);
+ return switch (type) {
+ case SETTINGS_TYPE_CONFIG -> new File(userSystemDirectory, SETTINGS_FILE_CONFIG);
+ case SETTINGS_TYPE_GLOBAL -> new File(userSystemDirectory, SETTINGS_FILE_GLOBAL);
+ case SETTINGS_TYPE_SYSTEM -> new File(userSystemDirectory, SETTINGS_FILE_SYSTEM);
+ case SETTINGS_TYPE_SECURE -> new File(userSystemDirectory, SETTINGS_FILE_SECURE);
+ case SETTINGS_TYPE_SSAID -> new File(userSystemDirectory, SETTINGS_FILE_SSAID);
+ default -> throw new IllegalArgumentException("Invalid settings key:" + key);
+ };
}
private Uri getNotificationUriFor(int key, String name) {
@@ -3833,14 +3741,11 @@
private int getMaxBytesPerPackageForType(int type) {
switch (type) {
- case SETTINGS_TYPE_CONFIG:
- case SETTINGS_TYPE_GLOBAL:
- case SETTINGS_TYPE_SECURE:
- case SETTINGS_TYPE_SSAID: {
+ case SETTINGS_TYPE_CONFIG, SETTINGS_TYPE_GLOBAL, SETTINGS_TYPE_SECURE,
+ SETTINGS_TYPE_SSAID -> {
return SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED;
}
-
- default: {
+ default -> {
return SettingsState.MAX_BYTES_PER_APP_PACKAGE_LIMITED;
}
}
@@ -3857,7 +3762,7 @@
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case MSG_NOTIFY_URI_CHANGED: {
+ case MSG_NOTIFY_URI_CHANGED -> {
final int userId = msg.arg1;
Uri uri = (Uri) msg.obj;
try {
@@ -3868,12 +3773,11 @@
if (DEBUG) {
Slog.v(LOG_TAG, "Notifying for " + userId + ": " + uri);
}
- } break;
-
- case MSG_NOTIFY_DATA_CHANGED: {
+ }
+ case MSG_NOTIFY_DATA_CHANGED -> {
mBackupManager.dataChanged();
scheduleWriteFallbackFilesJob();
- } break;
+ }
}
}
}
@@ -3887,6 +3791,7 @@
mUserId = userId;
}
+ @GuardedBy("mLock")
public void upgradeIfNeededLocked() {
// The version of all settings for a user is the same (all users have secure).
SettingsState secureSettings = getSettingsLocked(
@@ -3944,18 +3849,22 @@
systemSettings.setVersionLocked(newVersion);
}
+ @GuardedBy("mLock")
private SettingsState getGlobalSettingsLocked() {
return getSettingsLocked(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
}
+ @GuardedBy("mLock")
private SettingsState getSecureSettingsLocked(int userId) {
return getSettingsLocked(SETTINGS_TYPE_SECURE, userId);
}
+ @GuardedBy("mLock")
private SettingsState getSsaidSettingsLocked(int userId) {
return getSettingsLocked(SETTINGS_TYPE_SSAID, userId);
}
+ @GuardedBy("mLock")
private SettingsState getSystemSettingsLocked(int userId) {
return getSettingsLocked(SETTINGS_TYPE_SYSTEM, userId);
}
@@ -5399,7 +5308,7 @@
// next version step.
// If this is a new profile, check if a secure setting exists for the
// owner of the profile and use that value for the work profile.
- int owningId = resolveOwningUserIdForSecureSettingLocked(userId,
+ int owningId = resolveOwningUserIdForSecureSetting(userId,
NOTIFICATION_BUBBLES);
Setting previous = getGlobalSettingsLocked()
.getSettingLocked("notification_bubbles");
@@ -6068,18 +5977,22 @@
return currentVersion;
}
+ @GuardedBy("mLock")
private void initGlobalSettingsDefaultValLocked(String key, boolean val) {
initGlobalSettingsDefaultValLocked(key, val ? "1" : "0");
}
+ @GuardedBy("mLock")
private void initGlobalSettingsDefaultValLocked(String key, int val) {
initGlobalSettingsDefaultValLocked(key, String.valueOf(val));
}
+ @GuardedBy("mLock")
private void initGlobalSettingsDefaultValLocked(String key, long val) {
initGlobalSettingsDefaultValLocked(key, String.valueOf(val));
}
+ @GuardedBy("mLock")
private void initGlobalSettingsDefaultValLocked(String key, String val) {
final SettingsState globalSettings = getGlobalSettingsLocked();
Setting currentSetting = globalSettings.getSettingLocked(key);
@@ -6198,6 +6111,7 @@
}
}
+ @GuardedBy("mLock")
private void ensureLegacyDefaultValueAndSystemSetUpdatedLocked(SettingsState settings,
int userId) {
List<String> names = settings.getSettingNamesLocked();