Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f6ff566 authored by Nagesh Pachorkar's avatar Nagesh Pachorkar
Browse files

Introduced granular skin temperature permissions

Introduced granular permissions BODY_SENSORS_WRIST_TEMPERATURE and BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND similar to BODY_SENSORS and BODY_SENSORS_BACKGROUND for providing more controlled skin temperature data access using WearOS watches.

Test: CTS
Bug: 260639955

BYPASS_INCLUSIVE_LANGUAGE_REASON=Contains a legacy method name which
violates the presubmit lint validation.

Change-Id: I77923dab2c8568a5a58a4e2bb8a6822106ec12fd
parent cedba056
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ package android {
    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 BODY_SENSORS_WRIST_TEMPERATURE = "android.permission.BODY_SENSORS_WRIST_TEMPERATURE";
    field public static final String BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND = "android.permission.BODY_SENSORS_WRIST_TEMPERATURE_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";
@@ -4845,6 +4847,7 @@ package android.app {
    field public static final String OPSTR_ADD_VOICEMAIL = "android:add_voicemail";
    field public static final String OPSTR_ANSWER_PHONE_CALLS = "android:answer_phone_calls";
    field public static final String OPSTR_BODY_SENSORS = "android:body_sensors";
    field public static final String OPSTR_BODY_SENSORS_WRIST_TEMPERATURE = "android:body_sensors_wrist_temperature";
    field public static final String OPSTR_CALL_PHONE = "android:call_phone";
    field public static final String OPSTR_CAMERA = "android:camera";
    field public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -12738,7 +12741,7 @@ package android.content.pm {
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_CAMERA}, anyOf={android.Manifest.permission.CAMERA}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_CAMERA = 64; // 0x40
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE}, anyOf={android.Manifest.permission.BLUETOOTH_ADVERTISE, android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.CHANGE_NETWORK_STATE, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.CHANGE_WIFI_MULTICAST_STATE, android.Manifest.permission.NFC, android.Manifest.permission.TRANSMIT_IR, android.Manifest.permission.UWB_RANGING}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 16; // 0x10
    field @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_DATA_SYNC, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 1; // 0x1
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_HEALTH}, anyOf={android.Manifest.permission.ACTIVITY_RECOGNITION, android.Manifest.permission.BODY_SENSORS, android.Manifest.permission.HIGH_SAMPLING_RATE_SENSORS}) public static final int FOREGROUND_SERVICE_TYPE_HEALTH = 256; // 0x100
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_HEALTH}, anyOf={android.Manifest.permission.ACTIVITY_RECOGNITION, android.Manifest.permission.BODY_SENSORS, android.Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE, android.Manifest.permission.HIGH_SAMPLING_RATE_SENSORS}) public static final int FOREGROUND_SERVICE_TYPE_HEALTH = 256; // 0x100
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_LOCATION}, anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 8; // 0x8
    field public static final int FOREGROUND_SERVICE_TYPE_MANIFEST = -1; // 0xffffffff
    field @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK = 2; // 0x2
