Upgrade body sensors background permission in V
This CL is porting ag/25056557 to the new subsystem.
Fixes: b/307478373
Test: Tested Manually. Existing Test passes.
Change-Id: I0cee4a4c184571d0565faa1e7b879aadf05580d0
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt
index edacda0..15c9b9f 100644
--- a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt
@@ -20,7 +20,6 @@
import android.os.Build
import android.util.Slog
import com.android.server.permission.access.MutateStateScope
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
import com.android.server.permission.access.util.andInv
import com.android.server.permission.access.util.hasAnyBit
@@ -61,10 +60,11 @@
if (version <= 12 /*&& SdkLevel.isAtLeastT()*/) {
Slog.v(
LOG_TAG,
- "Upgrading scoped permissions for package: $packageName" +
+ "Upgrading scoped media and body sensor permissions for package: $packageName" +
", version: $version, user: $userId"
)
upgradeAuralVisualMediaPermissions(packageState, userId)
+ upgradeBodySensorPermissions(packageState, userId)
}
// TODO Enable isAtLeastU check, when moving subsystem to mainline.
if (version <= 14 /*&& SdkLevel.isAtLeastU()*/) {
@@ -182,6 +182,50 @@
}
}
+ private fun MutateStateScope.upgradeBodySensorPermissions(
+ packageState: PackageState,
+ userId: Int
+ ) {
+ if (
+ Manifest.permission.BODY_SENSORS_BACKGROUND !in
+ packageState.androidPackage!!.requestedPermissions
+ ) {
+ return
+ }
+
+ // Should have been granted when first getting exempt as if the perm was just split
+ val appId = packageState.appId
+ val backgroundBodySensorsFlags =
+ with(policy) {
+ getPermissionFlags(appId, userId, Manifest.permission.BODY_SENSORS_BACKGROUND)
+ }
+ if (backgroundBodySensorsFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)) {
+ return
+ }
+
+ // Add Upgrade Exemption - BODY_SENSORS_BACKGROUND is a restricted permission
+ with(policy) {
+ updatePermissionFlags(
+ appId,
+ userId,
+ Manifest.permission.BODY_SENSORS_BACKGROUND,
+ PermissionFlags.UPGRADE_EXEMPT,
+ PermissionFlags.UPGRADE_EXEMPT,
+ )
+ }
+
+ val bodySensorsFlags =
+ with(policy) { getPermissionFlags(appId, userId, Manifest.permission.BODY_SENSORS) }
+ val isForegroundBodySensorsGranted = PermissionFlags.isAppOpGranted(bodySensorsFlags)
+ if (isForegroundBodySensorsGranted) {
+ grantRuntimePermission(
+ packageState,
+ userId,
+ Manifest.permission.BODY_SENSORS_BACKGROUND
+ )
+ }
+ }
+
/** Upgrade permission based on the grant in [Manifest.permission_group.READ_MEDIA_VISUAL] */
private fun MutateStateScope.upgradeUserSelectedVisualMediaPermission(
packageState: PackageState,