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

Commit 62d4d099 authored by Yi-an Chen's avatar Yi-an Chen
Browse files

Implement resetRuntimePermissions

Bug: 263504888
Test: Build
Change-Id: I39f25332331c540663e4f8c26973bed9ac26c75d
parent 97c96490
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
@@ -209,16 +209,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