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

Commit b2121474 authored by Eugene Susla's avatar Eugene Susla
Browse files

Exempt keyboards from auto revoke

Test: run auto revoke, observe logs, ensure keyboard gets exempted
Bug: 153607914
Change-Id: Idc5f3b75382a249874a2b542e7d1e181b37ac163
parent 97aaeaf9
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import android.permission.PermissionManager
import android.provider.DeviceConfig
import android.provider.Settings
import android.util.Log
import android.view.inputmethod.InputMethod
import androidx.annotation.MainThread
import com.android.permissioncontroller.Constants
import com.android.permissioncontroller.Constants.ACTION_MANAGE_AUTO_REVOKE
@@ -219,6 +220,12 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context):
            .getAutoRevokeExemptionGrantedPackages()
    }

    val keyboardPackages = context.packageManager
            .queryIntentServices(Intent(InputMethod.SERVICE_INTERFACE), 0)
            .mapNotNull { resolveInfo ->
                resolveInfo?.serviceInfo?.packageName
            }

    val revokedApps = mutableListOf<Pair<String, UserHandle>>()
    for ((user, userApps) in unusedApps) {
        userApps.forEachInParallel(Main) { pkg: LightPackageInfo ->
@@ -226,6 +233,13 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context):
                return@forEachInParallel
            }

            if (pkg.packageName in keyboardPackages) {
                if (DEBUG) {
                    Log.i(LOG_TAG, "Skipping IME: ${pkg.packageName}")
                }
                return@forEachInParallel
            }

            val packageName = pkg.packageName
            if (isPackageAutoRevokeExempt(context, pkg, manifestExemptPackages)) {
                return@forEachInParallel