[conflict] DO NOT MERGE Fix auto-grant of AR runtime permission if device is upgrading from pre-Q am: 84b1160cfc

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18327410

Change-Id: I439bf33ed4be4f0bf2439f5565b57c9bdc398504
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ganesh Olekar
2022-08-15 06:30:26 +00:00
3 changed files with 30 additions and 16 deletions

View File

@@ -1011,4 +1011,10 @@ public abstract class PackageManagerInternal {
* that b/141413692 is not reproducible on Q. * that b/141413692 is not reproducible on Q.
*/ */
public abstract void userRemovedForTest(); public abstract void userRemovedForTest();
/**
* Get installed SDK version of the package
* @param pkg package for which to retrieve the installed sdk version
*/
public abstract int getInstalledSdkVersion(PackageParser.Package pkg);
} }

View File

@@ -25246,6 +25246,11 @@ public class PackageManagerService extends IPackageManager.Stub
public void userRemovedForTest() { public void userRemovedForTest() {
mBlockDeleteOnUserRemoveForTest.open(); mBlockDeleteOnUserRemoveForTest.open();
} }
@Override
public int getInstalledSdkVersion(PackageParser.Package pkg) {
return PackageManagerService.this.getSettingsVersionForPackage(pkg).sdkVersion;
}
} }
@GuardedBy("mPackages") @GuardedBy("mPackages")

View File

@@ -1096,23 +1096,26 @@ public class PermissionManagerService {
// or has updated its target SDK and AR is no longer implicit to it. // 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 // This is a compatibility workaround for apps when AR permission was
// split in Q. // split in Q.
final List<PermissionManager.SplitPermissionInfo> permissionList = // b/210065877: Check that the installed version is pre Q to auto-grant in
getSplitPermissions(); // case of OS update
int numSplitPerms = permissionList.size(); if (mPackageManagerInt.getInstalledSdkVersion(pkg)
for (int splitPermNum = 0; splitPermNum < numSplitPerms; splitPermNum++) { < Build.VERSION_CODES.Q) {
PermissionManager.SplitPermissionInfo sp = int numSplitPerms = PermissionManager.SPLIT_PERMISSIONS.size();
permissionList.get(splitPermNum); for (int splitPermNum = 0; splitPermNum < numSplitPerms;
String splitPermName = sp.getSplitPermission(); splitPermNum++) {
if (sp.getNewPermissions().contains(permName) PermissionManager.SplitPermissionInfo sp =
&& origPermissions.hasInstallPermission(splitPermName)) { PermissionManager.SPLIT_PERMISSIONS.get(splitPermNum);
upgradedActivityRecognitionPermission = splitPermName; String splitPermName = sp.getSplitPermission();
newImplicitPermissions.add(permName); if (sp.getNewPermissions().contains(permName)
&& origPermissions.hasInstallPermission(splitPermName)) {
if (DEBUG_PERMISSIONS) { upgradedActivityRecognitionPermission = splitPermName;
Slog.i(TAG, permName + " is newly added for " newImplicitPermissions.add(permName);
+ pkg.packageName); if (DEBUG_PERMISSIONS) {
Slog.i(TAG, permName + " is newly added for "
+ pkg.packageName);
}
break;
} }
break;
} }
} }
} }