summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Olekar <olekarg@google.com>2022-05-11 22:15:21 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-09-10 12:35:22 +0000
commit2c071d50f9e2a750553b785717f367ccdcc313cd (patch)
tree7723a338d1dc92fcd80b332cafc4fbfebd1da7f8
parentac203ee2ff6002c2c298ed85fe8163c84cfc8630 (diff)
downloadbase-2c071d50f9e2a750553b785717f367ccdcc313cd.tar.gz
DO NOT MERGE Fix auto-grant of AR runtime permission if device is upgrading from pre-Q
Test: Manually install app apks targeting Q and verifying that AR permission is not auto-granted Test: atest ActivityRecognitionPermissionTest Bug: 210065877 Change-Id: I90adf45a6611ab8bc953765c72af77a6a4f7aae8 (cherry picked from commit 84b1160cfc382f86af57f50d27864276d6c93f4a) (cherry picked from commit 1c4e2160bcb089adce0bc36a7a7badd5e5a87702) Merged-In: I90adf45a6611ab8bc953765c72af77a6a4f7aae8
-rw-r--r--core/java/android/content/pm/PackageManagerInternal.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java5
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java32
3 files changed, 30 insertions, 13 deletions
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 672994e79134..bedb796e1e64 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -999,4 +999,10 @@ public abstract class PackageManagerInternal {
* Migrates legacy obb data to its new location.
*/
public abstract void migrateLegacyObbData();
+
+ /**
+ * 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);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e26d0a3466d9..9b0f1b7b7609 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -25145,6 +25145,11 @@ public class PackageManagerService extends IPackageManager.Stub
Slog.wtf(TAG, e);
}
}
+
+ @Override
+ public int getInstalledSdkVersion(PackageParser.Package pkg) {
+ return PackageManagerService.this.getSettingsVersionForPackage(pkg).sdkVersion;
+ }
}
@GuardedBy("mPackages")
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 128b7f775117..c7fca39de562 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1096,21 +1096,27 @@ public class PermissionManagerService {
// 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.
- int numSplitPerms = PermissionManager.SPLIT_PERMISSIONS.size();
- for (int splitPermNum = 0; splitPermNum < numSplitPerms; splitPermNum++) {
- PermissionManager.SplitPermissionInfo sp =
- PermissionManager.SPLIT_PERMISSIONS.get(splitPermNum);
- String splitPermName = sp.getSplitPermission();
- if (sp.getNewPermissions().contains(permName)
- && origPermissions.hasInstallPermission(splitPermName)) {
- upgradedActivityRecognitionPermission = splitPermName;
- newImplicitPermissions.add(permName);
+ // b/210065877: Check that the installed version is pre Q to auto-grant in
+ // case of OS update
+ if (mPackageManagerInt.getInstalledSdkVersion(pkg)
+ < Build.VERSION_CODES.Q) {
+ int numSplitPerms = PermissionManager.SPLIT_PERMISSIONS.size();
+ for (int splitPermNum = 0; splitPermNum < numSplitPerms;
+ splitPermNum++) {
+ PermissionManager.SplitPermissionInfo sp =
+ PermissionManager.SPLIT_PERMISSIONS.get(splitPermNum);
+ String splitPermName = sp.getSplitPermission();
+ if (sp.getNewPermissions().contains(permName)
+ && origPermissions.hasInstallPermission(splitPermName)) {
+ upgradedActivityRecognitionPermission = splitPermName;
+ newImplicitPermissions.add(permName);
- if (DEBUG_PERMISSIONS) {
- Slog.i(TAG, permName + " is newly added for "
- + pkg.packageName);
+ if (DEBUG_PERMISSIONS) {
+ Slog.i(TAG, permName + " is newly added for "
+ + pkg.packageName);
+ }
+ break;
}
- break;
}
}
}