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

Commit 9840396a authored by Shreshta Manu's avatar Shreshta Manu
Browse files

[Ranging] Add new permission for Android generic ranging feature

This will be part of nearby devices permission group and will be
a common permission across all ranging technologies going ahead.

Bug: 370977414
Test: atest CtsPermissionPolicyTestCases
Flag: com.android.ranging.flags.ranging_stack_enabled
Change-Id: I7a777ec060628fef81983d94dfd6732b97b5a2ed
Merged-In: I7a777ec060628fef81983d94dfd6732b97b5a2ed
parent 44f755b7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -239,6 +239,7 @@ package android {
    field public static final String PROVIDE_OWN_AUTOFILL_SUGGESTIONS = "android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS";
    field public static final String PROVIDE_REMOTE_CREDENTIALS = "android.permission.PROVIDE_REMOTE_CREDENTIALS";
    field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES";
    field @FlaggedApi("android.permission.flags.ranging_permission_enabled") public static final String RANGING = "android.permission.RANGING";
    field public static final String READ_ASSISTANT_APP_SEARCH_DATA = "android.permission.READ_ASSISTANT_APP_SEARCH_DATA";
    field public static final String READ_BASIC_PHONE_STATE = "android.permission.READ_BASIC_PHONE_STATE";
    field public static final String READ_CALENDAR = "android.permission.READ_CALENDAR";
@@ -13509,7 +13510,7 @@ package android.content.pm {
    field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1
    field public static final int FLAG_USE_APP_ZYGOTE = 8; // 0x8
    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(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, android.Manifest.permission.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_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
+4 −0
Original line number Diff line number Diff line
@@ -684,13 +684,17 @@ package android.app {
    field public static final String OPSTR_PLAY_AUDIO = "android:play_audio";
    field public static final String OPSTR_POST_NOTIFICATION = "android:post_notification";
    field public static final String OPSTR_PROJECT_MEDIA = "android:project_media";
    field @FlaggedApi("android.permission.flags.ranging_permission_enabled") public static final String OPSTR_RANGING = "android:ranging";
    field @FlaggedApi("android.view.contentprotection.flags.rapid_clear_notifications_by_listener_app_op_enabled") public static final String OPSTR_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER = "android:rapid_clear_notifications_by_listener";
    field public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_HEART_RATE = "android:read_heart_rate";
    field public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
    field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
    field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
    field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
    field public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = "android:read_media_visual_user_selected";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_OXYGEN_SATURATION = "android:read_oxygen_saturation";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_SKIN_TEMPERATURE = "android:read_skin_temperature";
    field public static final String OPSTR_READ_WRITE_HEALTH_DATA = "android:read_write_health_data";
    field public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio";
    field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
+69 −1
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.database.DatabaseUtils;
import android.health.connect.HealthConnectManager;
import android.health.connect.HealthPermissions;
import android.media.AudioAttributes.AttributeUsage;
import android.media.MediaRouter2;
import android.os.Binder;
@@ -1608,9 +1609,25 @@ public class AppOpsManager {
    public static final int OP_RECEIVE_SENSITIVE_NOTIFICATIONS =
            AppProtoEnums.APP_OP_RECEIVE_SENSITIVE_NOTIFICATIONS;

    /** @hide Access to read heart rate sensor. */
    public static final int OP_READ_HEART_RATE = AppProtoEnums.APP_OP_READ_HEART_RATE;

    /** @hide Access to read skin temperature. */
    public static final int OP_READ_SKIN_TEMPERATURE = AppProtoEnums.APP_OP_READ_SKIN_TEMPERATURE;

    /**
     * Allows an app to range with nearby devices using any ranging technology available.
     *
     * @hide
     */
    public static final int OP_RANGING = AppProtoEnums.APP_OP_RANGING;

    /** @hide Access to read oxygen saturation. */
    public static final int OP_READ_OXYGEN_SATURATION = AppProtoEnums.APP_OP_READ_OXYGEN_SATURATION;

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

    /**
     * All app ops represented as strings.
@@ -1763,6 +1780,10 @@ public class AppOpsManager {
            OPSTR_UNARCHIVAL_CONFIRMATION,
            OPSTR_EMERGENCY_LOCATION,
            OPSTR_RECEIVE_SENSITIVE_NOTIFICATIONS,
            OPSTR_READ_HEART_RATE,
            OPSTR_READ_SKIN_TEMPERATURE,
            OPSTR_RANGING,
            OPSTR_READ_OXYGEN_SATURATION,
    })
    public @interface AppOpString {}

@@ -2500,6 +2521,26 @@ public class AppOpsManager {
    public static final String OPSTR_RECEIVE_SENSITIVE_NOTIFICATIONS =
            "android:receive_sensitive_notifications";

    /** @hide Access to read heart rate sensor. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_HEART_RATE = "android:read_heart_rate";

    /** @hide Access to read oxygen saturation. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_OXYGEN_SATURATION = "android:read_oxygen_saturation";

    /** @hide Access to read skin temperature. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_SKIN_TEMPERATURE = "android:read_skin_temperature";

    /** @hide Access to ranging */
    @SystemApi
    @FlaggedApi(Flags.FLAG_RANGING_PERMISSION_ENABLED)
    public static final String OPSTR_RANGING = "android:ranging";

    /** {@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} */
@@ -2571,8 +2612,13 @@ public class AppOpsManager {
            OP_BLUETOOTH_ADVERTISE,
            OP_UWB_RANGING,
            OP_NEARBY_WIFI_DEVICES,
            Flags.rangingPermissionEnabled() ? OP_RANGING : OP_NONE,
            // Notifications
            OP_POST_NOTIFICATION,
            // Health
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_HEART_RATE : OP_NONE,
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_SKIN_TEMPERATURE : OP_NONE,
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_OXYGEN_SATURATION : OP_NONE,
    };

    /**
@@ -3080,6 +3126,24 @@ public class AppOpsManager {
        new AppOpInfo.Builder(OP_RECEIVE_SENSITIVE_NOTIFICATIONS,
                OPSTR_RECEIVE_SENSITIVE_NOTIFICATIONS, "RECEIVE_SENSITIVE_NOTIFICATIONS")
                .setDefaultMode(MODE_IGNORED).build(),
        new AppOpInfo.Builder(OP_READ_HEART_RATE, OPSTR_READ_HEART_RATE, "READ_HEART_RATE")
                .setPermission(Flags.replaceBodySensorPermissionEnabled()
                ? HealthPermissions.READ_HEART_RATE : null)
                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_READ_SKIN_TEMPERATURE, OPSTR_READ_SKIN_TEMPERATURE,
                "READ_SKIN_TEMPERATURE").setPermission(
                    Flags.replaceBodySensorPermissionEnabled()
                        ? HealthPermissions.READ_SKIN_TEMPERATURE : null)
                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_RANGING, OPSTR_RANGING, "RANGING")
                .setPermission(Flags.rangingPermissionEnabled()
                ? Manifest.permission.RANGING : null)
                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_READ_OXYGEN_SATURATION, OPSTR_READ_OXYGEN_SATURATION,
                "READ_OXYGEN_SATURATION").setPermission(
                    Flags.replaceBodySensorPermissionEnabled()
                        ? HealthPermissions.READ_OXYGEN_SATURATION : null)
                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
    };

    // The number of longs needed to form a full bitmask of app ops
@@ -3133,6 +3197,10 @@ public class AppOpsManager {
            }
        }
        for (int op : RUNTIME_PERMISSION_OPS) {
            if (op == OP_NONE) {
                // Skip ops with a disabled feature flag.
                continue;
            }
            if (sAppOpInfos[op].permission != null) {
                sPermToOp.put(sAppOpInfos[op].permission, op);
            }
+1 −0
Original line number Diff line number Diff line
@@ -398,6 +398,7 @@ public abstract class ForegroundServiceTypePolicy {
                new RegularPermission(Manifest.permission.NFC),
                new RegularPermission(Manifest.permission.TRANSMIT_IR),
                new RegularPermission(Manifest.permission.UWB_RANGING),
                new RegularPermission(Manifest.permission.RANGING),
                new UsbDevicePermission(),
                new UsbAccessoryPermission(),
            }, false),
+2 −0
Original line number Diff line number Diff line
@@ -251,6 +251,7 @@ public class ServiceInfo extends ComponentInfo
     * {@link android.Manifest.permission#NFC},
     * {@link android.Manifest.permission#TRANSMIT_IR},
     * {@link android.Manifest.permission#UWB_RANGING},
     * {@link android.Manifest.permission#RANGING},
     * or has been granted the access to one of the attached USB devices/accessories.
     */
    @RequiresPermission(
@@ -267,6 +268,7 @@ public class ServiceInfo extends ComponentInfo
                Manifest.permission.NFC,
                Manifest.permission.TRANSMIT_IR,
                Manifest.permission.UWB_RANGING,
                Manifest.permission.RANGING,
            },
            conditional = true
    )
Loading