summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/res/xml/roles.xml3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java18
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java2
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt41
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/LocationUtils.java3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java46
-rw-r--r--PermissionController/tests/permissionui/Android.bp1
-rw-r--r--PermissionController/tests/permissionui/AndroidTest.xml2
-rw-r--r--PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/Android.bp34
-rw-r--r--PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/AndroidManifest.xml25
-rw-r--r--PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt3
-rw-r--r--PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt17
-rw-r--r--PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/TestAppUtils.kt4
-rw-r--r--tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java3
-rw-r--r--tests/cts/permissionpolicy/res/raw/android_manifest.xml4
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt2
16 files changed, 140 insertions, 68 deletions
diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml
index 4ba524462..41eaf8b6e 100644
--- a/PermissionController/res/xml/roles.xml
+++ b/PermissionController/res/xml/roles.xml
@@ -1938,7 +1938,8 @@
</role>
<role
- name="android.app.role.COMPANION_DEVICE_SENSOR_DEVICE_STREAMING"
+ name="android.app.role.COMPANION_DEVICE_VIRTUAL_DEVICE"
+ allowBypassingQualification="true"
exclusive="false"
exclusivity="none"
featureFlag="android.companion.virtualdevice.flags.Flags.enableLimitedVdmRole"
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java
index 026f108fa..39ca24a71 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionFragment.java
@@ -182,10 +182,8 @@ public class AutoAppPermissionFragment extends AutoSettingsFrameFragment
if (SdkLevel.isAtLeastV()) {
mSensorPrivacyManager = requireContext().getSystemService(SensorPrivacyManager.class);
mCameraPrivacyAllowlist = mSensorPrivacyManager.getCameraPrivacyAllowlist();
- if (Flags.addBannersToPrivacySensitiveAppsForAaos()) {
- mAutomotiveLocationBypassAllowlist =
- LocationUtils.getAutomotiveLocationBypassAllowlist(requireContext());
- }
+ mAutomotiveLocationBypassAllowlist =
+ LocationUtils.getAutomotiveLocationBypassAllowlist(requireContext());
}
}
@@ -317,13 +315,11 @@ public class AutoAppPermissionFragment extends AutoSettingsFrameFragment
if (Manifest.permission_group.CAMERA.equals(mPermGroupName)) {
mViewModel.getSensorStatusLiveData().observe(this, this::setSensorStatus);
}
- if (Flags.addBannersToPrivacySensitiveAppsForAaos()) {
- if (Manifest.permission_group.LOCATION.equals(mPermGroupName)) {
- mViewModel.getSensorStatusLiveData().observe(this, this::setSensorStatus);
- }
- if (Manifest.permission_group.MICROPHONE.equals(mPermGroupName)) {
- mViewModel.getSensorStatusLiveData().observe(this, this::setSensorStatus);
- }
+ if (Manifest.permission_group.LOCATION.equals(mPermGroupName)) {
+ mViewModel.getSensorStatusLiveData().observe(this, this::setSensorStatus);
+ }
+ if (Manifest.permission_group.MICROPHONE.equals(mPermGroupName)) {
+ mViewModel.getSensorStatusLiveData().observe(this, this::setSensorStatus);
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
index 969ac17eb..e995588b2 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
@@ -492,7 +492,7 @@ public final class AppPermissionGroupsFragment extends SettingsWithLargeHeader i
}
private boolean isArchivingEnabled() {
- return SdkLevel.isAtLeastV() && Flags.archivingReadOnly();
+ return SdkLevel.isAtLeastV();
}
private void setAutoRevokeToggleState(HibernationSettingState state) {
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt
index 2933d6fda..38a3b44e9 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt
@@ -44,6 +44,7 @@ import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissi
import com.android.permissioncontroller.permission.ui.wear.model.WearLocationProviderInterceptDialogViewModel
import com.android.permissioncontroller.permission.utils.ArrayUtils
import com.android.permissioncontroller.permission.utils.LocationUtils
+import com.android.permissioncontroller.permission.utils.PermissionMapping
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.legacy.LegacySafetyNetLogger
import com.android.permissioncontroller.permission.utils.navigateSafe
@@ -59,7 +60,7 @@ class WearAppPermissionGroupsHelper(
val wearViewModel: WearAppPermissionUsagesViewModel,
val revokeDialogViewModel: AppPermissionGroupsRevokeDialogViewModel,
val locationProviderInterceptDialogViewModel: WearLocationProviderInterceptDialogViewModel,
- private val toggledGroups: ArraySet<AppPermissionGroup> = ArraySet()
+ private val toggledGroups: ArraySet<AppPermissionGroup> = ArraySet(),
) {
fun getPermissionGroupChipParams(
appPermissionUsages: List<AppPermissionUsage>
@@ -71,7 +72,7 @@ class WearAppPermissionGroupsHelper(
viewModel.extractGroupUsageLastAccessTime(
groupUsageLastAccessTime,
appPermissionUsages,
- packageName
+ packageName,
)
val groupUiInfos = viewModel.packagePermGroupsLiveData.value
val groups: List<AppPermissionGroup> = appPermissions.permissionGroups
@@ -92,7 +93,7 @@ class WearAppPermissionGroupsHelper(
groups
.filter { Utils.shouldShowPermission(context, it) }
- .partition { it.declaringPackage == Utils.OS_PKG }
+ .partition { PermissionMapping.isPlatformPermissionGroup(it.name) }
.let { it.first.plus(it.second) }
.forEach { group ->
if (Utils.areGroupPermissionsIndividuallyControlled(context, group.name)) {
@@ -107,7 +108,7 @@ class WearAppPermissionGroupsHelper(
checked = group.areRuntimePermissionsGranted(arrayOf(perm.name)),
onCheckedChanged = { checked ->
run { onPermissionGrantedStateChanged(group, perm, checked) }
- }
+ },
)
)
}
@@ -123,10 +124,10 @@ class WearAppPermissionGroupsHelper(
getSummary(
category,
it,
- groupUsageLastAccessTime[it.groupName]
+ groupUsageLastAccessTime[it.groupName],
)
},
- onClick = { onPermissionGroupClicked(group, category.categoryName) }
+ onClick = { onPermissionGroupClicked(group, category.categoryName) },
)
)
}
@@ -138,7 +139,7 @@ class WearAppPermissionGroupsHelper(
private fun getSummary(
category: Category?,
groupUiInfo: GroupUiInfo,
- lastAccessTime: Long?
+ lastAccessTime: Long?,
): String {
val grantSummary =
getGrantSummary(category, groupUiInfo)?.let { context.getString(it) } ?: ""
@@ -196,7 +197,7 @@ class WearAppPermissionGroupsHelper(
private fun onPermissionGrantedStateChanged(
group: AppPermissionGroup,
perm: PermissionInfo,
- checked: Boolean
+ checked: Boolean,
) {
if (checked) {
group.grantRuntimePermissions(true, false, arrayOf(perm.name))
@@ -247,7 +248,7 @@ class WearAppPermissionGroupsHelper(
revokeDialogViewModel.hasConfirmedRevoke = true
}
revokeDialogViewModel.dismissDialog()
- }
+ },
)
} else {
revokePermissionInGroup(group, perm.name)
@@ -261,7 +262,7 @@ class WearAppPermissionGroupsHelper(
if ("user" == Build.TYPE) {
Log.e(
TAG,
- "The impossible happens, permission $permName is not in group $group.name."
+ "The impossible happens, permission $permName is not in group $group.name.",
)
null
} else {
@@ -291,13 +292,13 @@ class WearAppPermissionGroupsHelper(
private fun showRevocationWarningDialog(
messageId: Int,
onOkButtonClick: () -> Unit,
- onCancelButtonClick: () -> Unit = { revokeDialogViewModel.dismissDialog() }
+ onCancelButtonClick: () -> Unit = { revokeDialogViewModel.dismissDialog() },
) {
revokeDialogViewModel.revokeDialogArgs =
RevokeDialogArgs(
messageId = messageId,
onOkButtonClick = onOkButtonClick,
- onCancelButtonClick = onCancelButtonClick
+ onCancelButtonClick = onCancelButtonClick,
)
revokeDialogViewModel.showDialogLiveData.value = true
}
@@ -315,13 +316,15 @@ class WearAppPermissionGroupsHelper(
LocationUtils.isLocationGroupAndControllerExtraPackage(
context,
permGroupName,
- packageName
+ packageName,
)
) {
// Redirect to location controller extra package settings.
LocationUtils.startLocationControllerExtraPackageSettings(context, user)
- } else if (permGroupName.equals(HEALTH_PERMISSION_GROUP)
- && android.permission.flags.Flags.replaceBodySensorPermissionEnabled()) {
+ } else if (
+ permGroupName.equals(HEALTH_PERMISSION_GROUP) &&
+ android.permission.flags.Flags.replaceBodySensorPermissionEnabled()
+ ) {
// Redirect to Health&Fitness UI
Utils.navigateToAppHealthConnectSettings(fragment.requireContext(), packageName, user)
} else {
@@ -333,7 +336,7 @@ class WearAppPermissionGroupsHelper(
user,
caller,
sessionId,
- grantCategory
+ grantCategory,
)
fragment.findNavController().navigateSafe(R.id.perm_groups_to_app, args)
}
@@ -364,7 +367,7 @@ class WearAppPermissionGroupsHelper(
viewModel.setAutoRevoke(checked)
Log.w(TAG, "setAutoRevoke $checked")
}
- }
+ },
)
}
@@ -382,12 +385,12 @@ data class PermissionGroupChipParam(
val enabled: Boolean = true,
val checked: Boolean? = null,
val onClick: () -> Unit = {},
- val onCheckedChanged: (Boolean) -> Unit = {}
+ val onCheckedChanged: (Boolean) -> Unit = {},
)
data class AutoRevokeChipParam(
val labelRes: Int,
val visible: Boolean,
val checked: Boolean = false,
- val onCheckedChanged: (Boolean) -> Unit
+ val onCheckedChanged: (Boolean) -> Unit,
)
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/LocationUtils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/LocationUtils.java
index 3d1e44b6a..76ce9b273 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/LocationUtils.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/LocationUtils.java
@@ -40,7 +40,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import com.android.modules.utils.build.SdkLevel;
-import com.android.permission.flags.Flags;
import com.android.permissioncontroller.PermissionControllerApplication;
import com.android.permissioncontroller.R;
@@ -117,7 +116,7 @@ public class LocationUtils {
/** Checks if the provided package is an automotive location bypass allowlisted package. */
public static boolean isAutomotiveLocationBypassAllowlistedPackage(
Context context, String packageName) {
- return SdkLevel.isAtLeastV() && Flags.addBannersToPrivacySensitiveAppsForAaos()
+ return SdkLevel.isAtLeastV()
&& getAutomotiveLocationBypassAllowlist(context).contains(packageName);
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
index 93e5abc70..425375d7a 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
@@ -39,6 +39,7 @@ import static android.content.Intent.EXTRA_REASON;
import static android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_WHEN_REQUESTED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED;
import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED;
@@ -82,6 +83,7 @@ import android.health.connect.HealthConnectManager;
import android.health.connect.HealthPermissions;
import android.os.Binder;
import android.os.Build;
+import android.os.Build.VERSION_CODES;
import android.os.Parcelable;
import android.os.UserHandle;
import android.os.UserManager;
@@ -1184,45 +1186,29 @@ public final class Utils {
}
}
- // Split permission only applies to READ_HEART_RATE.
- if (!requestedHealthPermissions.contains(HealthPermissions.READ_HEART_RATE)) {
+ if (!isValidSplitHealthPermissions(requestedHealthPermissions)) {
return false;
}
- // If there are other health permissions (other than READ_HEALTH_DATA_IN_BACKGROUND)
- // don't consider this a pure split-permission request.
- if (requestedHealthPermissions.size() > 2) {
- return false;
- }
-
- boolean isBackgroundPermissionRequested =
- requestedHealthPermissions.contains(
- HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND);
- // If there are two health permissions declared, make sure the other is
- // READ_HEALTH_DATA_IN_BACKGROUND.
- if (requestedHealthPermissions.size() == 2 && !isBackgroundPermissionRequested) {
- return false;
- }
-
- // If READ_HEALTH_DATA_IN_BACKGROUND is requested, check permission flag to see if is from
- // split permission.
- if (isBackgroundPermissionRequested) {
- int readHealthDataInBackgroundFlag =
- pm.getPermissionFlags(
- HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND, packageName, user);
- if (!isFromSplitPermission(readHealthDataInBackgroundFlag)) {
+ int targetSdk = packageInfo.getTargetSdkVersion();
+ for (String perm : requestedHealthPermissions) {
+ if (!isFromSplitPermission(pm.getPermissionFlags(perm, packageName, user), targetSdk)) {
return false;
}
}
+ return true;
+ }
- // Check READ_HEART_RATE permission flag to see if is from split permission.
- int readHeartRateFlag =
- pm.getPermissionFlags(HealthPermissions.READ_HEART_RATE, packageName, user);
- return isFromSplitPermission(readHeartRateFlag);
+ private static boolean isValidSplitHealthPermissions(List<String> permissions) {
+ return (permissions.size() == 1 && permissions.contains(HealthPermissions.READ_HEART_RATE))
+ || (permissions.size() == 2 && permissions.contains(HealthPermissions.READ_HEART_RATE)
+ && permissions.contains(HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND));
}
- private static boolean isFromSplitPermission(int permissionFlag) {
- return (permissionFlag & FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) != 0;
+ private static boolean isFromSplitPermission(int permissionFlag, int targetSdk) {
+ return (targetSdk >= Build.VERSION_CODES.M)
+ ? (permissionFlag & PackageManager.FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) != 0
+ : (permissionFlag & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0;
}
/**
diff --git a/PermissionController/tests/permissionui/Android.bp b/PermissionController/tests/permissionui/Android.bp
index 8cc91bd99..e289e2c58 100644
--- a/PermissionController/tests/permissionui/Android.bp
+++ b/PermissionController/tests/permissionui/Android.bp
@@ -74,6 +74,7 @@ android_test {
":PermissionUiReadCalendarPermissionApp",
":PermissionUiUseLegacyBodySensorsPermissionApp",
":PermissionUiUseReadHeartRatePermissionApp",
+ ":PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App",
],
per_testcase_directory: true,
}
diff --git a/PermissionController/tests/permissionui/AndroidTest.xml b/PermissionController/tests/permissionui/AndroidTest.xml
index 2462dc4c7..85dc4925a 100644
--- a/PermissionController/tests/permissionui/AndroidTest.xml
+++ b/PermissionController/tests/permissionui/AndroidTest.xml
@@ -61,6 +61,8 @@
value="/data/local/tmp/pc-permissionui/PermissionUiUseLegacyBodySensorsPermissionApp.apk" />
<option name="push-file" key="PermissionUiUseReadHeartRatePermissionApp.apk"
value="/data/local/tmp/pc-permissionui/PermissionUiUseReadHeartRatePermissionApp.apk" />
+ <option name="push-file" key="PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App.apk"
+ value="/data/local/tmp/pc-permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App.apk" />
</target_preparer>
<!-- Wake the screen, and dismiss keyguard -->
diff --git a/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/Android.bp b/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/Android.bp
new file mode 100644
index 000000000..539fb2686
--- /dev/null
+++ b/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/Android.bp
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2025 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 {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "packages_modules_Permission_PermissionController_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: [
+ "packages_modules_Permission_PermissionController_license",
+ ],
+}
+
+android_test_helper_app {
+ name: "PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App",
+
+ srcs: ["src/**/*.kt"],
+
+ sdk_version: "22",
+}
diff --git a/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/AndroidManifest.xml b/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/AndroidManifest.xml
new file mode 100644
index 000000000..2a08d47ae
--- /dev/null
+++ b/PermissionController/tests/permissionui/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2025 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.permissioncontroller.tests.appthatrequestpermission">
+
+ <uses-permission android:name="android.permission.BODY_SENSORS" />
+ <uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" />
+
+ <application />
+</manifest>
diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
index 10670c5d5..1c6705d3e 100644
--- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
+++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
@@ -31,6 +31,7 @@ import org.junit.After
import org.junit.Assert.assertNull
import org.junit.Assume.assumeFalse
import org.junit.Before
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -74,6 +75,7 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@Test
+ @Ignore("b/405152547")
fun usedHealthConnectPermissionsAreListed_healthFitnessBrand() {
installTestAppThatUsesHealthConnectPermission()
@@ -115,6 +117,7 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@Test
+ @Ignore("b/405152547")
fun invalidUngrantedUsedHealthConnectPermissionsAreNotListed_healthFitnessBrand() {
installInvalidTestAppThatUsesHealthConnectPermission()
diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
index a0de2f7cd..48d14a967 100644
--- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
+++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
@@ -36,6 +36,7 @@ import org.junit.After
import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -84,6 +85,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@Test
+ @Ignore("b/405152547")
fun usedHealthConnectPermissionsAreListed_handHeldDevices_healthFitnessBrand() {
assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
installTestAppThatUsesHealthConnectPermission()
@@ -131,6 +133,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
@Test
+ @Ignore("b/405152547")
fun startManageAppPermissionsActivity_handHeldDevices_requestLegacyBodySensorsUngranted_healthConnectShowsUp() {
assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
installTestAppThatUsesLegacyBodySensorsPermissions()
@@ -143,6 +146,20 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
@Test
+ @Ignore("b/405152547")
+ fun startManageAppPermissionsActivity_handHeldDevices_requestLegacyBodySensorsTargetSdk22Ungranted_healthConnectShowsUp() {
+ assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
+ installTestAppThatUsesLegacyBodySensorsPermissionsTargetSdk22()
+
+ startManageAppPermissionsActivity()
+
+ eventually { waitFindObject(By.text(HEALTH_FITNESS_LABEL)) }
+ }
+
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
+ @RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
+ @Test
fun startManageAppPermissionsActivity_handHeldDevices_requestReadHeartRateUngranted_healthConnectNotShowsUp() {
assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
installTestAppThatUsesReadHeartRatePermissions()
diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/TestAppUtils.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/TestAppUtils.kt
index 8eef11e73..c3799c4c1 100644
--- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/TestAppUtils.kt
+++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/TestAppUtils.kt
@@ -40,6 +40,8 @@ private const val LEGACY_BODY_SENSORS_APK =
"$APK_DIRECTORY/PermissionUiUseLegacyBodySensorsPermissionApp.apk"
private const val READ_HEART_RATE_APK =
"$APK_DIRECTORY/PermissionUiUseReadHeartRatePermissionApp.apk"
+private const val LEGACY_BODY_SENSORS_TARGET_SDK_22_APK =
+ "$APK_DIRECTORY/PermissionUiUseLegacyBodySensorsPermissionTargetSdk22App.apk"
// All 4 of the AppThatUses_X_Permission(s) applications share the same package name.
private const val PERM_DEFINER_PACKAGE =
@@ -77,6 +79,8 @@ fun installTestAppThatUsesLegacyBodySensorsPermissions() = install(LEGACY_BODY_S
fun installTestAppThatUsesReadHeartRatePermissions() = install(READ_HEART_RATE_APK)
+fun installTestAppThatUsesLegacyBodySensorsPermissionsTargetSdk22() = install(LEGACY_BODY_SENSORS_TARGET_SDK_22_APK)
+
fun uninstallTestApps() {
uninstallApp(PERM_USER_PACKAGE)
uninstallApp(PERM_DEFINER_PACKAGE)
diff --git a/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java b/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java
index 437aa19c4..ce724b13e 100644
--- a/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java
+++ b/tests/cts/permission/src/android/permission/cts/NoSystemFunctionPermissionTest.java
@@ -166,7 +166,8 @@ public class NoSystemFunctionPermissionTest extends AndroidTestCase {
*/
@SmallTest
public void testSendSms() {
- if (!getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+ if (!getContext().getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
return;
}
diff --git a/tests/cts/permissionpolicy/res/raw/android_manifest.xml b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
index 4476d934b..200e3cf42 100644
--- a/tests/cts/permissionpolicy/res/raw/android_manifest.xml
+++ b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
@@ -4554,12 +4554,12 @@
android:protectionLevel="signature|privileged" />
<!-- Allows application to request to stream content from an Android host to a nearby device
- ({@link android.companion.AssociationRequest#DEVICE_PROFILE_SENSOR_DEVICE_STREAMING})
+ ({@link android.companion.AssociationRequest#DEVICE_PROFILE_VIRTUAL_DEVICE})
by {@link android.companion.CompanionDeviceManager}.
<p>Not for use by third-party applications.
@FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ENABLE_LIMITED_VDM_ROLE)
-->
- <permission android:name="android.permission.REQUEST_COMPANION_PROFILE_SENSOR_DEVICE_STREAMING"
+ <permission android:name="android.permission.REQUEST_COMPANION_PROFILE_VIRTUAL_DEVICE"
android:protectionLevel="signature|privileged"
android:featureFlag="android.companion.virtualdevice.flags.enable_limited_vdm_role" />
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
index eda6e92be..432d1efb1 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
@@ -691,7 +691,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
waitForPermissionRequestActivity()
} else {
doAndWaitForWindowTransition {
- startActivityForFuture(*permissions, askTwice = askTwice)
+ future = startActivityForFuture(*permissions, askTwice = askTwice)
}
}