Loading services/permission/java/com/android/server/permission/access/AccessPersistence.kt +14 −15 Original line number Diff line number Diff line Loading @@ -33,24 +33,23 @@ class AccessPersistence( private val policy: AccessPolicy ) { fun read(state: AccessState) { readSystemState(state.systemState) val userStates = state.userStates readSystemState(state) state.systemState.userIds.forEachIndexed { _, userId -> readUserState(userId, userStates[userId]) readUserState(state, userId) } } private fun readSystemState(systemState: SystemState) { private fun readSystemState(state: AccessState) { systemFile.parse { // This is the canonical way to call an extension function in a different class. // TODO(b/259469752): Use context receiver for this when it becomes stable. with(policy) { parseSystemState(systemState) } with(policy) { parseSystemState(state) } } } private fun readUserState(userId: Int, userState: UserState) { private fun readUserState(state: AccessState, userId: Int) { getUserFile(userId).parse { with(policy) { parseUserState(userId, userState) } with(policy) { parseUserState(state, userId) } } } Loading @@ -65,30 +64,30 @@ class AccessPersistence( } fun write(state: AccessState) { writeState(state.systemState, ::writeSystemState) writeState(state.systemState) { writeSystemState(state) } state.userStates.forEachIndexed { _, userId, userState -> writeState(userState) { writeUserState(userId, it) } writeState(userState) { writeUserState(state, userId) } } } private inline fun <T : WritableState> writeState(state: T, write: (T) -> Unit) { private inline fun <T : WritableState> writeState(state: T, write: () -> Unit) { when (val writeMode = state.writeMode) { WriteMode.NONE -> {} WriteMode.SYNC -> write(state) WriteMode.SYNC -> write() WriteMode.ASYNC -> TODO() else -> error(writeMode) } } private fun writeSystemState(systemState: SystemState) { private fun writeSystemState(state: AccessState) { systemFile.serialize { with(policy) { serializeSystemState(systemState) } with(policy) { serializeSystemState(state) } } } private fun writeUserState(userId: Int, userState: UserState) { private fun writeUserState(state: AccessState, userId: Int) { getUserFile(userId).serialize { with(policy) { serializeUserState(userId, userState) } with(policy) { serializeUserState(state, userId) } } } Loading services/permission/java/com/android/server/permission/access/AccessPolicy.kt +12 −12 Original line number Diff line number Diff line Loading @@ -202,13 +202,13 @@ class AccessPolicy private constructor( } } fun BinaryXmlPullParser.parseSystemState(systemState: SystemState) { fun BinaryXmlPullParser.parseSystemState(state: AccessState) { forEachTag { when (tagName) { TAG_ACCESS -> { forEachTag { forEachSchemePolicy { with(it) { parseSystemState(systemState) } with(it) { parseSystemState(state) } } } } Loading @@ -217,21 +217,21 @@ class AccessPolicy private constructor( } } fun BinaryXmlSerializer.serializeSystemState(systemState: SystemState) { fun BinaryXmlSerializer.serializeSystemState(state: AccessState) { tag(TAG_ACCESS) { forEachSchemePolicy { with(it) { serializeSystemState(systemState) } with(it) { serializeSystemState(state) } } } } fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { forEachTag { when (tagName) { TAG_ACCESS -> { forEachTag { forEachSchemePolicy { with(it) { parseUserState(userId, userState) } with(it) { parseUserState(state, userId) } } } } Loading @@ -245,10 +245,10 @@ class AccessPolicy private constructor( } } fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { tag(TAG_ACCESS) { forEachSchemePolicy { with(it) { serializeUserState(userId, userState) } with(it) { serializeUserState(state, userId) } } } } Loading Loading @@ -305,11 +305,11 @@ abstract class SchemePolicy { open fun MutateStateScope.onPackageUninstalled(packageName: String, appId: Int, userId: Int) {} open fun BinaryXmlPullParser.parseSystemState(systemState: SystemState) {} open fun BinaryXmlPullParser.parseSystemState(state: AccessState) {} open fun BinaryXmlSerializer.serializeSystemState(systemState: SystemState) {} open fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {} open fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) {} open fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {} open fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) {} open fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {} } services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt +4 −4 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.server.permission.access.appop import android.util.Log import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.UserState import com.android.server.permission.access.AccessState import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports import com.android.server.permission.access.util.attributeInt import com.android.server.permission.access.util.attributeInterned Loading @@ -30,9 +30,9 @@ import com.android.server.permission.access.util.tag import com.android.server.permission.access.util.tagName abstract class BaseAppOpPersistence { abstract fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) abstract fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) abstract fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) abstract fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) protected fun BinaryXmlPullParser.parseAppOps(appOpModes: IndexedMap<String, Int>) { forEachTag { Loading Loading @@ -67,7 +67,7 @@ abstract class BaseAppOpPersistence { private const val TAG_APP_OP = "app-op" private const val ATTR_NAME = "name" private const val ATTR_MODE = "mode" private const val ATTR_NAME = "name" } } services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt +5 −5 Original line number Diff line number Diff line Loading @@ -18,9 +18,9 @@ package com.android.server.permission.access.appop import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.AccessState import com.android.server.permission.access.AppOpUri import com.android.server.permission.access.SchemePolicy import com.android.server.permission.access.UserState abstract class BaseAppOpPolicy( private val persistence: BaseAppOpPersistence Loading @@ -28,11 +28,11 @@ abstract class BaseAppOpPolicy( override val objectScheme: String get() = AppOpUri.SCHEME override fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { with(persistence) { this@parseUserState.parseUserState(userId, userState) } override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { with(persistence) { this@parseUserState.parseUserState(state, userId) } } override fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { with(persistence) { this@serializeUserState.serializeUserState(userId, userState) } override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { with(persistence) { this@serializeUserState.serializeUserState(state, userId) } } } services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt +15 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.permission.access.appop import android.util.Log import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.AccessState import com.android.server.permission.access.UserState import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports import com.android.server.permission.access.util.attributeInterned Loading @@ -28,20 +29,28 @@ import com.android.server.permission.access.util.tag import com.android.server.permission.access.util.tagName class PackageAppOpPersistence : BaseAppOpPersistence() { override fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { when (tagName) { TAG_PACKAGE_APP_OPS -> parsePackageAppOps(userState) TAG_PACKAGE_APP_OPS -> parsePackageAppOps(state, userId) else -> {} } } private fun BinaryXmlPullParser.parsePackageAppOps(userState: UserState) { private fun BinaryXmlPullParser.parsePackageAppOps(state: AccessState, userId: Int) { val userState = state.userStates[userId] forEachTag { when (tagName) { TAG_PACKAGE -> parsePackage(userState) else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state") } } userState.packageAppOpModes.retainAllIndexed { _, packageName, _ -> val hasPackage = packageName in state.systemState.packageStates if (!hasPackage) { Log.w(LOG_TAG, "Dropping unknown package $packageName when parsing app-op state") } hasPackage } } private fun BinaryXmlPullParser.parsePackage(userState: UserState) { Loading @@ -51,8 +60,8 @@ class PackageAppOpPersistence : BaseAppOpPersistence() { parseAppOps(appOpModes) } override fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { serializePackageAppOps(userState) override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { serializePackageAppOps(state.userStates[userId]) } private fun BinaryXmlSerializer.serializePackageAppOps(userState: UserState) { Loading @@ -76,8 +85,8 @@ class PackageAppOpPersistence : BaseAppOpPersistence() { companion object { private val LOG_TAG = PackageAppOpPersistence::class.java.simpleName private const val TAG_PACKAGE_APP_OPS = "package-app-ops" private const val TAG_PACKAGE = "package" private const val TAG_PACKAGE_APP_OPS = "package-app-ops" private const val ATTR_NAME = "name" } Loading Loading
services/permission/java/com/android/server/permission/access/AccessPersistence.kt +14 −15 Original line number Diff line number Diff line Loading @@ -33,24 +33,23 @@ class AccessPersistence( private val policy: AccessPolicy ) { fun read(state: AccessState) { readSystemState(state.systemState) val userStates = state.userStates readSystemState(state) state.systemState.userIds.forEachIndexed { _, userId -> readUserState(userId, userStates[userId]) readUserState(state, userId) } } private fun readSystemState(systemState: SystemState) { private fun readSystemState(state: AccessState) { systemFile.parse { // This is the canonical way to call an extension function in a different class. // TODO(b/259469752): Use context receiver for this when it becomes stable. with(policy) { parseSystemState(systemState) } with(policy) { parseSystemState(state) } } } private fun readUserState(userId: Int, userState: UserState) { private fun readUserState(state: AccessState, userId: Int) { getUserFile(userId).parse { with(policy) { parseUserState(userId, userState) } with(policy) { parseUserState(state, userId) } } } Loading @@ -65,30 +64,30 @@ class AccessPersistence( } fun write(state: AccessState) { writeState(state.systemState, ::writeSystemState) writeState(state.systemState) { writeSystemState(state) } state.userStates.forEachIndexed { _, userId, userState -> writeState(userState) { writeUserState(userId, it) } writeState(userState) { writeUserState(state, userId) } } } private inline fun <T : WritableState> writeState(state: T, write: (T) -> Unit) { private inline fun <T : WritableState> writeState(state: T, write: () -> Unit) { when (val writeMode = state.writeMode) { WriteMode.NONE -> {} WriteMode.SYNC -> write(state) WriteMode.SYNC -> write() WriteMode.ASYNC -> TODO() else -> error(writeMode) } } private fun writeSystemState(systemState: SystemState) { private fun writeSystemState(state: AccessState) { systemFile.serialize { with(policy) { serializeSystemState(systemState) } with(policy) { serializeSystemState(state) } } } private fun writeUserState(userId: Int, userState: UserState) { private fun writeUserState(state: AccessState, userId: Int) { getUserFile(userId).serialize { with(policy) { serializeUserState(userId, userState) } with(policy) { serializeUserState(state, userId) } } } Loading
services/permission/java/com/android/server/permission/access/AccessPolicy.kt +12 −12 Original line number Diff line number Diff line Loading @@ -202,13 +202,13 @@ class AccessPolicy private constructor( } } fun BinaryXmlPullParser.parseSystemState(systemState: SystemState) { fun BinaryXmlPullParser.parseSystemState(state: AccessState) { forEachTag { when (tagName) { TAG_ACCESS -> { forEachTag { forEachSchemePolicy { with(it) { parseSystemState(systemState) } with(it) { parseSystemState(state) } } } } Loading @@ -217,21 +217,21 @@ class AccessPolicy private constructor( } } fun BinaryXmlSerializer.serializeSystemState(systemState: SystemState) { fun BinaryXmlSerializer.serializeSystemState(state: AccessState) { tag(TAG_ACCESS) { forEachSchemePolicy { with(it) { serializeSystemState(systemState) } with(it) { serializeSystemState(state) } } } } fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { forEachTag { when (tagName) { TAG_ACCESS -> { forEachTag { forEachSchemePolicy { with(it) { parseUserState(userId, userState) } with(it) { parseUserState(state, userId) } } } } Loading @@ -245,10 +245,10 @@ class AccessPolicy private constructor( } } fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { tag(TAG_ACCESS) { forEachSchemePolicy { with(it) { serializeUserState(userId, userState) } with(it) { serializeUserState(state, userId) } } } } Loading Loading @@ -305,11 +305,11 @@ abstract class SchemePolicy { open fun MutateStateScope.onPackageUninstalled(packageName: String, appId: Int, userId: Int) {} open fun BinaryXmlPullParser.parseSystemState(systemState: SystemState) {} open fun BinaryXmlPullParser.parseSystemState(state: AccessState) {} open fun BinaryXmlSerializer.serializeSystemState(systemState: SystemState) {} open fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {} open fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) {} open fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {} open fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) {} open fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {} }
services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt +4 −4 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.server.permission.access.appop import android.util.Log import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.UserState import com.android.server.permission.access.AccessState import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports import com.android.server.permission.access.util.attributeInt import com.android.server.permission.access.util.attributeInterned Loading @@ -30,9 +30,9 @@ import com.android.server.permission.access.util.tag import com.android.server.permission.access.util.tagName abstract class BaseAppOpPersistence { abstract fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) abstract fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) abstract fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) abstract fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) protected fun BinaryXmlPullParser.parseAppOps(appOpModes: IndexedMap<String, Int>) { forEachTag { Loading Loading @@ -67,7 +67,7 @@ abstract class BaseAppOpPersistence { private const val TAG_APP_OP = "app-op" private const val ATTR_NAME = "name" private const val ATTR_MODE = "mode" private const val ATTR_NAME = "name" } }
services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt +5 −5 Original line number Diff line number Diff line Loading @@ -18,9 +18,9 @@ package com.android.server.permission.access.appop import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.AccessState import com.android.server.permission.access.AppOpUri import com.android.server.permission.access.SchemePolicy import com.android.server.permission.access.UserState abstract class BaseAppOpPolicy( private val persistence: BaseAppOpPersistence Loading @@ -28,11 +28,11 @@ abstract class BaseAppOpPolicy( override val objectScheme: String get() = AppOpUri.SCHEME override fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { with(persistence) { this@parseUserState.parseUserState(userId, userState) } override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { with(persistence) { this@parseUserState.parseUserState(state, userId) } } override fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { with(persistence) { this@serializeUserState.serializeUserState(userId, userState) } override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { with(persistence) { this@serializeUserState.serializeUserState(state, userId) } } }
services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt +15 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.permission.access.appop import android.util.Log import com.android.modules.utils.BinaryXmlPullParser import com.android.modules.utils.BinaryXmlSerializer import com.android.server.permission.access.AccessState import com.android.server.permission.access.UserState import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports import com.android.server.permission.access.util.attributeInterned Loading @@ -28,20 +29,28 @@ import com.android.server.permission.access.util.tag import com.android.server.permission.access.util.tagName class PackageAppOpPersistence : BaseAppOpPersistence() { override fun BinaryXmlPullParser.parseUserState(userId: Int, userState: UserState) { override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) { when (tagName) { TAG_PACKAGE_APP_OPS -> parsePackageAppOps(userState) TAG_PACKAGE_APP_OPS -> parsePackageAppOps(state, userId) else -> {} } } private fun BinaryXmlPullParser.parsePackageAppOps(userState: UserState) { private fun BinaryXmlPullParser.parsePackageAppOps(state: AccessState, userId: Int) { val userState = state.userStates[userId] forEachTag { when (tagName) { TAG_PACKAGE -> parsePackage(userState) else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state") } } userState.packageAppOpModes.retainAllIndexed { _, packageName, _ -> val hasPackage = packageName in state.systemState.packageStates if (!hasPackage) { Log.w(LOG_TAG, "Dropping unknown package $packageName when parsing app-op state") } hasPackage } } private fun BinaryXmlPullParser.parsePackage(userState: UserState) { Loading @@ -51,8 +60,8 @@ class PackageAppOpPersistence : BaseAppOpPersistence() { parseAppOps(appOpModes) } override fun BinaryXmlSerializer.serializeUserState(userId: Int, userState: UserState) { serializePackageAppOps(userState) override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) { serializePackageAppOps(state.userStates[userId]) } private fun BinaryXmlSerializer.serializePackageAppOps(userState: UserState) { Loading @@ -76,8 +85,8 @@ class PackageAppOpPersistence : BaseAppOpPersistence() { companion object { private val LOG_TAG = PackageAppOpPersistence::class.java.simpleName private const val TAG_PACKAGE_APP_OPS = "package-app-ops" private const val TAG_PACKAGE = "package" private const val TAG_PACKAGE_APP_OPS = "package-app-ops" private const val ATTR_NAME = "name" } Loading