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

Commit a61da8bd authored by Yi-an Chen's avatar Yi-an Chen Committed by Android (Google) Code Review
Browse files

Merge "Implement resetRuntimePermissions"

parents ca75b3cd 62d4d099
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -1600,11 +1600,23 @@ class PermissionService(
    }

    override fun resetRuntimePermissions(androidPackage: AndroidPackage, userId: Int) {
        // TODO("Not yet implemented")
        service.mutateState {
            with(policy) {
                resetRuntimePermissions(androidPackage.packageName, userId)
            }
        }
    }

    override fun resetRuntimePermissionsForUser(userId: Int) {
        // TODO("Not yet implemented")
        packageManagerLocal.withUnfilteredSnapshot().use { snapshot ->
            service.mutateState {
                snapshot.packageStates.forEach { (_, packageState) ->
                    with(policy) {
                        resetRuntimePermissions(packageState.packageName, userId)
                    }
                }
            }
        }
    }

    override fun addOnPermissionsChangeListener(listener: IOnPermissionsChangeListener) {
+7 −8
Original line number Diff line number Diff line
@@ -211,16 +211,15 @@ class UidPermissionPolicy : SchemePolicy() {
        appId: Int,
        userId: Int
    ) {
        resetRuntimePermissions(packageName, appId, userId)
        resetRuntimePermissions(packageName, userId)
    }

    fun MutateStateScope.resetRuntimePermissions(
        packageName: String,
        appId: Int,
        userId: Int
    ) {
        val androidPackage = newState.systemState.packageStates[packageName]?.androidPackage
            ?: return
    fun MutateStateScope.resetRuntimePermissions(packageName: String, userId: Int) {
        // It's okay to skip resetting permissions for packages that are removed,
        // because their states will be trimmed in onPackageRemoved()/onAppIdRemoved()
        val packageState = newState.systemState.packageStates[packageName] ?: return
        val androidPackage = packageState.androidPackage ?: return
        val appId = packageState.appId
        androidPackage.requestedPermissions.forEachIndexed { _, permissionName ->
            val permission = newState.systemState.permissions[permissionName]
                ?: return@forEachIndexed