diff options
author | 2025-01-07 21:06:34 -0800 | |
---|---|---|
committer | 2025-01-07 21:06:34 -0800 | |
commit | 6649f3ee949fdce47132a1f6646e4664e16c277f (patch) | |
tree | 8230215a7d2fc557534862464350a96bd87d8dd4 | |
parent | 6c1579787494ae07c22f3818cddc5274d50ac3c6 (diff) | |
parent | 0931f274d85a34251de74d75d6998fd954a1c1a5 (diff) |
Merge "Remove Sensors permission group from PermissionMapping" into main
7 files changed, 175 insertions, 6 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt index a3446f802..13e3a4eb7 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt @@ -181,13 +181,18 @@ object PermissionMapping { Manifest.permission_group.CAMERA } - PLATFORM_PERMISSIONS[Manifest.permission.BODY_SENSORS] = Manifest.permission_group.SENSORS - if (SdkLevel.isAtLeastT()) { PLATFORM_PERMISSIONS[Manifest.permission.POST_NOTIFICATIONS] = Manifest.permission_group.NOTIFICATIONS - PLATFORM_PERMISSIONS[Manifest.permission.BODY_SENSORS_BACKGROUND] = + } + + if (!Flags.replaceBodySensorPermissionEnabled()) { + PLATFORM_PERMISSIONS[Manifest.permission.BODY_SENSORS] = Manifest.permission_group.SENSORS + if (SdkLevel.isAtLeastT()) { + PLATFORM_PERMISSIONS[Manifest.permission.BODY_SENSORS_BACKGROUND] = + Manifest.permission_group.SENSORS + } } for ((permission, permissionGroup) in PLATFORM_PERMISSIONS) { @@ -343,7 +348,7 @@ object PermissionMapping { val appSupportsPickerPrompt = group.permissions[Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED]?.isImplicit == - false + false return if (appSupportsPickerPrompt) { PARTIAL_MEDIA_PERMISSIONS diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java index 3d3b47272..aae5cb82c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java @@ -547,8 +547,14 @@ public final class Utils { if (group.equals(Manifest.permission_group.UNDEFINED)) { List<PermissionInfo> undefinedPerms = new ArrayList<>(); for (PermissionInfo permissionInfo : installedRuntime) { + if (Flags.replaceBodySensorPermissionEnabled() + && (permissionInfo.name.equals(Manifest.permission.BODY_SENSORS) || + permissionInfo.name.equals(Manifest.permission.BODY_SENSORS_BACKGROUND))) { + continue; + } + String permGroup = - PermissionMapping.getGroupOfPlatformPermission(permissionInfo.name); + PermissionMapping.getGroupOfPlatformPermission(permissionInfo.name); if (permGroup == null || permGroup.equals(Manifest.permission_group.UNDEFINED)) { undefinedPerms.add(permissionInfo); } diff --git a/PermissionController/tests/inprocess/Android.bp b/PermissionController/tests/inprocess/Android.bp index 4cd9e0e6f..49e4e9474 100644 --- a/PermissionController/tests/inprocess/Android.bp +++ b/PermissionController/tests/inprocess/Android.bp @@ -53,6 +53,7 @@ android_test { // This may result in two flag libs being included. This should only be used for Flag //string referencing for test annotations. "com.android.permission.flags-aconfig-java-export", + "android.permission.flags-aconfig-java-export", ], data: [ 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 index 2c82269a6..e8e910c4e 100644 --- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt +++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt @@ -19,10 +19,19 @@ package com.android.permissioncontroller.permission.util import android.Manifest import android.app.AppOpsManager import android.health.connect.HealthPermissions +import android.os.Build +import android.permission.flags.Flags +import android.platform.test.annotations.RequiresFlagsDisabled +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SdkSuppress import com.android.permissioncontroller.permission.utils.PermissionMapping import com.google.common.truth.Truth.assertThat +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -31,6 +40,7 @@ import org.junit.runner.RunWith class PermissionMappingTest { @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule() + @JvmField @Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() @Test fun testGetPlatformPermissionGroupForOp_healthPermissionGroup() { @@ -81,4 +91,47 @@ class PermissionMappingTest { PermissionMapping.getGroupOfPlatformPermission(Manifest.permission.READ_CONTACTS) ) } + + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun getGroupOfPlatformPermission_replaceBodySensorFlagEnabled_notHaveSensorsGroup() { + assertNull(PermissionMapping.getGroupOfPlatformPermission(Manifest.permission.BODY_SENSORS)) + assertNull( + PermissionMapping.getGroupOfPlatformPermission( + Manifest.permission.BODY_SENSORS_BACKGROUND + ) + ) + } + + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsDisabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun getGroupOfPlatformPermission_replaceBodySensorFlagDisabled_haveSensorsGroup() { + assertNotNull( + PermissionMapping.getGroupOfPlatformPermission(Manifest.permission.BODY_SENSORS) + ) + assertNotNull( + PermissionMapping.getGroupOfPlatformPermission( + Manifest.permission.BODY_SENSORS_BACKGROUND + ) + ) + } + + + @SdkSuppress( + minSdkVersion = Build.VERSION_CODES.TIRAMISU, + maxSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, + ) + @Test + fun getGroupOfPlatformPermission_preV_haveSensorsGroup() { + assertNotNull( + PermissionMapping.getGroupOfPlatformPermission(Manifest.permission.BODY_SENSORS) + ) + assertNotNull( + PermissionMapping.getGroupOfPlatformPermission( + Manifest.permission.BODY_SENSORS_BACKGROUND + ) + ) + } } diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt index 54fa1900b..1cfe6a5d3 100644 --- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt +++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/UtilsTest.kt @@ -16,6 +16,8 @@ package com.android.permissioncontroller.permission.util +import android.Manifest.permission.BODY_SENSORS +import android.Manifest.permission.BODY_SENSORS_BACKGROUND import android.Manifest.permission.READ_CONTACTS import android.Manifest.permission_group.ACTIVITY_RECOGNITION import android.Manifest.permission_group.CALENDAR @@ -38,7 +40,14 @@ import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager.NameNotFoundException import android.content.res.Resources +import android.os.Build +import android.permission.flags.Flags +import android.platform.test.annotations.RequiresFlagsDisabled +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import androidx.test.filters.SdkSuppress import androidx.test.platform.app.InstrumentationRegistry import com.android.permissioncontroller.Constants.EXTRA_SESSION_ID import com.android.permissioncontroller.Constants.INVALID_SESSION_ID @@ -47,11 +56,16 @@ import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.privacysources.WorkPolicyInfo import com.google.common.truth.Truth.assertThat import kotlin.test.assertFailsWith +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue import org.junit.Ignore import org.junit.Rule import org.junit.Test class UtilsTest { + + @JvmField @Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + private val context = InstrumentationRegistry.getInstrumentation().targetContext as Context @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule() @@ -300,6 +314,59 @@ class UtilsTest { assertThat(permissionInfos[0].name).isEqualTo(READ_CONTACTS) } + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun getInstalledRuntimePermissionInfosForGroup_bodySensorFlagEnabled_bodySensorPermissionsNotIncluded() { + val permissionNamesInUndefinedGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, UNDEFINED) + .map { it.name } + val permissionNamesInSensorsGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, SENSORS) + .map { it.name } + + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS)) + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS_BACKGROUND)) + assertFalse(permissionNamesInSensorsGroup.contains(BODY_SENSORS)) + assertFalse(permissionNamesInSensorsGroup.contains(BODY_SENSORS_BACKGROUND)) + } + + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsDisabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun getInstalledRuntimePermissionInfosForGroup_bodySensorFlagDisabled_bodySensorPermissionsIncluded() { + val permissionNamesInUndefinedGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, UNDEFINED) + .map { it.name } + val permissionNamesInSensorsGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, SENSORS) + .map { it.name } + + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS)) + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS_BACKGROUND)) + assertTrue(permissionNamesInSensorsGroup.contains(BODY_SENSORS)) + assertTrue(permissionNamesInSensorsGroup.contains(BODY_SENSORS_BACKGROUND)) + } + + @SdkSuppress( + minSdkVersion = Build.VERSION_CODES.TIRAMISU, + maxSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, + ) + @Test + fun getInstalledRuntimePermissionInfosForGroup_preV_bodySensorPermissionsIncluded() { + val permissionNamesInUndefinedGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, UNDEFINED) + .map { it.name } + val permissionNamesInSensorsGroup = + Utils.getInstalledRuntimePermissionInfosForGroup(context.packageManager, SENSORS) + .map { it.name } + + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS)) + assertFalse(permissionNamesInUndefinedGroup.contains(BODY_SENSORS_BACKGROUND)) + assertTrue(permissionNamesInSensorsGroup.contains(BODY_SENSORS)) + assertTrue(permissionNamesInSensorsGroup.contains(BODY_SENSORS_BACKGROUND)) + } + @Test fun getColorResId_validId_returnsNonZero() { assertThat(Utils.getColorResId(context, android.R.attr.colorPrimary)) diff --git a/PermissionController/tests/permissionui/Android.bp b/PermissionController/tests/permissionui/Android.bp index 5f177f40c..e0e8fed10 100644 --- a/PermissionController/tests/permissionui/Android.bp +++ b/PermissionController/tests/permissionui/Android.bp @@ -47,6 +47,7 @@ android_test { "androidx.test.ext.truth", "androidx.test.rules", "androidx.test.uiautomator_uiautomator", + "android.permission.flags-aconfig-java-export", "com.android.permission.flags-aconfig-java-export", "compatibility-device-util-axt", "flag-junit", diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/handheld/ManageCustomPermissionsFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/handheld/ManageCustomPermissionsFragmentTest.kt index b38f5f40a..08143f77f 100644 --- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/handheld/ManageCustomPermissionsFragmentTest.kt +++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/handheld/ManageCustomPermissionsFragmentTest.kt @@ -17,11 +17,18 @@ package com.android.permissioncontroller.permissionui.ui.handheld import android.content.Intent +import android.os.Build +import android.permission.flags.Flags import android.permission.cts.PermissionUtils.grantPermission import android.permission.cts.PermissionUtils.install import android.permission.cts.PermissionUtils.revokePermission import android.permission.cts.PermissionUtils.uninstallApp +import android.platform.test.annotations.RequiresFlagsDisabled +import android.platform.test.annotations.RequiresFlagsEnabled +import android.platform.test.flag.junit.CheckFlagsRule +import android.platform.test.flag.junit.DeviceFlagsValueProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SdkSuppress import androidx.test.uiautomator.By import com.android.compatibility.common.util.SystemUtil.eventually import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity @@ -32,13 +39,18 @@ import com.android.permissioncontroller.permissionui.wakeUpScreen import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull import org.junit.Before +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith /** Simple tests for {@link ManageCustomPermissionsFragment} */ @RunWith(AndroidJUnit4::class) class ManageCustomPermissionsFragmentTest : BaseHandheldPermissionUiTest() { + + @JvmField @Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() + private val ONE_PERMISSION_DEFINER_APK = "/data/local/tmp/pc-permissionui/" + "PermissionUiDefineAdditionalPermissionApp.apk" private val PERMISSION_USER_APK = @@ -95,14 +107,38 @@ class ManageCustomPermissionsFragmentTest : BaseHandheldPermissionUiTest() { eventually { assertThat(getUsageCountsFromUi(PERM_LABEL)).isEqualTo(original) } } + + @SdkSuppress( + minSdkVersion = Build.VERSION_CODES.TIRAMISU, + maxSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, + ) + @Test + fun testFindBodySensor_preV_labelDisplayed() { + if (waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)) == null) { + waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click() + assertNotNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL))) + } + } + + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsDisabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) @Test - fun bodySensorsEitherDisplayedInMainPageOrInAdditional() { + fun testFindBodySensor_replaceBodySensorFlagDisabled_labelDisplayed() { if (waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)) == null) { waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click() assertNotNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL))) } } + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) + @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun testFindBodySensor_replaceBodySensorFlagEnabled_labelNotDisplayed() { + assertNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL))) + waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click() + assertNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL))) + } + @After fun tearDown() { uninstallApp(DEFINER_PKG) |