diff options
author | 2023-04-11 03:42:59 +0000 | |
---|---|---|
committer | 2023-04-11 03:42:59 +0000 | |
commit | 3d500d4c58cae58d565fab0bb92d49c90906b1a1 (patch) | |
tree | 30ac4d1c5e0ee9bc6dfd3f4ef29b4020ece612e8 | |
parent | fae96280aa1c3badcef35ea0383dc7d2f21a99eb (diff) | |
parent | 287223390d6b9ed380acea00085a4ef6a0b79285 (diff) |
Merge "Add tests for PermissionMapping" into udc-dev am: 287223390d
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/Permission/+/22559972
Change-Id: Ic13fdf7fffc9dd1a263c4d364110866364250cfc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
6 files changed, 123 insertions, 40 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt index 91b6de077..cc44a400b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt @@ -85,6 +85,7 @@ import com.android.permissioncontroller.permission.utils.PermissionMapping.getPa import com.android.permissioncontroller.permission.utils.SafetyNetLogger import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.permission.utils.navigateSafe +import com.android.permissioncontroller.permission.utils.v34.SafetyLabelUtils import com.android.settingslib.RestrictedLockUtils import java.util.Random import kotlin.collections.component1 @@ -206,7 +207,7 @@ class AppPermissionViewModel( return } - value = PermissionMapping.getSafetyLabelSharingPurposesForGroup( + value = SafetyLabelUtils.getSafetyLabelSharingPurposesForGroup( safetyLabel, permGroupName).any() } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index 3a689fd72..c6d89876b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -130,6 +130,7 @@ import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.PermissionMapping.getPartialStorageGrantPermissionsForGroup import com.android.permissioncontroller.permission.utils.SafetyNetLogger import com.android.permissioncontroller.permission.utils.Utils +import com.android.permissioncontroller.permission.utils.v34.SafetyLabelUtils /** * ViewModel for the GrantPermissionsActivity. Tracks all permission groups that are affected by @@ -626,7 +627,7 @@ class GrantPermissionsViewModel( return false } - val purposes = PermissionMapping.getSafetyLabelSharingPurposesForGroup(safetyLabel, + val purposes = SafetyLabelUtils.getSafetyLabelSharingPurposesForGroup(safetyLabel, permissionGroupName) return purposes.isNotEmpty() } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v34/PermissionRationaleViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v34/PermissionRationaleViewModel.kt index 3d205a270..561a8eef2 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v34/PermissionRationaleViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v34/PermissionRationaleViewModel.kt @@ -46,7 +46,7 @@ import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity. import com.android.permissioncontroller.permission.ui.v34.PermissionRationaleActivity import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.KotlinUtils.getAppStoreIntent -import com.android.permissioncontroller.permission.utils.PermissionMapping +import com.android.permissioncontroller.permission.utils.v34.SafetyLabelUtils import com.android.settingslib.HelpUtils /** @@ -124,7 +124,7 @@ class PermissionRationaleViewModel( KotlinUtils.getPackageLabel(app, it, Process.myUserHandle()) } - val purposes = PermissionMapping.getSafetyLabelSharingPurposesForGroup( + val purposes = SafetyLabelUtils.getSafetyLabelSharingPurposesForGroup( safetyLabelInfo.safetyLabel, permissionGroupName) if (value == null) { logPermissionRationaleDialogViewed(purposes) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt index c4355b1e5..be72e6f2f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt @@ -26,11 +26,7 @@ import android.util.Log import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup -import com.android.permission.safetylabel.DataCategory import com.android.permission.safetylabel.DataCategoryConstants -import com.android.permission.safetylabel.DataType -import com.android.permission.safetylabel.DataTypeConstants -import com.android.permission.safetylabel.SafetyLabel /** * This file contains the canonical mapping of permission to permission group, used in the @@ -390,38 +386,6 @@ object PermissionMapping { return AppOpsManager.opToPermission(opName)?.let { getGroupOfPlatformPermission(it) } } - /* - * Get the sharing purposes for a SafetyLabel related to a specific permission group. - */ - @JvmStatic - fun getSafetyLabelSharingPurposesForGroup( - safetyLabel: SafetyLabel, - groupName: String - ): Set<Int> { - val purposeSet = mutableSetOf<Int>() - val categoriesForPermission = getDataCategoriesForPermissionGroup(groupName) - categoriesForPermission.forEach categoryLoop@{ category -> - val dataCategory: DataCategory? = safetyLabel.dataLabel.dataShared[category] - if (dataCategory == null) { - // Continue to next - return@categoryLoop - } - val typesForCategory = DataTypeConstants.getValidDataTypesForCategory(category) - typesForCategory.forEach typeLoop@{ type -> - val dataType: DataType? = dataCategory.dataTypes[type] - if (dataType == null) { - // Continue to next - return@typeLoop - } - if (dataType.purposeSet.isNotEmpty()) { - purposeSet.addAll(dataType.purposeSet) - } - } - } - - return purposeSet - } - /** * Get the SafetyLabel categories pertaining to a specified permission group. * diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/v34/SafetyLabelUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/v34/SafetyLabelUtils.kt new file mode 100644 index 000000000..5dbe203f9 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/v34/SafetyLabelUtils.kt @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package com.android.permissioncontroller.permission.utils.v34 + +import com.android.permission.safetylabel.DataCategory +import com.android.permission.safetylabel.DataType +import com.android.permission.safetylabel.DataTypeConstants +import com.android.permission.safetylabel.SafetyLabel +import com.android.permissioncontroller.permission.utils.PermissionMapping + +object SafetyLabelUtils { + /* + * Get the sharing purposes for a SafetyLabel related to a specific permission group. + */ + @JvmStatic + fun getSafetyLabelSharingPurposesForGroup( + safetyLabel: SafetyLabel, + groupName: String + ): Set<Int> { + val purposeSet = mutableSetOf<Int>() + val categoriesForPermission = PermissionMapping + .getDataCategoriesForPermissionGroup(groupName) + categoriesForPermission.forEach categoryLoop@{ category -> + val dataCategory: DataCategory? = safetyLabel.dataLabel.dataShared[category] + if (dataCategory == null) { + // Continue to next + return@categoryLoop + } + val typesForCategory = DataTypeConstants.getValidDataTypesForCategory(category) + typesForCategory.forEach typeLoop@{ type -> + val dataType: DataType? = dataCategory.dataTypes[type] + if (dataType == null) { + // Continue to next + return@typeLoop + } + if (dataType.purposeSet.isNotEmpty()) { + purposeSet.addAll(dataType.purposeSet) + } + } + } + + return purposeSet + } +} diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt new file mode 100644 index 000000000..64a13df60 --- /dev/null +++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package com.android.permissioncontroller.permission.util + +import android.Manifest +import android.app.AppOpsManager +import android.health.connect.HealthPermissions +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.permissioncontroller.permission.utils.PermissionMapping +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class PermissionMappingTest { + @Test + fun testGetPlatformPermissionGroupForOp_healthPermissionGroup() { + assertThat(PermissionMapping.getPlatformPermissionGroupForOp( + AppOpsManager.OPSTR_READ_WRITE_HEALTH_DATA + )).isEqualTo(HealthPermissions.HEALTH_PERMISSION_GROUP) + } + + @Test + fun testGetPlatformPermissionGroupForOp_microphone() { + assertThat(PermissionMapping.getPlatformPermissionGroupForOp( + AppOpsManager.OPSTR_PHONE_CALL_MICROPHONE + )).isEqualTo(Manifest.permission_group.MICROPHONE) + } + + @Test + fun testGetPlatformPermissionGroupForOp_camera() { + assertThat( + PermissionMapping.getPlatformPermissionGroupForOp(AppOpsManager.OPSTR_PHONE_CALL_CAMERA) + ).isEqualTo(Manifest.permission_group.CAMERA) + } + + @Test + fun testGetPlatformPermissionGroupForOp_readContacts() { + assertThat( + PermissionMapping.getPlatformPermissionGroupForOp(AppOpsManager.OPSTR_READ_CONTACTS) + ).isEqualTo( + PermissionMapping.getGroupOfPlatformPermission(Manifest.permission.READ_CONTACTS) + ) + } +} |