Loading services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt +20 −26 Original line number Original line Diff line number Diff line Loading @@ -230,18 +230,7 @@ class AppIdPermissionPolicy : SchemePolicy() { } } val isSoftRestricted = val isSoftRestricted = if (permission.isSoftRestricted && !isExempt) { if (permission.isSoftRestricted && !isExempt) { val targetSdkVersion = val targetSdkVersion = getAppIdTargetSdkVersion(appId, permissionName) reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT) { targetSdkVersion, packageState -> if (permissionName in packageState.androidPackage!!.requestedPermissions) { targetSdkVersion.coerceAtMost( packageState.androidPackage!!.targetSdkVersion ) } else { targetSdkVersion } } !anyPackageInAppId(appId) { !anyPackageInAppId(appId) { permissionName in it.androidPackage!!.requestedPermissions && permissionName in it.androidPackage!!.requestedPermissions && isSoftRestrictedPermissionExemptForPackage( isSoftRestrictedPermissionExemptForPackage( Loading Loading @@ -718,18 +707,8 @@ class AppIdPermissionPolicy : SchemePolicy() { // If the app is updated, and has scoped storage permissions, then it is possible that the // 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. // app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. val oldTargetSdkVersion = val oldTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, oldState) reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, oldState) { val newTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, newState) targetSdkVersion, packageState -> targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion) } val newTargetSdkVersion = reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, newState) { targetSdkVersion, packageState -> targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion) } @Suppress("ConvertTwoComparisonsToRangeCheck") @Suppress("ConvertTwoComparisonsToRangeCheck") val isTargetSdkVersionDowngraded = val isTargetSdkVersionDowngraded = oldTargetSdkVersion >= Build.VERSION_CODES.Q && oldTargetSdkVersion >= Build.VERSION_CODES.Q && Loading Loading @@ -1115,10 +1094,9 @@ class AppIdPermissionPolicy : SchemePolicy() { } } private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) { private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) { var targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT val targetSdkVersion = getAppIdTargetSdkVersion(appId, null) val implicitPermissions = MutableIndexedSet<String>() val implicitPermissions = MutableIndexedSet<String>() forEachPackageInAppId(appId) { forEachPackageInAppId(appId) { targetSdkVersion = targetSdkVersion.coerceAtMost(it.androidPackage!!.targetSdkVersion) implicitPermissions += it.androidPackage!!.implicitPermissions implicitPermissions += it.androidPackage!!.implicitPermissions } } implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName -> implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName -> Loading Loading @@ -1418,6 +1396,22 @@ class AppIdPermissionPolicy : SchemePolicy() { else -> false 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( private inline fun MutateStateScope.anyPackageInAppId( appId: Int, appId: Int, state: AccessState = newState, state: AccessState = newState, Loading Loading
services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt +20 −26 Original line number Original line Diff line number Diff line Loading @@ -230,18 +230,7 @@ class AppIdPermissionPolicy : SchemePolicy() { } } val isSoftRestricted = val isSoftRestricted = if (permission.isSoftRestricted && !isExempt) { if (permission.isSoftRestricted && !isExempt) { val targetSdkVersion = val targetSdkVersion = getAppIdTargetSdkVersion(appId, permissionName) reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT) { targetSdkVersion, packageState -> if (permissionName in packageState.androidPackage!!.requestedPermissions) { targetSdkVersion.coerceAtMost( packageState.androidPackage!!.targetSdkVersion ) } else { targetSdkVersion } } !anyPackageInAppId(appId) { !anyPackageInAppId(appId) { permissionName in it.androidPackage!!.requestedPermissions && permissionName in it.androidPackage!!.requestedPermissions && isSoftRestrictedPermissionExemptForPackage( isSoftRestrictedPermissionExemptForPackage( Loading Loading @@ -718,18 +707,8 @@ class AppIdPermissionPolicy : SchemePolicy() { // If the app is updated, and has scoped storage permissions, then it is possible that the // 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. // app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. val oldTargetSdkVersion = val oldTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, oldState) reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, oldState) { val newTargetSdkVersion = getAppIdTargetSdkVersion(appId, null, newState) targetSdkVersion, packageState -> targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion) } val newTargetSdkVersion = reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, newState) { targetSdkVersion, packageState -> targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion) } @Suppress("ConvertTwoComparisonsToRangeCheck") @Suppress("ConvertTwoComparisonsToRangeCheck") val isTargetSdkVersionDowngraded = val isTargetSdkVersionDowngraded = oldTargetSdkVersion >= Build.VERSION_CODES.Q && oldTargetSdkVersion >= Build.VERSION_CODES.Q && Loading Loading @@ -1115,10 +1094,9 @@ class AppIdPermissionPolicy : SchemePolicy() { } } private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) { private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) { var targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT val targetSdkVersion = getAppIdTargetSdkVersion(appId, null) val implicitPermissions = MutableIndexedSet<String>() val implicitPermissions = MutableIndexedSet<String>() forEachPackageInAppId(appId) { forEachPackageInAppId(appId) { targetSdkVersion = targetSdkVersion.coerceAtMost(it.androidPackage!!.targetSdkVersion) implicitPermissions += it.androidPackage!!.implicitPermissions implicitPermissions += it.androidPackage!!.implicitPermissions } } implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName -> implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName -> Loading Loading @@ -1418,6 +1396,22 @@ class AppIdPermissionPolicy : SchemePolicy() { else -> false 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( private inline fun MutateStateScope.anyPackageInAppId( appId: Int, appId: Int, state: AccessState = newState, state: AccessState = newState, Loading