+16 −2
Original line number Diff line number Diff line
@@ -1448,9 +1448,13 @@ public class AppOpsManager {
    public static final int OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD =
            AppProtoEnums.APP_OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD;

    /** @hide Access to wrist temperature sensors. */
    public static final int OP_BODY_SENSORS_WRIST_TEMPERATURE =
            AppProtoEnums.APP_OP_BODY_SENSORS_WRIST_TEMPERATURE;

    /** @hide */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    public static final int _NUM_OP = 132;
    public static final int _NUM_OP = 133;

    /** Access to coarse location information. */
    public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -2030,6 +2034,10 @@ public class AppOpsManager {
    public static final String OPSTR_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD =
            "android:capture_consentless_bugreport_on_userdebug_build";

    /** Access to wrist temperature body sensors. */
    public static final String OPSTR_BODY_SENSORS_WRIST_TEMPERATURE =
            "android:body_sensors_wrist_temperature";

    /** {@link #sAppOpsToNote} not initialized yet for this op */
    private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
    /** Should not collect noting of this app-op in {@link #sAppOpsToNote} */
@@ -2128,6 +2136,7 @@ public class AppOpsManager {
            OP_READ_MEDIA_VISUAL_USER_SELECTED,
            OP_FOREGROUND_SERVICE_SPECIAL_USE,
            OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
            OP_BODY_SENSORS_WRIST_TEMPERATURE,
    };

    static final AppOpInfo[] sAppOpInfos = new AppOpInfo[]{
@@ -2541,7 +2550,12 @@ public class AppOpsManager {
                OPSTR_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
                "CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD")
                .setPermission(Manifest.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD)
                .build()
                .build(),
        new AppOpInfo.Builder(OP_BODY_SENSORS_WRIST_TEMPERATURE,
                OPSTR_BODY_SENSORS_WRIST_TEMPERATURE,
                "BODY_SENSORS_WRIST_TEMPERATURE")
                .setPermission(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE)
                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build()
    };

    // The number of longs needed to form a full bitmask of app ops
+1 −0
Original line number Diff line number Diff line
@@ -350,6 +350,7 @@ public abstract class ForegroundServiceTypePolicy {
            new ForegroundServiceTypePermissions(new ForegroundServiceTypePermission[] {
                new RegularPermission(Manifest.permission.ACTIVITY_RECOGNITION),
                new RegularPermission(Manifest.permission.BODY_SENSORS),
                new RegularPermission(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE),
                new RegularPermission(Manifest.permission.HIGH_SAMPLING_RATE_SENSORS),
            }, false)
    );
+2 −0
Original line number Diff line number Diff line
@@ -323,6 +323,7 @@ public class ServiceInfo extends ComponentInfo
     * permissions:
     * {@link android.Manifest.permission#ACTIVITY_RECOGNITION},
     * {@link android.Manifest.permission#BODY_SENSORS},
     * {@link android.Manifest.permission#BODY_SENSORS_WRIST_TEMPERATURE},
     * {@link android.Manifest.permission#HIGH_SAMPLING_RATE_SENSORS}.
     */
    @RequiresPermission(
@@ -332,6 +333,7 @@ public class ServiceInfo extends ComponentInfo
            anyOf = {
                Manifest.permission.ACTIVITY_RECOGNITION,
                Manifest.permission.BODY_SENSORS,
                Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE,
                Manifest.permission.HIGH_SAMPLING_RATE_SENSORS,
            }
    )
+28 −0
Original line number Diff line number Diff line
@@ -1733,6 +1733,34 @@
        android:protectionLevel="dangerous"
        android:permissionFlags="hardRestricted" />

    <!-- Allows an application to access wrist temperature data from the watch sensors.
        <p class="note"><strong>Note: </strong> This permission is for Wear OS only.
        <p>Protection level: dangerous -->
    <permission android:name="android.permission.BODY_SENSORS_WRIST_TEMPERATURE"
                android:permissionGroup="android.permission-group.UNDEFINED"
                android:label="@string/permlab_bodySensorsWristTemperature"
                android:description="@string/permdesc_bodySensorsWristTemperature"
                android:backgroundPermission="android.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND"
                android:protectionLevel="dangerous" />

    <!-- Allows an application to access wrist temperature data from the watch sensors.
         If you're requesting this permission, you must also request
         {@link #BODY_SENSORS_WRIST_TEMPERATURE}. Requesting this permission by itself doesn't
         give you heart rate body sensors access.
         <p class="note"><strong>Note: </strong> This permission is for Wear OS only.
         <p>Protection level: dangerous

         <p> This is a hard restricted permission which cannot be held by an app until
         the installer on record allowlists the permission. For more details see
         {@link android.content.pm.PackageInstaller.SessionParams#setWhitelistedRestrictedPermissions(Set)}.
    -->
    <permission android:name="android.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND"
                android:permissionGroup="android.permission-group.UNDEFINED"
                android:label="@string/permlab_bodySensors_wristTemperature_background"
                android:description="@string/permdesc_bodySensors_wristTemperature_background"
                android:protectionLevel="dangerous"
                android:permissionFlags="hardRestricted" />

    <!-- Allows an app to use fingerprint hardware.
         <p>Protection level: normal
         @deprecated Applications should request {@link
Loading