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

Commit 0b536a01 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6416172 from 4e73395e to rvc-release

Change-Id: I0314deb36455fb080f30200242b0dda9d378aa9f
parents 77bcd97a 4e73395e
Loading
Loading
Loading
Loading

read-snapshot.txt

0 → 100644
+0 −0

Empty file added.

+5 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPerm
import com.android.permissioncontroller.permission.model.livedatatypes.PermState
import com.android.permissioncontroller.permission.utils.LocationUtils
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.Utils.isModernPermissionGroup

/**
 * A LiveData representing UI properties of an App Permission Group:
@@ -172,6 +173,10 @@ class AppPermGroupUiInfoLiveData private constructor(
     * permission group
     */
    private fun isUserSensitive(permissionState: Map<String, PermState>): Boolean {
        if (!isModernPermissionGroup(permGroupName)) {
            return true
        }

        for (permissionName in permissionState.keys) {
            val flags = permissionState[permissionName]?.permFlags ?: return true
            val granted = permissionState[permissionName]?.granted ?: return true
+40 −30
Original line number Diff line number Diff line
@@ -22,6 +22,9 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import com.android.permissioncontroller.PermissionControllerApplication
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

/**
 * Listens for package additions, replacements, and removals, and notifies listeners.
@@ -49,12 +52,15 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
     * Add a callback which will be notified when the specified packaged is changed or removed.
     */
    fun addChangeCallback(packageName: String, listener: PackageBroadcastListener) {
        GlobalScope.launch(Main.immediate) {
            val wasEmpty = hasNoListeners()

            changeCallbacks.getOrPut(packageName, { mutableSetOf() }).add(listener)

            if (wasEmpty) {
            app.registerReceiver(this, intentFilter)
                app.applicationContext.registerReceiverForAllUsers(this@PackageBroadcastReceiver,
                        intentFilter, null, null)
            }
        }
    }

@@ -65,12 +71,15 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
     * @return returns the integer ID assigned to the
     */
    fun addAllCallback(listener: PackageBroadcastListener) {
        GlobalScope.launch(Main.immediate) {
            val wasEmpty = hasNoListeners()

            allCallbacks.add(listener)

            if (wasEmpty) {
            app.registerReceiver(this, intentFilter)
                app.applicationContext.registerReceiverForAllUsers(this@PackageBroadcastReceiver,
                        intentFilter, null, null)
            }
        }
    }

@@ -80,13 +89,12 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
     * @param listener the listener we wish to remove
     */
    fun removeAllCallback(listener: PackageBroadcastListener) {
        GlobalScope.launch(Main.immediate) {
            val wasEmpty = hasNoListeners()

        if (!allCallbacks.remove(listener)) {
            return
            if (allCallbacks.remove(listener) && hasNoListeners() && !wasEmpty) {
                app.applicationContext.unregisterReceiver(this@PackageBroadcastReceiver)
            }
        if (hasNoListeners() && !wasEmpty) {
            app.unregisterReceiver(this)
        }
    }

@@ -97,22 +105,22 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
     * @param listener the listener we wish to remove
     */
    fun removeChangeCallback(packageName: String?, listener: PackageBroadcastListener) {
        GlobalScope.launch(Main.immediate) {
            val wasEmpty = hasNoListeners()

            changeCallbacks[packageName]?.let { callbackSet ->
            if (!callbackSet.remove(listener)) {
                return
            }
                callbackSet.remove(listener)
                if (callbackSet.isEmpty()) {
                    changeCallbacks.remove(packageName)
                }
                if (hasNoListeners() && !wasEmpty) {
                app.unregisterReceiver(this)
                    app.applicationContext.unregisterReceiver(this@PackageBroadcastReceiver)
                }
            }
        }
    }

    fun getNumListeners(): Int {
    private fun getNumListeners(): Int {
        var numListeners = allCallbacks.size
        for ((_, changeCallbackSet) in changeCallbacks) {
            numListeners += changeCallbackSet.size
@@ -120,7 +128,7 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
        return numListeners
    }

    fun hasNoListeners(): Boolean {
    private fun hasNoListeners(): Boolean {
        return getNumListeners() == 0
    }

@@ -133,15 +141,17 @@ object PackageBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val packageName = intent.data?.schemeSpecificPart ?: return

        for (callback in allCallbacks) {
        for (callback in allCallbacks.toList()) {
            callback.onPackageUpdate(packageName)
        }

        if (intent.action != Intent.ACTION_PACKAGE_ADDED) {
            changeCallbacks[packageName]?.forEach { callback ->
            changeCallbacks[packageName]?.toList()?.let { callbacks ->
                for (callback in callbacks) {
                    callback.onPackageUpdate(packageName)
                }
            }
        }

        if (intent.action == Intent.ACTION_PACKAGE_REMOVED) {
            // Invalidate all livedatas associated with this package
+11 −14
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ import android.app.Application
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.os.Handler
import android.os.Looper
import android.os.Process
import android.os.Process.INVALID_UID
import android.os.UserHandle
@@ -50,7 +48,6 @@ class UserSensitivityLiveData private constructor(

    private val context: Context
    private val packageLiveDatas = mutableMapOf<String, LightPackageInfoLiveData>()
    private val mainHandler = Handler(Looper.getMainLooper())
    private val userPackageInfosLiveData = UserPackageInfosLiveData[user]
    private val getAllUids = uid == INVALID_UID

@@ -76,8 +73,10 @@ class UserSensitivityLiveData private constructor(
        if (!getAllUids) {
            getAndObservePackageLiveDatas()

            if (packageLiveDatas.isEmpty() || packageLiveDatas.all { it.value.isInitialized &&
                it.value.value == null }) {
            if (packageLiveDatas.isEmpty() || packageLiveDatas.all {
                    it.value.isInitialized &&
                        it.value.value == null
                }) {
                packageLiveDatas.clear()
                invalidateSingle(uid to user)
                postValue(null)
@@ -165,19 +164,17 @@ class UserSensitivityLiveData private constructor(
        val (toAdd, toRemove) = KotlinUtils.getMapAndListDifferences(packageNames, packageLiveDatas)
        for (packageName in toRemove) {
            val liveData = packageLiveDatas.remove(packageName) ?: continue
            mainHandler.post {
            removeSource(liveData)
        }
        for (packageName in toAdd) {
            packageLiveDatas[packageName] = LightPackageInfoLiveData[packageName, user]
        }

        for (packageName in toAdd) {
            val liveData = LightPackageInfoLiveData[packageName, user]
            mainHandler.post {
                addSource(liveData) {
            addSource(packageLiveDatas[packageName] ?: continue) {
                updateIfActive()
            }
        }
            packageLiveDatas[packageName] = liveData
        }
        return
    }

+6 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.permissioncontroller.permission.model.livedatatypes

import android.content.pm.PackageManager
import android.content.pm.PermissionInfo
import com.android.permissioncontroller.permission.utils.Utils.isRuntimePlatformPermission

/**
 * Represents a single permission, and its state
@@ -69,7 +70,8 @@ data class LightPermission(
    /** Whether this permission is granted by role */
    val isGrantedByRole = flags and PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE != 0
    /** Whether this permission is user sensitive in its current grant state */
    val isUserSensitive = (isGrantedIncludingAppOp &&
    val isUserSensitive = !isRuntimePlatformPermission(permInfo.name) ||
            (isGrantedIncludingAppOp &&
                    (flags and PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) != 0) ||
            (!isGrantedIncludingAppOp &&
                    (flags and PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED) != 0)
Loading