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

Commit 48a3a951 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Automerger Merge Worker
Browse files

Merge changes If0e5861e,Ib385b24d am: 488d8f20 am: b2da79c8 am: aa84ebea am: be7af2ba

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1856318

Change-Id: I71872dc73a525439e922fc5ffe2f488d152b0f6d
parents d66aa557 be7af2ba
Loading
Loading
Loading
Loading
+132 −0
Original line number Diff line number Diff line
@@ -155,6 +155,12 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
    public static final String ACTION_LE_AUDIO_CONF_CHANGED =
            "android.bluetooth.action.LE_AUDIO_CONF_CHANGED";

    /**
     * Indicates unspecified audio content.
     * @hide
     */
    public static final int CONTEXT_TYPE_UNSPECIFIED = 0x0001;

    /**
     * Indicates conversation between humans as, for example, in telephony or video calls.
     * @hide
@@ -167,6 +173,66 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
     */
    public static final int CONTEXT_TYPE_MEDIA = 0x0004;

    /**
     * Indicates instructional audio as, for example, in navigation, traffic announcements
     * or user guidance.
     * @hide
     */
    public static final int CONTEXT_TYPE_INSTRUCTIONAL = 0x0008;

    /**
     * Indicates attention seeking audio as, for example, in beeps signalling arrival of a message
     * or keyboard clicks.
     * @hide
     */
    public static final int CONTEXT_TYPE_ATTENTION_SEEKING = 0x0010;

    /**
     * Indicates immediate alerts as, for example, in a low battery alarm, timer expiry or alarm
     * clock.
     * @hide
     */
    public static final int CONTEXT_TYPE_IMMEDIATE_ALERT = 0x0020;

    /**
     * Indicates man machine communication as, for example, with voice recognition or virtual
     * assistant.
     * @hide
     */
    public static final int CONTEXT_TYPE_MAN_MACHINE = 0x0040;

    /**
     * Indicates emergency alerts as, for example, with fire alarms or other urgent alerts.
     * @hide
     */
    public static final int CONTEXT_TYPE_EMERGENCY_ALERT = 0x0080;

    /**
     * Indicates ringtone as in a call alert.
     * @hide
     */
    public static final int CONTEXT_TYPE_RINGTONE = 0x0100;

    /**
     * Indicates audio associated with a television program and/or with metadata conforming to the
     * Bluetooth Broadcast TV profile.
     * @hide
     */
    public static final int CONTEXT_TYPE_TV = 0x0200;

    /**
     * Indicates audio associated with a low latency live audio stream.
     *
     * @hide
     */
    public static final int CONTEXT_TYPE_LIVE = 0x0400;

    /**
     * Indicates audio associated with a video game stream.
     * @hide
     */
    public static final int CONTEXT_TYPE_GAME = 0x0800;

    /**
     * This represents an invalid group ID.
     *
@@ -250,6 +316,17 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
     */
    public static final int GROUP_STATUS_INACTIVE = IBluetoothLeAudio.GROUP_STATUS_INACTIVE;

    /**
     * Indicating that node has been added to the group.
     * @hide
     */
    public static final int GROUP_NODE_ADDED = IBluetoothLeAudio.GROUP_NODE_ADDED;

    /**
     * Indicating that node has been removed from the group.
     * @hide
     */
    public static final int GROUP_NODE_REMOVED = IBluetoothLeAudio.GROUP_NODE_REMOVED;

    private final BluetoothProfileConnector<IBluetoothLeAudio> mProfileConnector =
            new BluetoothProfileConnector(this, BluetoothProfile.LE_AUDIO, "BluetoothLeAudio",
@@ -545,6 +622,61 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable {
        }
    }

    /**
     * Add device to the given group.
     * @param group_id group ID the device is being added to
     * @param device the active device
     * @return true on success, otherwise false
     * @hide
     */
    @RequiresBluetoothConnectPermission
    @RequiresPermission(allOf = {
            android.Manifest.permission.BLUETOOTH_CONNECT,
            android.Manifest.permission.BLUETOOTH_PRIVILEGED
    })
    public boolean groupAddNode(int group_id, @NonNull BluetoothDevice device) {
        if (VDBG) log("groupAddNode()");
        final IBluetoothLeAudio service = getService();
        try {
            if (service != null && mAdapter.isEnabled()) {
                return service.groupAddNode(group_id, device, mAttributionSource);
            }
            if (service == null) Log.w(TAG, "Proxy not attached to service");
            return false;
        } catch (RemoteException e) {
            Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
            return false;
        }
    }

    /**
     * Remove device from a given group.
     * @param group_id group ID the device is being removed from
     * @param device the active device
     * @return true on success, otherwise false
     *
     * @hide
     */
    @RequiresBluetoothConnectPermission
    @RequiresPermission(allOf = {
            android.Manifest.permission.BLUETOOTH_CONNECT,
            android.Manifest.permission.BLUETOOTH_PRIVILEGED
    })
    public boolean groupRemoveNode(int group_id, @NonNull BluetoothDevice device) {
        if (VDBG) log("groupRemoveNode()");
        final IBluetoothLeAudio service = getService();
        try {
            if (service != null && mAdapter.isEnabled()) {
                return service.groupRemoveNode(group_id, device, mAttributionSource);
            }
            if (service == null) Log.w(TAG, "Proxy not attached to service");
            return false;
        } catch (RemoteException e) {
            Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
            return false;
        }
    }

    /**
     * Set connection policy of the profile
     *