From 1378bb8df731e8be31bb2372741b4ab1ccacddef Mon Sep 17 00:00:00 2001 From: Justin Lannin Date: Wed, 19 Mar 2025 14:04:37 -0700 Subject: Wear: Hide health group if not requesting system permissions. This fixes a corner case where if a Wear app is only requesting non-system health permissions, the chip should not be shown. As a consequence this would hide apps only requesting something invalid on Wear like READ_STEPS. This would also hide apps only requesting READ_HEALTH_DATA_IN_BACKGROUND. Bug: 401089783 Test: Local test with app only requesting non-system permissions. See that the chip is hidden. Flag: android.permission.flags.replace_body_sensor_permission_enabled Change-Id: Id2533e06ee9e6df30c5bf2bbdeba04e427810027 Relnote: Fix health chip shown corner case on Wear. --- .../permissioncontroller/permission/utils/Utils.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'PermissionController/src') diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java index 327142896..93e5abc70 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java @@ -1109,10 +1109,23 @@ public final class Utils { return false; } - // Always show Fitness&Wellness chip on Wear. + // Only show Fitness&Wellness chip on Wear if the app is requesting system permissions. if (Flags.replaceBodySensorPermissionEnabled() - && pm.hasSystemFeature(PackageManager.FEATURE_WATCH)) { - return true; + && pm.hasSystemFeature(PackageManager.FEATURE_WATCH)) { + Set requestedPermissions = new HashSet<>(packageInfo.getRequestedPermissions()); + for (PermissionInfo permission : permissions) { + if (!requestedPermissions.contains(permission.name)) { + continue; + } + String appOpStr = AppOpsManager.permissionToOp(permission.name); + if (appOpStr != null + && !appOpStr.equals(AppOpsManager.OPSTR_READ_WRITE_HEALTH_DATA)) { + // Found system health permission. Show the chip. + return true; + } + } + // No valid system permissions are requested. + return false; } // Check in permission is already granted as we should not hide it in the UX at that point. -- cgit v1.2.3-59-g8ed1b