Merge "DO NOT MERGE Fix auto-grant of AR runtime permission if device is upgrading from pre-Q" into sc-dev

This commit is contained in:
Ganesh Olekar
2022-08-29 17:38:00 +00:00
committed by Android (Google) Code Review

View File

@@ -2764,7 +2764,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
final Permission bp = mRegistry.getPermission(permName);
final boolean appSupportsRuntimePermissions =
pkg.getTargetSdkVersion() >= Build.VERSION_CODES.M;
String legacyActivityRecognitionPermission = null;
if (DEBUG_INSTALL && bp != null) {
Log.i(TAG, "Package " + friendlyName
@@ -2788,47 +2787,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
// Cache newImplicitPermissions before modifing permissionsState as for the
// shared uids the original and new state are the same object
if (!origState.hasPermissionState(permName)
&& (pkg.getImplicitPermissions().contains(permName)
|| (permName.equals(Manifest.permission.ACTIVITY_RECOGNITION)))) {
if (pkg.getImplicitPermissions().contains(permName)) {
&& (pkg.getImplicitPermissions().contains(permName))) {
// If permName is an implicit permission, try to auto-grant
newImplicitPermissions.add(permName);
if (DEBUG_PERMISSIONS) {
Slog.i(TAG, permName + " is newly added for " + friendlyName);
}
} else {
// Special case for Activity Recognition permission. Even if AR
// permission is not an implicit permission we want to add it to the
// list (try to auto-grant it) if the app was installed on a device
// before AR permission was split, regardless of if the app now requests
// the new AR permission or has updated its target SDK and AR is no
// longer implicit to it. This is a compatibility workaround for apps
// when AR permission was split in Q.
// TODO(zhanghai): This calls into SystemConfig, which generally
// shouldn't cause deadlock, but maybe we should keep a cache of the
// split permission list and just eliminate the possibility.
final List<PermissionManager.SplitPermissionInfo> permissionList =
getSplitPermissionInfos();
int numSplitPerms = permissionList.size();
for (int splitPermNum = 0; splitPermNum < numSplitPerms;
splitPermNum++) {
PermissionManager.SplitPermissionInfo sp = permissionList.get(
splitPermNum);
String splitPermName = sp.getSplitPermission();
if (sp.getNewPermissions().contains(permName)
&& origState.isPermissionGranted(splitPermName)) {
legacyActivityRecognitionPermission = splitPermName;
newImplicitPermissions.add(permName);
if (DEBUG_PERMISSIONS) {
Slog.i(TAG, permName + " is newly added for "
+ friendlyName);
}
break;
}
}
}
}
// TODO(b/140256621): The package instant app method has been removed
@@ -2959,8 +2923,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
// Hard restricted permissions cannot be held.
} else if (!permissionPolicyInitialized
|| (!hardRestricted || restrictionExempt)) {
if ((origPermState != null && origPermState.isGranted())
|| legacyActivityRecognitionPermission != null) {
if ((origPermState != null && origPermState.isGranted())) {
if (!uidState.grantPermission(bp)) {
wasChanged = true;
}