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

Commit ba16de80 authored by Hai Zhang's avatar Hai Zhang Committed by Android (Google) Code Review
Browse files

Merge "Rename Uid to AppId in the new subsystem."

parents 89215731 cf6143bf
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@ import com.android.modules.utils.BinaryXmlPullParser
import com.android.modules.utils.BinaryXmlSerializer
import com.android.server.SystemConfig
import com.android.server.permission.access.appop.PackageAppOpPolicy
import com.android.server.permission.access.appop.UidAppOpPolicy
import com.android.server.permission.access.appop.AppIdAppOpPolicy
import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
import com.android.server.permission.access.permission.UidPermissionPolicy
import com.android.server.permission.access.permission.AppIdPermissionPolicy
import com.android.server.permission.access.util.forEachTag
import com.android.server.permission.access.util.tag
import com.android.server.permission.access.util.tagName
@@ -37,8 +37,8 @@ class AccessPolicy private constructor(
        IndexedMap<String, IndexedMap<String, SchemePolicy>>().apply {
            fun addPolicy(policy: SchemePolicy) =
                getOrPut(policy.subjectScheme) { IndexedMap() }.put(policy.objectScheme, policy)
            addPolicy(UidPermissionPolicy())
            addPolicy(UidAppOpPolicy())
            addPolicy(AppIdPermissionPolicy())
            addPolicy(AppIdAppOpPolicy())
            addPolicy(PackageAppOpPolicy())
        }
    )
