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

Commit 76d6e03d authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Create "IPC" coroutine dispatcher" into rvc-dev

parents 608c898c a8bbe934
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.permissioncontroller.permission.data

import android.os.Handler
import android.os.Looper
import kotlinx.coroutines.Dispatchers
import com.android.permissioncontroller.permission.utils.IPC
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
@@ -54,7 +54,7 @@ abstract class SmartAsyncMediatorLiveData<T> : SmartUpdateMediatorLiveData<T>()
            jobRunning = true
        }

        GlobalScope.launch(Dispatchers.IO) {
        GlobalScope.launch(IPC) {
            currentJob = coroutineContext[Job]
            loadDataAndPostValue(currentJob!!)
            jobRunning = false
+55 −42
Original line number Diff line number Diff line
@@ -36,7 +36,9 @@ import android.content.BroadcastReceiver
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager.*
import android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Process.myUserHandle
import android.os.UserHandle
import android.os.UserManager
@@ -55,12 +57,22 @@ import com.android.permissioncontroller.permission.data.PackagePermissionsLiveDa
import com.android.permissioncontroller.permission.data.UserPackageInfosLiveData
import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup
import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo
import com.android.permissioncontroller.permission.utils.*
import com.android.permissioncontroller.permission.utils.Utils.PROPERTY_AUTO_REVOKE_CHECK_FREQUENCY_MILLIS
import com.android.permissioncontroller.permission.utils.Utils.PROPERTY_AUTO_REVOKE_UNUSED_THRESHOLD_MILLIS
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.IO
import com.android.permissioncontroller.permission.utils.IPC
import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.application
import com.android.permissioncontroller.permission.utils.forEachInParallel
import com.android.permissioncontroller.permission.utils.updatePermissionFlags
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.concurrent.TimeUnit.DAYS
import java.util.concurrent.TimeUnit.SECONDS
import kotlin.random.Random
@@ -83,7 +95,8 @@ private val CHECK_FREQUENCY_MS = DeviceConfig.getLong(
private val SERVER_LOG_ID =
    PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__AUTO_UNUSED_APP_PERMISSION_REVOKED

private val isAutoRevokeEnabled: Boolean get() {
private val isAutoRevokeEnabled: Boolean
    get() {
        return CHECK_FREQUENCY_MS > 0 && UNUSED_THRESHOLD_MS > 0
    }

@@ -124,7 +137,7 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context) {
        .toMutableList()

    // TODO eugenesusla: adapt UsageStats into a LiveData
    val stats = withContext(IO) {
    val stats = withContext(IPC) {
        context.getSystemService<UsageStatsManager>()
            .queryUsageStats(
                if (DEBUG) INTERVAL_DAILY else INTERVAL_MONTHLY,
@@ -132,7 +145,7 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context) {
                now)
    }
    val profileUsersStats: Deferred<List<List<UsageStats>>> =
            GlobalScope.async(IO, start = CoroutineStart.LAZY) {
        GlobalScope.async(IPC, start = CoroutineStart.LAZY) {
            context
                .getSystemService<UserManager>()
                .enabledProfiles
@@ -180,7 +193,7 @@ private suspend fun revokePermissionsOnUnusedApps(context: Context) {
        Log.i(LOG_TAG, "Unused apps: ${unusedApps.map { it.packageName }}")
    }

    val manifestExemptPackages: Set<String> = withContext(IO) {
    val manifestExemptPackages: Set<String> = withContext(IPC) {
        context.getSystemService<PermissionManager>()
            .getAutoRevokeExemptionGrantedPackages()
    }
+2 −2
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ import com.android.permissioncontroller.permission.data.LightAppPermGroupLiveDat
import com.android.permissioncontroller.permission.data.UserPackageInfosLiveData
import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup
import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo
import com.android.permissioncontroller.permission.utils.IPC
import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.android.permissioncontroller.permission.utils.Utils
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

@@ -56,7 +56,7 @@ internal object RuntimePermissionsUpgradeController {
        val permissionManager = context.getSystemService(PermissionManager::class.java)
        val currentVersion = permissionManager!!.runtimePermissionsVersion

        GlobalScope.launch(IO) {
        GlobalScope.launch(IPC) {
            whitelistAllSystemAppPermissions(context)

            val upgradedVersion = onUpgradeLocked(context, currentVersion)
+2 −2
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveD
import com.android.permissioncontroller.permission.data.get
import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState
import com.android.permissioncontroller.permission.ui.Category
import com.android.permissioncontroller.permission.utils.IPC
import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.android.permissioncontroller.permission.utils.Utils
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

@@ -149,7 +149,7 @@ class AppPermissionGroupsViewModel(
    val autoRevokeLiveData = AutoRevokeStateLiveData[packageName, user]

    fun setAutoRevoke(enabled: Boolean) {
        GlobalScope.launch(IO) {
        GlobalScope.launch(IPC) {
            val aom = PermissionControllerApplication.get()
                .getSystemService(AppOpsManager::class.java)!!
            val packageInfo = LightPackageInfoLiveData[packageName, user].getInitializedValue()
+13 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.ContextWrapper
import android.content.pm.PackageManager
import android.os.Looper
import android.os.UserHandle
import kotlinx.coroutines.asCoroutineDispatcher
import java.util.concurrent.Executors

/**
 * Gets an [Application] instance from a regular [Context]
@@ -35,6 +37,17 @@ val Context.application: Application get() = when (this) {
    else -> applicationContext as Application
}

/**
 * The number of threads in the IPC thread pool. Set to the maximum number of binder threads allowed
 * to an app by the Android System.
 */
const val IPC_THREAD_POOL_COUNT = 16

/**
 * A coroutine dispatcher with a fixed thread pool size, to be used for background tasks
 */
val IPC = Executors.newFixedThreadPool(IPC_THREAD_POOL_COUNT).asCoroutineDispatcher()

/**
 * Assert that an operation is running on main thread
 */
Loading