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

Commit e6f418e1 authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Android (Google) Code Review
Browse files

Merge changes Ifdd7ddcf,I1ad67f1d into rvc-dev

* changes:
  Add test for permission controller dump code
  Add state of auto-revoke toggle to dump
parents c7d7ca87 92d6a8bf
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -36,6 +36,13 @@ filegroup {
    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
        ":permissioncontroller-protos",
    ],
}

filegroup {
    name: "permissioncontroller-protos",
    srcs: [
        "src/**/*.proto",
    ],
}
+10 −4
Original line number Diff line number Diff line
@@ -59,11 +59,17 @@ class AutoRevokeStateLiveData private constructor(
    }

    override suspend fun loadDataAndPostValue(job: Job) {
        val uid = packageLiveData.value?.uid
        if (uid == null && packageLiveData.isInitialized) {
        if (!packageLiveData.isInitialized) {
            return
        }
        if (packageLiveData.value == null) {
            postValue(null)
            return
        } else if (uid == null) {
        }

        val uid = packageLiveData.value?.uid
        if (uid == null) {
            postValue(null)
            return
        }

@@ -81,7 +87,7 @@ class AutoRevokeStateLiveData private constructor(
            return
        }

        val revocable = !isPackageAutoRevokeExempt(app, packageLiveData.getInitializedValue())
        val revocable = !isPackageAutoRevokeExempt(app, packageLiveData.value!!)
        val autoRevokeState = mutableListOf<String>()
        permStateLiveDatas.forEach { (groupName, liveData) ->
            val default = liveData.value?.any { (_, permState) ->
+8 −4
Original line number Diff line number Diff line
@@ -70,11 +70,15 @@ class LightPackageInfoLiveData private constructor(
        newValue?.let { packageInfo ->
            if (packageInfo.uid != uid) {
                uid = packageInfo.uid

                // registeredUid == null means the live data is not active
                if (registeredUid != null) {
                    PermissionListenerMultiplexer.addOrReplaceCallback(registeredUid,
                            packageInfo.uid, this)
                    registeredUid = uid
                }
            }
        }
        super.setValue(newValue)
    }

+3 −2
Original line number Diff line number Diff line
@@ -113,7 +113,8 @@ class PermStateLiveData private constructor(
            return
        }
        uid = packageInfo.uid
        if (uid != registeredUid) {
        // registeredUid == null means the live data is not active
        if (uid != registeredUid && registeredUid != null) {
            PermissionListenerMultiplexer.addOrReplaceCallback(
                registeredUid, packageInfo.uid, this)
            registeredUid = uid
+24 −1
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.data.AllPackageInfosLiveData
import com.android.permissioncontroller.permission.data.AppOpLiveData
import com.android.permissioncontroller.permission.data.AutoRevokeManifestExemptPackagesLiveData
import com.android.permissioncontroller.permission.data.AutoRevokeStateLiveData
import com.android.permissioncontroller.permission.data.DataRepositoryForPackage
import com.android.permissioncontroller.permission.data.LightAppPermGroupLiveData
import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData
@@ -743,6 +744,7 @@ private class AutoRevokeDumpLiveData(context: Context) :
        val firstInstallTime: Long,
        val lastTimeVisible: Long?,
        val isAutoRevokeManifestExempt: Boolean,
        val isAutoRevokeEnabled: Boolean,
        val implementedServices: List<String>,
        val groups: List<AutoRevokeDumpGroupData>
    ) {
@@ -752,6 +754,7 @@ private class AutoRevokeDumpLiveData(context: Context) :
                    .setPackageName(packageName)
                    .setFirstInstallTime(firstInstallTime)
                    .setIsAutoRevokeManifestExempt(isAutoRevokeManifestExempt)
                    .setIsAutoRevokeEnabled(isAutoRevokeEnabled)

            lastTimeVisible?.let { dump.lastTimeVisible = lastTimeVisible }

@@ -815,6 +818,13 @@ private class AutoRevokeDumpLiveData(context: Context) :
    private var pkgPermGroupNames:
            MutableMap<Pair<UserHandle, String>, PackagePermissionsLiveData>? = null

    /**
     * Group names for packages
     * map<user, pkg-name> -> auto-revoke state. {@code null} before step 1
     */
    private var pkgAutoRevokeState:
            MutableMap<Pair<UserHandle, String>, AutoRevokeStateLiveData>? = null

    /**
     * Group state for packages
     * map<(user, pkg-name) -> map<perm-group-name -> group>>, value {@code null} before step 2
@@ -847,6 +857,8 @@ private class AutoRevokeDumpLiveData(context: Context) :
        addSource(packages) {
            pkgPermGroupNames?.values?.forEach { removeSource(it) }
            pkgPermGroupNames = null
            pkgAutoRevokeState?.values?.forEach { removeSource(it) }
            pkgAutoRevokeState = null
            pkgPermGroups.values.forEach { it?.values?.forEach { removeSource(it) } }

            updateIfActive()
@@ -885,6 +897,7 @@ private class AutoRevokeDumpLiveData(context: Context) :
        // pkgPermGroupNames step 1, packages is loaded, nothing else
        if (packages.isInitialized && pkgPermGroupNames == null) {
            pkgPermGroupNames = mutableMapOf()
            pkgAutoRevokeState = mutableMapOf()

            for ((user, userPkgs) in packages.value!!) {
                for (pkg in userPkgs) {
@@ -897,6 +910,13 @@ private class AutoRevokeDumpLiveData(context: Context) :

                        updateIfActive()
                    }

                    val newPkgAutoRevokeState = AutoRevokeStateLiveData[pkg.packageName, user]
                    pkgAutoRevokeState!![user to pkg.packageName] = newPkgAutoRevokeState

                    addSource(newPkgAutoRevokeState) {
                        updateIfActive()
                    }
                }
            }
        }
@@ -934,7 +954,8 @@ private class AutoRevokeDumpLiveData(context: Context) :
                pkgPermGroupNames?.size == pkgPermGroups.size &&
                pkgPermGroups.values.all { it?.values?.all { it.isInitialized } == true } &&
                services?.values?.all { it.isInitialized } == true &&
                autoRevokeManifestExemptPackages?.values?.all { it.isInitialized } == true) {
                autoRevokeManifestExemptPackages?.values?.all { it.isInitialized } == true &&
                pkgAutoRevokeState?.values?.all { it.isInitialized } == true) {
            val users = mutableListOf<AutoRevokeDumpUserData>()

            for ((user, userPkgs) in packages.value!!) {
@@ -967,6 +988,8 @@ private class AutoRevokeDumpLiveData(context: Context) :
                                    ?.find { it.packageName == pkg.packageName }?.lastTimeVisible,
                            autoRevokeManifestExemptPackages!![user]!!.value!!
                                    .contains(pkg.packageName),
                            pkgAutoRevokeState!![user to pkg.packageName]!!.value
                                    ?.isEnabledForApp == true,
                            services!![user]?.value!![pkg.packageName] ?: emptyList(),
                            groups))
                }
Loading