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

Commit 56670e90 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Extract getAppIdTargetSdkVersion() in AppIdPermissionPolicy" into main

parents eb1eae8a fb6e6e93
Loading
Loading
Loading
Loading
+20 −26
Original line number Diff line number Diff line
@@ -230,18 +230,7 @@ class AppIdPermissionPolicy : SchemePolicy() {
        }
        val isSoftRestricted =
            if (permission.isSoftRestricted && !isExempt) {
                val targetSdkVersion =
                    reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT) {
                        targetSdkVersion,
                        packageState ->
                        if (permissionName in packageState.androidPackage!!.requestedPermissions) {
                            targetSdkVersion.coerceAtMost(
                                packageState.androidPackage!!.targetSdkVersion
                            )
                        } else {
                            targetSdkVersion
                        }
                    }
                val targetSdkVersion = getAppIdTargetSdkVersion(appId, permissionName)
                !anyPackageInAppId(appId) {
                    permissionName in it.androidPackage!!.requestedPermissions &&
                        isSoftRestrictedPermissionExemptForPackage(
@@ -718,18 +707,8 @@ class AppIdPermissionPolicy : SchemePolicy() {

        // If the app is updated, and has scoped storage permissions, then it is possible that the
        // app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
        val oldTargetSdkVersion =
            reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, oldState) {
                targetSdkVersion,
                packageState ->
                targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion)
            }
        val newTargetSdkVersion =
            reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, newState) {
                targetSdkVersion,
                packageState ->
                targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion)
            }
        val oldTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, oldState)
        val newTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, newState)
        @Suppress("ConvertTwoComparisonsToRangeCheck")
        val isTargetSdkVersionDowngraded =
            oldTargetSdkVersion >= Build.VERSION_CODES.Q &&
@@ -1115,10 +1094,9 @@ class AppIdPermissionPolicy : SchemePolicy() {
    }

    private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) {
        var targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT
        val targetSdkVersion = getAppIdTargetSdkVersion(appId, null)
        val implicitPermissions = MutableIndexedSet<String>()
        forEachPackageInAppId(appId) {
            targetSdkVersion = targetSdkVersion.coerceAtMost(it.androidPackage!!.targetSdkVersion)
            implicitPermissions += it.androidPackage!!.implicitPermissions
        }
        implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName ->
@@ -1418,6 +1396,22 @@ class AppIdPermissionPolicy : SchemePolicy() {
            else -> false
        }

    private fun MutateStateScope.getAppIdTargetSdkVersion(
        appId: Int,
        permissionName: String?,
        state: AccessState = newState
    ): Int =
        reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, state) {
            targetSdkVersion,
            packageState ->
            val androidPackage = packageState.androidPackage!!
            if (permissionName == null || permissionName in androidPackage.requestedPermissions) {
                targetSdkVersion.coerceAtMost(androidPackage.targetSdkVersion)
            } else {
                targetSdkVersion
            }
        }

    private inline fun MutateStateScope.anyPackageInAppId(
        appId: Int,
        state: AccessState = newState,