Loading services/permission/java/com/android/server/permission/access/AccessPolicy.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) } ) Loading services/permission/java/com/android/server/permission/access/AccessState.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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 } } ) } Loading services/permission/java/com/android/server/permission/access/appop/UidAppOpPersistence.kt→services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPersistence.kt +11 −11 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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") Loading @@ -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) } } Loading @@ -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" } Loading services/permission/java/com/android/server/permission/access/appop/UidAppOpPolicy.kt→services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPolicy.kt +9 −9 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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() } Loading @@ -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( Loading @@ -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) { Loading @@ -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 -> Loading services/permission/java/com/android/server/permission/access/appop/AppOpService.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/permission/java/com/android/server/permission/access/AccessPolicy.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) } ) Loading
services/permission/java/com/android/server/permission/access/AccessState.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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 } } ) } Loading
services/permission/java/com/android/server/permission/access/appop/UidAppOpPersistence.kt→services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPersistence.kt +11 −11 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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") Loading @@ -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) } } Loading @@ -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" } Loading
services/permission/java/com/android/server/permission/access/appop/UidAppOpPolicy.kt→services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPolicy.kt +9 −9 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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() } Loading @@ -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( Loading @@ -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) { Loading @@ -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 -> Loading
services/permission/java/com/android/server/permission/access/appop/AppOpService.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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