+4 −4
Original line number Diff line number Diff line
@@ -98,9 +98,9 @@ class SystemState private constructor(

class UserState private constructor(
    // A map of (appId to a map of (permissionName to permissionFlags))
    val uidPermissionFlags: IntMap<IndexedMap<String, Int>>,
    val appIdPermissionFlags: IntMap<IndexedMap<String, Int>>,
    // appId -> opName -> opCode
    val uidAppOpModes: IntMap<IndexedMap<String, Int>>,
    val appIdAppOpModes: IntMap<IndexedMap<String, Int>>,
    // packageName -> opName -> opCode
    val packageAppOpModes: IndexedMap<String, IndexedMap<String, Int>>
) : WritableState() {
@@ -111,8 +111,8 @@ class UserState private constructor(
    )

    fun copy(): UserState = UserState(
        uidPermissionFlags.copy { it.copy { it } },
        uidAppOpModes.copy { it.copy { it } },
        appIdPermissionFlags.copy { it.copy { it } },
        appIdAppOpModes.copy { it.copy { it } },
        packageAppOpModes.copy { it.copy { it } }
    )
}
+11 −11
Original line number Diff line number Diff line
@@ -28,15 +28,15 @@ import com.android.server.permission.access.util.getAttributeIntOrThrow
import com.android.server.permission.access.util.tag
import com.android.server.permission.access.util.tagName

class UidAppOpPersistence : BaseAppOpPersistence() {
class AppIdAppOpPersistence : BaseAppOpPersistence() {
    override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
        when (tagName) {
            TAG_UID_APP_OPS -> parseUidAppOps(state, userId)
            TAG_APP_ID_APP_OPS -> parseAppIdAppOps(state, userId)
            else -> {}
        }
    }

    private fun BinaryXmlPullParser.parseUidAppOps(state: AccessState, userId: Int) {
    private fun BinaryXmlPullParser.parseAppIdAppOps(state: AccessState, userId: Int) {
        val userState = state.userStates[userId]
        forEachTag {
            when (tagName) {
@@ -44,7 +44,7 @@ class UidAppOpPersistence : BaseAppOpPersistence() {
                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
            }
        }
        userState.uidAppOpModes.retainAllIndexed { _, appId, _ ->
        userState.appIdAppOpModes.retainAllIndexed { _, appId, _ ->
            val hasAppId = appId in state.systemState.appIds
            if (!hasAppId) {
                Log.w(LOG_TAG, "Dropping unknown app ID $appId when parsing app-op state")
@@ -56,17 +56,17 @@ class UidAppOpPersistence : BaseAppOpPersistence() {
    private fun BinaryXmlPullParser.parseAppId(userState: UserState) {
        val appId = getAttributeIntOrThrow(ATTR_ID)
        val appOpModes = IndexedMap<String, Int>()
        userState.uidAppOpModes[appId] = appOpModes
        userState.appIdAppOpModes[appId] = appOpModes
        parseAppOps(appOpModes)
    }

    override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
        serializeUidAppOps(state.userStates[userId])
        serializeAppIdAppOps(state.userStates[userId])
    }

    private fun BinaryXmlSerializer.serializeUidAppOps(userState: UserState) {
        tag(TAG_UID_APP_OPS) {
            userState.uidAppOpModes.forEachIndexed { _, appId, appOpModes ->
    private fun BinaryXmlSerializer.serializeAppIdAppOps(userState: UserState) {
        tag(TAG_APP_ID_APP_OPS) {
            userState.appIdAppOpModes.forEachIndexed { _, appId, appOpModes ->
                serializeAppId(appId, appOpModes)
            }
        }
@@ -83,10 +83,10 @@ class UidAppOpPersistence : BaseAppOpPersistence() {
    }

    companion object {
        private val LOG_TAG = UidAppOpPersistence::class.java.simpleName
        private val LOG_TAG = AppIdAppOpPersistence::class.java.simpleName

        private const val TAG_APP_ID = "app-id"
        private const val TAG_UID_APP_OPS = "uid-app-ops"
        private const val TAG_APP_ID_APP_OPS = "app-id-app-ops"

        private const val ATTR_ID = "id"
    }
+9 −9
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import com.android.server.permission.access.MutateStateScope
import com.android.server.permission.access.UidUri
import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports

class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {
class AppIdAppOpPolicy : BaseAppOpPolicy(AppIdAppOpPersistence()) {
    @Volatile
    private var onAppOpModeChangedListeners = IndexedListSet<OnAppOpModeChangedListener>()
    private val onAppOpModeChangedListenersLock = Any()
@@ -54,18 +54,18 @@ class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {

    override fun MutateStateScope.onAppIdRemoved(appId: Int) {
        newState.userStates.forEachIndexed { _, _, userState ->
            userState.uidAppOpModes -= appId
            userState.appIdAppOpModes -= appId
            userState.requestWrite()
            // Skip notifying the change listeners since the app ID no longer exists.
        }
    }

    fun GetStateScope.getAppOpModes(appId: Int, userId: Int): IndexedMap<String, Int>? =
        state.userStates[userId].uidAppOpModes[appId]
        state.userStates[userId].appIdAppOpModes[appId]

    fun MutateStateScope.removeAppOpModes(appId: Int, userId: Int): Boolean {
        val userState = newState.userStates[userId]
        val isChanged = userState.uidAppOpModes.removeReturnOld(appId) != null
        val isChanged = userState.appIdAppOpModes.removeReturnOld(appId) != null
        if (isChanged) {
            userState.requestWrite()
        }
@@ -73,7 +73,7 @@ class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {
    }

    fun GetStateScope.getAppOpMode(appId: Int, userId: Int, appOpName: String): Int =
        state.userStates[userId].uidAppOpModes[appId]
        state.userStates[userId].appIdAppOpModes[appId]
            .getWithDefault(appOpName, AppOpsManager.opToDefaultMode(appOpName))

    fun MutateStateScope.setAppOpMode(
@@ -83,8 +83,8 @@ class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {
        mode: Int
    ): Boolean {
        val userState = newState.userStates[userId]
        val uidAppOpModes = userState.uidAppOpModes
        var appOpModes = uidAppOpModes[appId]
        val appIdAppOpModes = userState.appIdAppOpModes
        var appOpModes = appIdAppOpModes[appId]
        val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
        val oldMode = appOpModes.getWithDefault(appOpName, defaultMode)
        if (oldMode == mode) {
@@ -92,11 +92,11 @@ class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {
        }
        if (appOpModes == null) {
            appOpModes = IndexedMap()
            uidAppOpModes[appId] = appOpModes
            appIdAppOpModes[appId] = appOpModes
        }
        appOpModes.putWithDefault(appOpName, mode, defaultMode)
        if (appOpModes.isEmpty()) {
            uidAppOpModes -= appId
            appIdAppOpModes -= appId
        }
        userState.requestWrite()
        onAppOpModeChangedListeners.forEachIndexed { _, it ->
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class AppOpService(
    private val packagePolicy = service.getSchemePolicy(PackageUri.SCHEME, AppOpUri.SCHEME)
        as PackageAppOpPolicy
    private val uidPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME)
        as UidAppOpPolicy
        as AppIdAppOpPolicy

    private val context = service.context
    private lateinit var handler: Handler
Loading