Merge "Rename Uid to AppId in the new subsystem."
This commit is contained in:
@@ -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())
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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 } }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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 ->
|
||||
@@ -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
|
||||
|
||||
@@ -25,7 +25,7 @@ import com.android.server.pm.permission.PermissionMigrationHelper
|
||||
/**
|
||||
* This class migrate legacy permissions to unified permission subsystem
|
||||
*/
|
||||
class UidPermissionMigration {
|
||||
class AppIdPermissionMigration {
|
||||
internal fun migrateSystemState(state: AccessState) {
|
||||
val legacyPermissionsManager =
|
||||
LocalServices.getService(PermissionMigrationHelper::class.java)!!
|
||||
@@ -71,7 +71,7 @@ class UidPermissionMigration {
|
||||
userId: Int
|
||||
) {
|
||||
val permissionFlags =
|
||||
state.userStates[userId].uidPermissionFlags.getOrPut(appId) { IndexedMap() }
|
||||
state.userStates[userId].appIdPermissionFlags.getOrPut(appId) { IndexedMap() }
|
||||
|
||||
legacyPermissionStates.forEach forEachPermission@ { (permissionName, permissionState) ->
|
||||
val permission = state.systemState.permissions[permissionName]
|
||||
@@ -119,7 +119,7 @@ class UidPermissionMigration {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG_TAG = UidPermissionMigration::class.java.simpleName
|
||||
private val LOG_TAG = AppIdPermissionMigration::class.java.simpleName
|
||||
|
||||
private const val DEBUG_MIGRATION = false
|
||||
}
|
||||
@@ -37,7 +37,7 @@ import com.android.server.permission.access.util.getAttributeValueOrThrow
|
||||
import com.android.server.permission.access.util.tag
|
||||
import com.android.server.permission.access.util.tagName
|
||||
|
||||
class UidPermissionPersistence {
|
||||
class AppIdPermissionPersistence {
|
||||
fun BinaryXmlPullParser.parseSystemState(state: AccessState) {
|
||||
val systemState = state.systemState
|
||||
when (tagName) {
|
||||
@@ -126,12 +126,12 @@ class UidPermissionPersistence {
|
||||
|
||||
fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
|
||||
when (tagName) {
|
||||
TAG_PERMISSIONS -> parsePermissionFlags(state, userId)
|
||||
TAG_APP_ID_PERMISSIONS -> parseAppIdPermissions(state, userId)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
private fun BinaryXmlPullParser.parsePermissionFlags(state: AccessState, userId: Int) {
|
||||
private fun BinaryXmlPullParser.parseAppIdPermissions(state: AccessState, userId: Int) {
|
||||
val userState = state.userStates[userId]
|
||||
forEachTag {
|
||||
when (tagName) {
|
||||
@@ -139,7 +139,7 @@ class UidPermissionPersistence {
|
||||
else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
|
||||
}
|
||||
}
|
||||
userState.uidPermissionFlags.retainAllIndexed { _, appId, _ ->
|
||||
userState.appIdPermissionFlags.retainAllIndexed { _, appId, _ ->
|
||||
val hasAppId = appId in state.systemState.appIds
|
||||
if (!hasAppId) {
|
||||
Log.w(LOG_TAG, "Dropping unknown app ID $appId when parsing permission state")
|
||||
@@ -151,34 +151,34 @@ class UidPermissionPersistence {
|
||||
private fun BinaryXmlPullParser.parseAppId(userState: UserState) {
|
||||
val appId = getAttributeIntOrThrow(ATTR_ID)
|
||||
val permissionFlags = IndexedMap<String, Int>()
|
||||
userState.uidPermissionFlags[appId] = permissionFlags
|
||||
parseAppIdPermissions(permissionFlags)
|
||||
userState.appIdPermissionFlags[appId] = permissionFlags
|
||||
parsePermissionStates(permissionFlags)
|
||||
}
|
||||
|
||||
private fun BinaryXmlPullParser.parseAppIdPermissions(
|
||||
private fun BinaryXmlPullParser.parsePermissionStates(
|
||||
permissionFlags: IndexedMap<String, Int>
|
||||
) {
|
||||
forEachTag {
|
||||
when (tagName) {
|
||||
TAG_PERMISSION -> parseAppIdPermission(permissionFlags)
|
||||
TAG_PERMISSION -> parsePermissionState(permissionFlags)
|
||||
else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun BinaryXmlPullParser.parseAppIdPermission(permissionFlags: IndexedMap<String, Int>) {
|
||||
private fun BinaryXmlPullParser.parsePermissionState(permissionFlags: IndexedMap<String, Int>) {
|
||||
val name = getAttributeValueOrThrow(ATTR_NAME).intern()
|
||||
val flags = getAttributeIntOrThrow(ATTR_FLAGS)
|
||||
permissionFlags[name] = flags
|
||||
}
|
||||
|
||||
fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
|
||||
serializePermissionFlags(state.userStates[userId])
|
||||
serializeAppIdPermissions(state.userStates[userId])
|
||||
}
|
||||
|
||||
private fun BinaryXmlSerializer.serializePermissionFlags(userState: UserState) {
|
||||
tag(TAG_PERMISSIONS) {
|
||||
userState.uidPermissionFlags.forEachIndexed { _, appId, permissionFlags ->
|
||||
private fun BinaryXmlSerializer.serializeAppIdPermissions(userState: UserState) {
|
||||
tag(TAG_APP_ID_PERMISSIONS) {
|
||||
userState.appIdPermissionFlags.forEachIndexed { _, appId, permissionFlags ->
|
||||
serializeAppId(appId, permissionFlags)
|
||||
}
|
||||
}
|
||||
@@ -190,19 +190,19 @@ class UidPermissionPersistence {
|
||||
) {
|
||||
tag(TAG_APP_ID) {
|
||||
attributeInt(ATTR_ID, appId)
|
||||
serializeAppIdPermissions(permissionFlags)
|
||||
serializePermissionStates(permissionFlags)
|
||||
}
|
||||
}
|
||||
|
||||
private fun BinaryXmlSerializer.serializeAppIdPermissions(
|
||||
private fun BinaryXmlSerializer.serializePermissionStates(
|
||||
permissionFlags: IndexedMap<String, Int>
|
||||
) {
|
||||
permissionFlags.forEachIndexed { _, name, flags ->
|
||||
serializeAppIdPermission(name, flags)
|
||||
serializePermissionState(name, flags)
|
||||
}
|
||||
}
|
||||
|
||||
private fun BinaryXmlSerializer.serializeAppIdPermission(name: String, flags: Int) {
|
||||
private fun BinaryXmlSerializer.serializePermissionState(name: String, flags: Int) {
|
||||
tag(TAG_PERMISSION) {
|
||||
attributeInterned(ATTR_NAME, name)
|
||||
attributeInt(ATTR_FLAGS, flags)
|
||||
@@ -210,9 +210,10 @@ class UidPermissionPersistence {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG_TAG = UidPermissionPersistence::class.java.simpleName
|
||||
private val LOG_TAG = AppIdPermissionPersistence::class.java.simpleName
|
||||
|
||||
private const val TAG_APP_ID = "app-id"
|
||||
private const val TAG_APP_ID_PERMISSIONS = "app-id-permissions"
|
||||
private const val TAG_PERMISSION = "permission"
|
||||
private const val TAG_PERMISSIONS = "permissions"
|
||||
private const val TAG_PERMISSION_TREES = "permission-trees"
|
||||
@@ -45,10 +45,10 @@ import com.android.server.pm.permission.CompatibilityPermissionInfo
|
||||
import com.android.server.pm.pkg.AndroidPackage
|
||||
import com.android.server.pm.pkg.PackageState
|
||||
|
||||
class UidPermissionPolicy : SchemePolicy() {
|
||||
private val persistence = UidPermissionPersistence()
|
||||
class AppIdPermissionPolicy : SchemePolicy() {
|
||||
private val persistence = AppIdPermissionPersistence()
|
||||
|
||||
private val migration = UidPermissionMigration()
|
||||
private val migration = AppIdPermissionMigration()
|
||||
|
||||
@Volatile
|
||||
private var onPermissionFlagsChangedListeners =
|
||||
@@ -126,7 +126,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
|
||||
override fun MutateStateScope.onAppIdRemoved(appId: Int) {
|
||||
newState.userStates.forEachValueIndexed { _, userState ->
|
||||
userState.uidPermissionFlags -= appId
|
||||
userState.appIdPermissionFlags -= appId
|
||||
userState.requestWrite()
|
||||
// Skip notifying the change listeners since the app ID no longer exists.
|
||||
}
|
||||
@@ -596,7 +596,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
requestedPermissions += it.androidPackage!!.requestedPermissions
|
||||
}
|
||||
newState.userStates.forEachIndexed { _, userId, userState ->
|
||||
userState.uidPermissionFlags[appId]?.forEachReversedIndexed { _, permissionName, _ ->
|
||||
userState.appIdPermissionFlags[appId]?.forEachReversedIndexed { _, permissionName, _ ->
|
||||
if (permissionName !in requestedPermissions) {
|
||||
setPermissionFlags(appId, userId, permissionName, 0)
|
||||
}
|
||||
@@ -608,7 +608,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
// If the app is updated, and has scoped storage permissions, then it is possible that the
|
||||
// app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
|
||||
newState.userStates.forEachIndexed { _, userId, userState ->
|
||||
userState.uidPermissionFlags[appId]?.forEachReversedIndexed {
|
||||
userState.appIdPermissionFlags[appId]?.forEachReversedIndexed {
|
||||
_, permissionName, oldFlags ->
|
||||
if (permissionName !in STORAGE_AND_MEDIA_PERMISSIONS || oldFlags == 0) {
|
||||
return@forEachReversedIndexed
|
||||
@@ -1316,7 +1316,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
}
|
||||
|
||||
fun GetStateScope.getUidPermissionFlags(appId: Int, userId: Int): IndexedMap<String, Int>? =
|
||||
state.userStates[userId]?.uidPermissionFlags?.get(appId)
|
||||
state.userStates[userId]?.appIdPermissionFlags?.get(appId)
|
||||
|
||||
fun GetStateScope.getPermissionFlags(
|
||||
appId: Int,
|
||||
@@ -1336,7 +1336,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
userId: Int,
|
||||
permissionName: String
|
||||
): Int =
|
||||
state.userStates[userId]?.uidPermissionFlags?.get(appId).getWithDefault(permissionName, 0)
|
||||
state.userStates[userId]?.appIdPermissionFlags?.get(appId).getWithDefault(permissionName, 0)
|
||||
|
||||
fun MutateStateScope.setPermissionFlags(
|
||||
appId: Int,
|
||||
@@ -1354,8 +1354,8 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
flagValues: Int
|
||||
): Boolean {
|
||||
val userState = newState.userStates[userId]
|
||||
val uidPermissionFlags = userState.uidPermissionFlags
|
||||
var permissionFlags = uidPermissionFlags[appId]
|
||||
val appIdPermissionFlags = userState.appIdPermissionFlags
|
||||
var permissionFlags = appIdPermissionFlags[appId]
|
||||
val oldFlags = permissionFlags.getWithDefault(permissionName, 0)
|
||||
val newFlags = (oldFlags andInv flagMask) or (flagValues and flagMask)
|
||||
if (oldFlags == newFlags) {
|
||||
@@ -1363,11 +1363,11 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
}
|
||||
if (permissionFlags == null) {
|
||||
permissionFlags = IndexedMap()
|
||||
uidPermissionFlags[appId] = permissionFlags
|
||||
appIdPermissionFlags[appId] = permissionFlags
|
||||
}
|
||||
permissionFlags.putWithDefault(permissionName, newFlags, 0)
|
||||
if (permissionFlags.isEmpty()) {
|
||||
uidPermissionFlags -= appId
|
||||
appIdPermissionFlags -= appId
|
||||
}
|
||||
userState.requestWrite()
|
||||
onPermissionFlagsChangedListeners.forEachIndexed { _, it ->
|
||||
@@ -1397,7 +1397,7 @@ class UidPermissionPolicy : SchemePolicy() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG_TAG = UidPermissionPolicy::class.java.simpleName
|
||||
private val LOG_TAG = AppIdPermissionPolicy::class.java.simpleName
|
||||
|
||||
private const val PLATFORM_PACKAGE_NAME = "android"
|
||||
|
||||
@@ -65,7 +65,7 @@ import com.android.server.permission.access.GetStateScope
|
||||
import com.android.server.permission.access.MutateStateScope
|
||||
import com.android.server.permission.access.PermissionUri
|
||||
import com.android.server.permission.access.UidUri
|
||||
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.util.andInv
|
||||
import com.android.server.permission.access.util.hasAnyBit
|
||||
@@ -101,7 +101,7 @@ class PermissionService(
|
||||
private val service: AccessCheckingService
|
||||
) : PermissionManagerServiceInterface {
|
||||
private val policy =
|
||||
service.getSchemePolicy(UidUri.SCHEME, PermissionUri.SCHEME) as UidPermissionPolicy
|
||||
service.getSchemePolicy(UidUri.SCHEME, PermissionUri.SCHEME) as AppIdPermissionPolicy
|
||||
|
||||
private val context = service.context
|
||||
private lateinit var metricsLogger: MetricsLogger
|
||||
@@ -930,7 +930,8 @@ class PermissionService(
|
||||
permissionName: String,
|
||||
isGranted: Boolean
|
||||
) {
|
||||
val appOpPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME) as UidAppOpPolicy
|
||||
val appOpPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME) as
|
||||
AppIdAppOpPolicy
|
||||
val appOpName = AppOpsManager.permissionToOp(permissionName)
|
||||
val mode = if (isGranted) AppOpsManager.MODE_ALLOWED else AppOpsManager.MODE_ERRORED
|
||||
with(appOpPolicy) { setAppOpMode(packageState.appId, userId, appOpName, mode) }
|
||||
@@ -2102,7 +2103,7 @@ class PermissionService(
|
||||
* Callback invoked when interesting actions have been taken on a permission.
|
||||
*/
|
||||
private inner class OnPermissionFlagsChangedListener :
|
||||
UidPermissionPolicy.OnPermissionFlagsChangedListener() {
|
||||
AppIdPermissionPolicy.OnPermissionFlagsChangedListener() {
|
||||
private var isPermissionFlagsChanged = false
|
||||
|
||||
private val runtimePermissionChangedUids = IntSet()
|
||||
|
||||
Reference in New Issue
Block a user