From a6adf8364d30aa70b8a10885be144861d5c48770 Mon Sep 17 00:00:00 2001 From: Manjeet Rulhania Date: Thu, 13 Feb 2025 22:12:47 -0800 Subject: Remove Livedata implementation for permission timeline page livedata_refactor_permission_timeline_enabled flag was enabled in Nov mainline release, and the old impl can be removed now. No functional change in this CL. Bug: 354234946 Change-Id: I66318714ecc818bc1544681831b75ec74b635419 Test: atest PermissionUsageDetailsViewModelTest PermissionUsageDetailsViewModelTest FLAG: EXEMPT removing obsolete code Relnote: code cleanup --- .../model/livedatatypes/v31/AppPermissionId.kt | 10 - .../livedatatypes/v31/LightHistoricalPackageOps.kt | 241 --------------------- .../model/livedatatypes/v31/LightPackageOps.kt | 81 ------- .../model/livedatatypes/v31/package-info.java | 18 -- 4 files changed, 350 deletions(-) delete mode 100644 PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt delete mode 100644 PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt delete mode 100644 PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt delete mode 100644 PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java (limited to 'PermissionController/src') diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt deleted file mode 100644 index 061bcb8a3..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/AppPermissionId.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.android.permissioncontroller.permission.model.livedatatypes.v31 - -import android.os.UserHandle - -/** Identifier for an app permission group combination. */ -data class AppPermissionId( - val packageName: String, - val userHandle: UserHandle, - val permissionGroup: String, -) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt deleted file mode 100644 index 04cc8a796..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightHistoricalPackageOps.kt +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.permissioncontroller.permission.model.livedatatypes.v31 - -import android.app.AppOpsManager.AttributedHistoricalOps -import android.app.AppOpsManager.AttributedOpEntry -import android.app.AppOpsManager.HistoricalOp -import android.app.AppOpsManager.HistoricalPackageOps -import android.app.AppOpsManager.OP_FLAG_SELF -import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED -import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXY -import android.app.AppOpsManager.OpEventProxyInfo -import android.os.UserHandle -import com.android.permissioncontroller.permission.utils.PermissionMapping.getPlatformPermissionGroupForOp - -/** - * Light version of [HistoricalPackageOps] class, tracking the last permission access for system - * permission groups. - */ -data class LightHistoricalPackageOps( - /** Name of the package. */ - val packageName: String, - /** [UserHandle] running the package. */ - val userHandle: UserHandle, - /** - * Data about permission accesses, one [AppPermissionDiscreteAccesses] for each permission - * group. - */ - // TODO(b/262042582): Consider removing this field and using attributed accesses aggregated over - // attribution tags instead. - val appPermissionDiscreteAccesses: List, - /** - * Attributed data about permission accesses, one [AttributedAppPermissionDiscreteAccesses] for - * each permission group. - */ - val attributedAppPermissionDiscreteAccesses: List -) { - constructor( - historicalPackageOps: HistoricalPackageOps, - userHandle: UserHandle, - opNames: Set - ) : this( - historicalPackageOps.packageName, - userHandle, - historicalPackageOps.getAppPermissionDiscreteAccesses(userHandle, opNames), - historicalPackageOps.getAttributedAppPermissionDiscreteAccesses(userHandle, opNames), - ) - - /** Companion object for [LightHistoricalPackageOps]. */ - companion object { - /** String to represent the absence of an attribution tag. */ - const val NO_ATTRIBUTION_TAG = "no_attribution_tag" - /** String to represent the absence of a permission group. */ - private const val NO_PERM_GROUP = "no_perm_group" - private const val DISCRETE_ACCESS_OP_FLAGS = - OP_FLAG_SELF or OP_FLAG_TRUSTED_PROXIED or OP_FLAG_TRUSTED_PROXY - - /** - * Creates a list of [AppPermissionDiscreteAccesses] for the provided package, user and ops. - */ - private fun HistoricalPackageOps.getAppPermissionDiscreteAccesses( - userHandle: UserHandle, - opNames: Set - ): List { - val permissionsToOpNames = partitionOpsByPermission(opNames) - val appPermissionDiscreteAccesses = mutableListOf() - for (permissionToOpNames in permissionsToOpNames.entries) { - this.getDiscreteAccesses(permissionToOpNames.value)?.let { - appPermissionDiscreteAccesses.add( - AppPermissionDiscreteAccesses( - AppPermissionId(packageName, userHandle, permissionToOpNames.key), - it - ) - ) - } - } - - return appPermissionDiscreteAccesses - } - - /** - * Creates a list of [AttributedAppPermissionDiscreteAccesses] for the provided package, - * user and ops. - */ - private fun HistoricalPackageOps.getAttributedAppPermissionDiscreteAccesses( - userHandle: UserHandle, - opNames: Set - ): List { - val permissionsToOpNames = partitionOpsByPermission(opNames) - val attributedAppPermissionDiscreteAccesses = - mutableMapOf>>() - - val attributedHistoricalOpsList = mutableListOf() - for (i in 0 until attributedOpsCount) { - attributedHistoricalOpsList.add(getAttributedOpsAt(i)) - } - - for (permissionToOpNames in permissionsToOpNames.entries) { - attributedHistoricalOpsList.forEach { attributedHistoricalOps -> - attributedHistoricalOps.getDiscreteAccesses(permissionToOpNames.value)?.let { - discAccessData -> - val appPermissionId = - AppPermissionId(packageName, userHandle, permissionToOpNames.key) - if (!attributedAppPermissionDiscreteAccesses.containsKey(appPermissionId)) { - attributedAppPermissionDiscreteAccesses[appPermissionId] = - mutableMapOf() - } - attributedAppPermissionDiscreteAccesses[appPermissionId]?.put( - attributedHistoricalOps.tag ?: NO_ATTRIBUTION_TAG, - discAccessData - ) - } - } - } - - return attributedAppPermissionDiscreteAccesses.map { - AttributedAppPermissionDiscreteAccesses(it.key, it.value) - } - } - - /** - * Retrieves all discrete accesses for the provided op names, if any. - * - * Returns null if there are no accesses. - */ - private fun HistoricalPackageOps.getDiscreteAccesses( - opNames: List - ): List? { - if (opCount == 0) { - return null - } - - val historicalOps = mutableListOf() - for (opName in opNames) { - getOp(opName)?.let { historicalOps.add(it) } - } - - val discreteAccessList = mutableListOf() - historicalOps.forEach { - for (i in 0 until it.discreteAccessCount) { - val opEntry: AttributedOpEntry = it.getDiscreteAccessAt(i) - discreteAccessList.add( - DiscreteAccess( - it.opName, - opEntry.getLastAccessTime(DISCRETE_ACCESS_OP_FLAGS), - opEntry.getLastDuration(DISCRETE_ACCESS_OP_FLAGS), - opEntry.getLastProxyInfo(DISCRETE_ACCESS_OP_FLAGS) - ) - ) - } - } - - if (discreteAccessList.isEmpty()) { - return null - } - return discreteAccessList.sortedWith(compareBy { -it.accessTimeMs }) - } - - /** - * Retrieves all discrete accesses for the provided op names, if any. - * - * Returns null if there are no accesses. - */ - private fun AttributedHistoricalOps.getDiscreteAccesses( - opNames: List - ): List? { - if (opCount == 0) { - return null - } - - val historicalOps = mutableListOf() - for (opName in opNames) { - getOp(opName)?.let { historicalOps.add(it) } - } - - val discreteAccessList = mutableListOf() - historicalOps.forEach { - for (i in 0 until it.discreteAccessCount) { - val attributedOpEntry: AttributedOpEntry = it.getDiscreteAccessAt(i) - discreteAccessList.add( - DiscreteAccess( - it.opName, - attributedOpEntry.getLastAccessTime(DISCRETE_ACCESS_OP_FLAGS), - attributedOpEntry.getLastDuration(DISCRETE_ACCESS_OP_FLAGS), - attributedOpEntry.getLastProxyInfo(DISCRETE_ACCESS_OP_FLAGS) - ) - ) - } - } - - if (discreteAccessList.isEmpty()) { - return null - } - return discreteAccessList.sortedWith(compareBy { -it.accessTimeMs }) - } - - private fun partitionOpsByPermission(ops: Set): Map> = - ops.groupBy { getPlatformPermissionGroupForOp(it) ?: NO_PERM_GROUP } - .filter { it.key != NO_PERM_GROUP } - } - - /** - * Data class representing permissions accesses for a particular permission group by a - * particular package and user. - */ - data class AppPermissionDiscreteAccesses( - val appPermissionId: AppPermissionId, - val discreteAccesses: List - ) - - /** - * Data class representing permissions accesses for a particular permission group by a - * particular package and user, partitioned by attribution tag. - */ - data class AttributedAppPermissionDiscreteAccesses( - val appPermissionId: AppPermissionId, - val attributedDiscreteAccesses: Map> - ) - - /** Data class representing a discrete permission access. */ - data class DiscreteAccess( - val opName: String, - val accessTimeMs: Long, - val accessDurationMs: Long, - val proxy: OpEventProxyInfo? - ) -} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt deleted file mode 100644 index b65fda5ea..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/LightPackageOps.kt +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.permissioncontroller.permission.model.livedatatypes.v31 - -import android.app.AppOpsManager.OP_FLAG_SELF -import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED -import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXY -import android.app.AppOpsManager.PackageOps -import android.os.UserHandle -import com.android.permissioncontroller.permission.utils.PermissionMapping.getPlatformPermissionGroupForOp - -/** - * Light version of [PackageOps] class, tracking the last permission access for system permission - * groups. - */ -data class LightPackageOps( - /** Name of the package. */ - val packageName: String, - /** [UserHandle] running the package. */ - val userHandle: UserHandle, - /** - * Mapping of permission group name to the last access time of any op backing a permission in - * the group. - */ - val lastPermissionGroupAccessTimesMs: Map -) { - constructor( - ops: Set, - packageOps: PackageOps - ) : this( - packageOps.packageName, - UserHandle.getUserHandleForUid(packageOps.uid), - createLastPermissionGroupAccessTimesMap(ops, packageOps) - ) - - /** Companion object for [LightPackageOps]. */ - companion object { - /** Flags to use for querying an op's last access time. */ - private const val OPS_LAST_ACCESS_FLAGS = - OP_FLAG_SELF or OP_FLAG_TRUSTED_PROXIED or OP_FLAG_TRUSTED_PROXY - - /** Creates a mapping from permission group to the last time it was accessed. */ - private fun createLastPermissionGroupAccessTimesMap( - opNames: Set, - packageOps: PackageOps - ): Map { - val lastAccessTimeMs = mutableMapOf() - // Add keys for all permissions groups covered by the provided ops, regardless of - // whether they have been observed recently. - for (permissionGroup in - opNames.mapNotNull { getPlatformPermissionGroupForOp(it) }.toSet()) { - lastAccessTimeMs[permissionGroup] = -1 - } - - for (opEntry in packageOps.ops) { - val permissionGroupOfOp = getPlatformPermissionGroupForOp(opEntry.opStr) ?: continue - lastAccessTimeMs[permissionGroupOfOp] = - maxOf( - lastAccessTimeMs[permissionGroupOfOp] ?: -1, - opEntry.getLastAccessTime(OPS_LAST_ACCESS_FLAGS) - ) - } - - return lastAccessTimeMs - } - } -} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java deleted file mode 100644 index b724ba43f..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/v31/package-info.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@androidx.annotation.RequiresApi(android.os.Build.VERSION_CODES.S) -package com.android.permissioncontroller.permission.model.livedatatypes.v31; -- cgit v1.2.3-59-g8ed1b