Loading services/core/java/com/android/server/pm/permission/Permission.java +9 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,15 @@ public final class Permission { mType = type; } public Permission(@NonNull PermissionInfo permissionInfo, @PermissionType int type, boolean reconciled, int uid, int[] gids, boolean gidsPerUser) { this(permissionInfo, type); mReconciled = reconciled; mUid = uid; mGids = gids; mGidsPerUser = gidsPerUser; } @NonNull public PermissionInfo getPermissionInfo() { return mPermissionInfo; Loading services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt +7 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,13 @@ inline fun <K, V> IndexedMap<K, V>.retainAllIndexed(predicate: (Int, K, V) -> Bo return isChanged } inline fun <K, V, R> IndexedMap<K, V>.mapIndexed(transform: (Int, K, V) -> R): IndexedList<R> = IndexedList<R>().also { destination -> forEachIndexed { index, key, value -> transform(index, key, value).let { destination += it } } } inline fun <K, V, R> IndexedMap<K, V>.mapNotNullIndexed( transform: (Int, K, V) -> R? ): IndexedList<R> = Loading services/permission/java/com/android/server/permission/access/permission/PermissionService.kt +57 −19 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.server.pm.UserManagerInternal import com.android.server.pm.UserManagerService import com.android.server.pm.parsing.pkg.AndroidPackageUtils import com.android.server.pm.permission.LegacyPermission import com.android.server.pm.permission.Permission as LegacyPermission2 import com.android.server.pm.permission.LegacyPermissionSettings import com.android.server.pm.permission.LegacyPermissionState import com.android.server.pm.permission.PermissionManagerServiceInterface Loading Loading @@ -1673,40 +1674,77 @@ class PermissionService( context.getSystemService(PermissionControllerManager::class.java)!!.dump(fd, args) } override fun getPermissionTEMP( permissionName: String ): com.android.server.pm.permission.Permission? { // TODO("Not yet implemented") return null override fun getPermissionTEMP(permissionName: String): LegacyPermission2? { val permission = service.getState { with(policy) { getPermissions()[permissionName] } } ?: return null return LegacyPermission2( permission.permissionInfo, permission.type, permission.isReconciled, permission.appId, permission.gids, permission.areGidsPerUser ) } override fun getLegacyPermissions(): List<LegacyPermission> { // TODO("Not yet implemented") return emptyList() override fun getLegacyPermissions(): List<LegacyPermission> = service.getState { with(policy) { getPermissions() } }.mapIndexed { _, _, permission -> LegacyPermission( permission.permissionInfo, permission.type, permission.appId, permission.gids ) } override fun readLegacyPermissionsTEMP(legacyPermissionSettings: LegacyPermissionSettings) { // Package settings has been read when this method is called. service.initialize() // TODO("Not yet implemented") } override fun writeLegacyPermissionsTEMP(legacyPermissionSettings: LegacyPermissionSettings) { // TODO("Not yet implemented") service.getState { val permissions = with(policy) { getPermissions() } legacyPermissionSettings.replacePermissions(toLegacyPermissions(permissions)) val permissionTrees = with(policy) { getPermissionTrees() } legacyPermissionSettings.replacePermissionTrees(toLegacyPermissions(permissionTrees)) } override fun getLegacyPermissionState(appId: Int): LegacyPermissionState { // TODO("Not yet implemented") return LegacyPermissionState() } override fun readLegacyPermissionStateTEMP() { // TODO("Not yet implemented") private fun toLegacyPermissions( permissions: IndexedMap<String, Permission> ): List<LegacyPermission> = permissions.mapIndexed { _, _, permission -> // We don't need to provide UID and GIDs, which are only retrieved when dumping. LegacyPermission( permission.permissionInfo, permission.type, 0, EmptyArray.INT ) } override fun writeLegacyPermissionStateTEMP() { // TODO("Not yet implemented") override fun getLegacyPermissionState(appId: Int): LegacyPermissionState { val legacyState = LegacyPermissionState() val userIds = userManagerService.userIdsIncludingPreCreated service.getState { val permissions = with(policy) { getPermissions() } userIds.forEachIndexed { _, userId -> val permissionFlags = with(policy) { getUidPermissionFlags(appId, userId) } ?: return@forEachIndexed permissionFlags.forEachIndexed permissionFlags@{ _, permissionName, flags -> val permission = permissions[permissionName] ?: return@permissionFlags val legacyPermissionState = LegacyPermissionState.PermissionState( permissionName, permission.isRuntime, PermissionFlags.isPermissionGranted(flags), PermissionFlags.toApiFlags(flags) ) legacyState.putPermissionState(legacyPermissionState, userId) } } } return legacyState } override fun readLegacyPermissionStateTEMP() {} override fun writeLegacyPermissionStateTEMP() {} override fun onSystemReady() { // TODO STOPSHIP privappPermissionsViolationsfix check Loading Loading
services/core/java/com/android/server/pm/permission/Permission.java +9 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,15 @@ public final class Permission { mType = type; } public Permission(@NonNull PermissionInfo permissionInfo, @PermissionType int type, boolean reconciled, int uid, int[] gids, boolean gidsPerUser) { this(permissionInfo, type); mReconciled = reconciled; mUid = uid; mGids = gids; mGidsPerUser = gidsPerUser; } @NonNull public PermissionInfo getPermissionInfo() { return mPermissionInfo; Loading
services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt +7 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,13 @@ inline fun <K, V> IndexedMap<K, V>.retainAllIndexed(predicate: (Int, K, V) -> Bo return isChanged } inline fun <K, V, R> IndexedMap<K, V>.mapIndexed(transform: (Int, K, V) -> R): IndexedList<R> = IndexedList<R>().also { destination -> forEachIndexed { index, key, value -> transform(index, key, value).let { destination += it } } } inline fun <K, V, R> IndexedMap<K, V>.mapNotNullIndexed( transform: (Int, K, V) -> R? ): IndexedList<R> = Loading
services/permission/java/com/android/server/permission/access/permission/PermissionService.kt +57 −19 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.server.pm.UserManagerInternal import com.android.server.pm.UserManagerService import com.android.server.pm.parsing.pkg.AndroidPackageUtils import com.android.server.pm.permission.LegacyPermission import com.android.server.pm.permission.Permission as LegacyPermission2 import com.android.server.pm.permission.LegacyPermissionSettings import com.android.server.pm.permission.LegacyPermissionState import com.android.server.pm.permission.PermissionManagerServiceInterface Loading Loading @@ -1673,40 +1674,77 @@ class PermissionService( context.getSystemService(PermissionControllerManager::class.java)!!.dump(fd, args) } override fun getPermissionTEMP( permissionName: String ): com.android.server.pm.permission.Permission? { // TODO("Not yet implemented") return null override fun getPermissionTEMP(permissionName: String): LegacyPermission2? { val permission = service.getState { with(policy) { getPermissions()[permissionName] } } ?: return null return LegacyPermission2( permission.permissionInfo, permission.type, permission.isReconciled, permission.appId, permission.gids, permission.areGidsPerUser ) } override fun getLegacyPermissions(): List<LegacyPermission> { // TODO("Not yet implemented") return emptyList() override fun getLegacyPermissions(): List<LegacyPermission> = service.getState { with(policy) { getPermissions() } }.mapIndexed { _, _, permission -> LegacyPermission( permission.permissionInfo, permission.type, permission.appId, permission.gids ) } override fun readLegacyPermissionsTEMP(legacyPermissionSettings: LegacyPermissionSettings) { // Package settings has been read when this method is called. service.initialize() // TODO("Not yet implemented") } override fun writeLegacyPermissionsTEMP(legacyPermissionSettings: LegacyPermissionSettings) { // TODO("Not yet implemented") service.getState { val permissions = with(policy) { getPermissions() } legacyPermissionSettings.replacePermissions(toLegacyPermissions(permissions)) val permissionTrees = with(policy) { getPermissionTrees() } legacyPermissionSettings.replacePermissionTrees(toLegacyPermissions(permissionTrees)) } override fun getLegacyPermissionState(appId: Int): LegacyPermissionState { // TODO("Not yet implemented") return LegacyPermissionState() } override fun readLegacyPermissionStateTEMP() { // TODO("Not yet implemented") private fun toLegacyPermissions( permissions: IndexedMap<String, Permission> ): List<LegacyPermission> = permissions.mapIndexed { _, _, permission -> // We don't need to provide UID and GIDs, which are only retrieved when dumping. LegacyPermission( permission.permissionInfo, permission.type, 0, EmptyArray.INT ) } override fun writeLegacyPermissionStateTEMP() { // TODO("Not yet implemented") override fun getLegacyPermissionState(appId: Int): LegacyPermissionState { val legacyState = LegacyPermissionState() val userIds = userManagerService.userIdsIncludingPreCreated service.getState { val permissions = with(policy) { getPermissions() } userIds.forEachIndexed { _, userId -> val permissionFlags = with(policy) { getUidPermissionFlags(appId, userId) } ?: return@forEachIndexed permissionFlags.forEachIndexed permissionFlags@{ _, permissionName, flags -> val permission = permissions[permissionName] ?: return@permissionFlags val legacyPermissionState = LegacyPermissionState.PermissionState( permissionName, permission.isRuntime, PermissionFlags.isPermissionGranted(flags), PermissionFlags.toApiFlags(flags) ) legacyState.putPermissionState(legacyPermissionState, userId) } } } return legacyState } override fun readLegacyPermissionStateTEMP() {} override fun writeLegacyPermissionStateTEMP() {} override fun onSystemReady() { // TODO STOPSHIP privappPermissionsViolationsfix check Loading