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

Commit 78755201 authored by William Escande's avatar William Escande Committed by Gerrit Code Review
Browse files

Merge "AICS: expose APIs" into main

parents f5f35c26 a1c6829c
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
// Signature format: 2.0
package android.bluetooth {

  @FlaggedApi("com.android.bluetooth.flags.aics_api") public class AudioInputControl {
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getAudioInputStatus();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getAudioInputType();
    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public String getDescription();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getGainMode();
    method @IntRange(from=0xffffff80, to=127) @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getGainSetting();
    method @IntRange(from=0xffffff80, to=127) @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getGainSettingMax();
    method @IntRange(from=0xffffff80, to=127) @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getGainSettingMin();
    method @IntRange(from=0, to=255) @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getGainSettingUnit();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getMute();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isDescriptionWritable();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void registerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.AudioInputControl.AudioInputCallback);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setDescription(@NonNull String);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setGainMode(int);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setGainSetting(@IntRange(from=0xffffff80, to=127) int);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setMute(int);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void unregisterCallback(@NonNull android.bluetooth.AudioInputControl.AudioInputCallback);
    field public static final int AUDIO_INPUT_STATUS_ACTIVE = 1; // 0x1
    field public static final int AUDIO_INPUT_STATUS_INACTIVE = 0; // 0x0
    field public static final int AUDIO_INPUT_STATUS_UNKNOWN = -1; // 0xffffffff
    field public static final int AUDIO_INPUT_TYPE_AMBIENT = 7; // 0x7
    field public static final int AUDIO_INPUT_TYPE_ANALOG = 3; // 0x3
    field public static final int AUDIO_INPUT_TYPE_BLUETOOTH = 1; // 0x1
    field public static final int AUDIO_INPUT_TYPE_DIGITAL = 4; // 0x4
    field public static final int AUDIO_INPUT_TYPE_MICROPHONE = 2; // 0x2
    field public static final int AUDIO_INPUT_TYPE_RADIO = 5; // 0x5
    field public static final int AUDIO_INPUT_TYPE_STREAMING = 6; // 0x6
    field public static final int AUDIO_INPUT_TYPE_UNSPECIFIED = 0; // 0x0
    field public static final int GAIN_MODE_AUTOMATIC = 3; // 0x3
    field public static final int GAIN_MODE_AUTOMATIC_ONLY = 1; // 0x1
    field public static final int GAIN_MODE_MANUAL = 2; // 0x2
    field public static final int GAIN_MODE_MANUAL_ONLY = 0; // 0x0
    field public static final int MUTE_DISABLED = 2; // 0x2
    field public static final int MUTE_MUTED = 1; // 0x1
    field public static final int MUTE_NOT_MUTED = 0; // 0x0
  }

  public static interface AudioInputControl.AudioInputCallback {
    method public default void onAudioInputStatusChanged(int);
    method public default void onDescriptionChanged(@NonNull String);
    method public default void onGainModeChanged(int);
    method public default void onGainSettingChanged(int);
    method public default void onMuteChanged(int);
    method public default void onSetGainModeFailed();
    method public default void onSetGainSettingFailed();
    method public default void onSetMuteFailed();
  }

  public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void disableOptionalCodecs(@NonNull android.bluetooth.BluetoothDevice);
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void enableOptionalCodecs(@NonNull android.bluetooth.BluetoothDevice);
@@ -1136,6 +1184,7 @@ package android.bluetooth {
  public final class BluetoothVolumeControl implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
    method public void close();
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) protected void finalize();
    method @FlaggedApi("com.android.bluetooth.flags.aics_api") @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.AudioInputControl> getAudioInputControlServices(@NonNull android.bluetooth.BluetoothDevice);
    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+252 −78

File changed.

Preview size limit exceeded, changes collapsed.

+17 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.bluetooth.BluetoothUtils.executeFromBinder;
import static java.util.Objects.requireNonNull;

import android.annotation.CallbackExecutor;
import android.annotation.FlaggedApi;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -42,6 +43,7 @@ import android.os.RemoteException;
import android.util.CloseGuard;
import android.util.Log;

import com.android.bluetooth.flags.Flags;
import com.android.internal.annotations.GuardedBy;

import java.util.Arrays;
@@ -705,15 +707,27 @@ public final class BluetoothVolumeControl implements BluetoothProfile, AutoClose
    }

    /**
     * @return The list of {@code AudioInputControl} associated with a device
     * Returns a list of {@link AudioInputControl} objects associated with a Bluetooth device.
     *
     * <p>Each {@link AudioInputControl} object represents an instance of the Audio Input Control
     * Service (AICS) on the remote device. A device may have multiple instances of the AICS, as
     * described in the <a href="https://www.bluetooth.com/specifications/specs/aics-1-0/">Audio
     * Input Control Service Specification (AICS 1.0)</a>.
     *
     * @param device The remote Bluetooth device.
     * @return A list of {@link AudioInputControl} objects, or an empty list if no AICS instances
     *     are found or if an error occurs.
     * @throws IllegalArgumentException If the provided device is invalid.
     * @hide
     */
    @FlaggedApi(Flags.FLAG_AICS_API)
    @SystemApi
    @RequiresBluetoothConnectPermission
    @RequiresPermission(allOf = {BLUETOOTH_CONNECT, BLUETOOTH_PRIVILEGED})
    public @NonNull List<AudioInputControl> getAudioInputControlPoints(
    public @NonNull List<AudioInputControl> getAudioInputControlServices(
            @NonNull BluetoothDevice device) {
        requireNonNull(device);
        Log.d(TAG, "getAudioInputControlPoints(" + device + ")");
        Log.d(TAG, "getAudioInputControlServices(" + device + ")");
        if (!isValidDevice(device)) {
            throw new IllegalArgumentException("Invalid device " + device);
        }