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

Commit 0790d1bd authored by Hai Zhang's avatar Hai Zhang
Browse files

Keep the implicit flag for pre-23 apps when inheriting implicit

permissions

A subset of permissions don't get the implicit flag (REVOKE_ON_UPGRADE)
when inheriting state from their source permissions. However,
that should not apply to pre-23 apps because for them the
implicit flag means REVIEW_REQUIRED instead of REVOKE_ON_UPGRADE.

Bug: 346721675
Flag: EXEMPT bugfix
Test: atest PermissionFlagsTest SplitPermissionTest
Change-Id: I58608af39643b94db0baac5307d5335f6734629e
parent 0d6161a3
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1115,8 +1115,10 @@ class AppIdPermissionPolicy : SchemePolicy() {
    }

    private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) {
        var targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT
        val implicitPermissions = MutableIndexedSet<String>()
        forEachPackageInAppId(appId) {
            targetSdkVersion = targetSdkVersion.coerceAtMost(it.androidPackage!!.targetSdkVersion)
            implicitPermissions += it.androidPackage!!.implicitPermissions
        }
        implicitPermissions.forEachIndexed implicitPermissions@{ _, implicitPermissionName ->
@@ -1153,7 +1155,10 @@ class AppIdPermissionPolicy : SchemePolicy() {
                    newFlags = newFlags or (sourceFlags and PermissionFlags.MASK_RUNTIME)
                }
            }
            if (implicitPermissionName in RETAIN_IMPLICIT_FLAGS_PERMISSIONS) {
            if (
                targetSdkVersion >= Build.VERSION_CODES.M &&
                    implicitPermissionName in NO_IMPLICIT_FLAG_PERMISSIONS
            ) {
                newFlags = newFlags andInv PermissionFlags.IMPLICIT
            } else {
                newFlags = newFlags or PermissionFlags.IMPLICIT
@@ -1782,7 +1787,7 @@ class AppIdPermissionPolicy : SchemePolicy() {
        private const val PLATFORM_PACKAGE_NAME = "android"

        // A set of permissions that we don't want to revoke when they are no longer implicit.
        private val RETAIN_IMPLICIT_FLAGS_PERMISSIONS =
        private val NO_IMPLICIT_FLAG_PERMISSIONS =
            indexedSetOf(
                Manifest.permission.ACCESS_MEDIA_LOCATION,
                Manifest.permission.ACTIVITY_RECOGNITION,