Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff3432da authored by vignesh ramanathan's avatar vignesh ramanathan
Browse files

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
parent a9d2c1f1
Loading
Loading
Loading
Loading
+46 −2
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.Manifest
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 @@ class AppIdPermissionUpgrade(private val policy: AppIdPermissionPolicy) {
        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 @@ class AppIdPermissionUpgrade(private val policy: AppIdPermissionPolicy) {
        }
    }

    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,