diff options
author | 2025-03-14 21:22:52 +0000 | |
---|---|---|
committer | 2025-03-20 17:07:23 -0700 | |
commit | 46db55c94f2d851d78976f189d0dcd92a396ff51 (patch) | |
tree | ec9e63bd5c9f41f87bd5fd705b98a1a47959382b /PermissionController/src | |
parent | 77fd95aa28119818eeb18fae99f7c5836991bd96 (diff) |
Support health split permission check for targetSdk<23 apps
Test: atest HealthConnectAppPermissionFragmentTest
Bug: 403337565
Flag: android.permission.flags.replace_body_sensor_permission_enabled
Relnote: Health permission split BODY_SENSORS to READ_HEART_RATE
LOW_COVERAGE_REASON=b/405152547
Change-Id: I770fdf9a551bb53a6e0d7adccd39ea6bf285c57b
Diffstat (limited to 'PermissionController/src')
-rw-r--r-- | PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java index 327142896..675a1049f 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; @@ -1171,45 +1173,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; } /** |