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

Commit 218b605b authored by Hai Zhang's avatar Hai Zhang
Browse files

Don't keep pregrants for non-system apps after partial uninstallation

Non-system apps may be marked as uninstalled but not fully removed if
they are still installed in another user on the device. However, since
they aren't system apps we should still prefer considering them gone and
not preserve their pregrants, maintaining the same behavior as U.

Fixes: 365920333
Test: presubmit
Change-Id: If11c0c74216a2daba557e5332124b549ff10c42d
parent 98248bd3
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -297,14 +297,21 @@ class AppIdPermissionPolicy : SchemePolicy() {
                return@forEach
            }
            var newFlags = oldFlags
            val isSystemOrInstalled =
                packageState.isSystem || packageState.getUserStateOrDefault(userId).isInstalled
            newFlags =
                if (
                    isSystemOrInstalled && (
                        newFlags.hasBits(PermissionFlags.ROLE) ||
                            newFlags.hasBits(PermissionFlags.PREGRANT)
                    )
                ) {
                    newFlags or PermissionFlags.RUNTIME_GRANTED
                } else {
                    newFlags andInv PermissionFlags.RUNTIME_GRANTED
                    newFlags andInv (
                        PermissionFlags.RUNTIME_GRANTED or PermissionFlags.ROLE or
                            PermissionFlags.PREGRANT
                    )
                }
            newFlags = newFlags andInv USER_SETTABLE_MASK
            if (newFlags.hasBits(PermissionFlags.LEGACY_GRANTED)) {
+2 −1
Original line number Diff line number Diff line
@@ -72,7 +72,8 @@ class AppIdPermissionPolicyPermissionResetTest : BasePermissionPolicyTest() {
        } else {
            mockPackageState(
                APP_ID_1,
                mockAndroidPackage(PACKAGE_NAME_1, requestedPermissions = setOf(PERMISSION_NAME_0))
                mockAndroidPackage(PACKAGE_NAME_1, requestedPermissions = setOf(PERMISSION_NAME_0)),
                true
            )
        }
        setPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_0, oldFlags)