From 4379a4cb56e3bccfea0b5ff271de7699c193f219 Mon Sep 17 00:00:00 2001 From: varun Date: Mon, 29 Nov 2021 05:07:08 +0000 Subject: [PATCH] Add tristate permission support for body sensor permission Currently only states supported for body sensor permissions are allow and deny. This change adds support for allowing the permission only while the app is in foreground by adding a new permission only for background. This structure is similar to the current state for location permissions. BYPASS_INCLUSIVE_LANGUAGE_REASON=Referring to an existing method failing the inclusive language check. Test: Manual atest Change-Id: I8fcab6c0c884b79291586f64fd221e40982bc4c5 Bug: 208305481 --- core/api/current.txt | 1 + core/res/AndroidManifest.xml | 18 ++++++++++++++++++ core/res/res/values/strings.xml | 7 +++++-- data/etc/platform.xml | 4 ++++ .../DefaultPermissionGrantPolicy.java | 1 + .../permission/PermissionManagerService.java | 3 ++- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 5656c31c330af..e916bde7d47a3 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -61,6 +61,7 @@ package android { field public static final String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED"; field public static final String BLUETOOTH_SCAN = "android.permission.BLUETOOTH_SCAN"; field public static final String BODY_SENSORS = "android.permission.BODY_SENSORS"; + field public static final String BODY_SENSORS_BACKGROUND = "android.permission.BODY_SENSORS_BACKGROUND"; field public static final String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED"; field public static final String BROADCAST_SMS = "android.permission.BROADCAST_SMS"; field public static final String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 5781b1edd2427..075329b0e5f45 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1481,8 +1481,26 @@ android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_bodySensors" android:description="@string/permdesc_bodySensors" + android:backgroundPermission="android.permission.BODY_SENSORS_BACKGROUND" android:protectionLevel="dangerous" /> + + + - Allows the app to access data from sensors - that monitor your physical condition, such as your heart rate. + Access to data from body sensors such as heart rate, temperature, blood oxygen percentage, etc. + + access body sensors (like heart rate monitors) while in the background + + Access to data from body sensors such as heart rate, temperature, blood oxygen percentage, etc. while in the background. Read calendar events and details diff --git a/data/etc/platform.xml b/data/etc/platform.xml index 756425eedabba..9f4e1955cafde 100644 --- a/data/etc/platform.xml +++ b/data/etc/platform.xml @@ -222,6 +222,10 @@ targetSdk="29"> + + + diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index ece0a62b78774..297ea75152c85 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -198,6 +198,7 @@ final class DefaultPermissionGrantPolicy { private static final Set SENSORS_PERMISSIONS = new ArraySet<>(); static { SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS); + SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND); } private static final Set STORAGE_PERMISSIONS = new ArraySet<>(); diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 3855e655fb278..8e7622d910698 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -5914,7 +5914,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (op < 0) { // Bg location is one-off runtime modifier permission and has no app op if (sPlatformPermissions.contains(permission) - && !Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permission)) { + && !Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permission) + && !Manifest.permission.BODY_SENSORS_BACKGROUND.equals(permission)) { Slog.wtf(LOG_TAG, "Platform runtime permission " + permission + " with no app op defined!"); }