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

Commit fc1829b3 authored by William Escande's avatar William Escande
Browse files

AICS: getStatus/onStatusChanged implementation

Bug: 372328699
Flag: com.android.bluetooth.flags.aics_api
Test: atest CtsBluetoothTestCases
Change-Id: I0218ef71ac2642c495598ddf4e9d40891906c758
parent 6fa6d9cb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,4 +23,5 @@ package android.bluetooth;
 */
oneway interface IAudioInputCallback {
    void onDescriptionChanged(in String description);
    void onStatusChanged(int status);
}
+3 −0
Original line number Diff line number Diff line
@@ -88,4 +88,7 @@ interface IBluetoothVolumeControl {
    boolean isAudioInputDescriptionWritable(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    boolean setAudioInputDescription(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId, in String description);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getAudioInputStatus(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);
}
+5 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.bluetooth.Utils.RemoteExceptionIgnoringConsumer;

import static java.util.Objects.requireNonNull;

import android.bluetooth.AudioInputControl.AudioInputStatus;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.IAudioInputCallback;
import android.os.RemoteCallbackList;
@@ -28,7 +29,6 @@ import android.util.Log;
import com.android.bluetooth.btservice.ProfileService;

import bluetooth.constants.AudioInputType;
import bluetooth.constants.aics.AudioInputStatus;
import bluetooth.constants.aics.GainMode;
import bluetooth.constants.aics.Mute;

@@ -53,7 +53,7 @@ class VolumeControlInputDescriptor {
    }

    private static class Descriptor {
        int mStatus = AudioInputStatus.INACTIVE;
        @AudioInputStatus int mStatus = bluetooth.constants.aics.AudioInputStatus.INACTIVE;

        int mType = AudioInputType.UNSPECIFIED;

@@ -121,13 +121,14 @@ class VolumeControlInputDescriptor {
        mVolumeInputs[id].unregisterCallback(callback);
    }

    void setStatus(int id, int status) {
    void onStatusChanged(int id, @AudioInputStatus int status) {
        if (!isValidId(id)) return;
        mVolumeInputs[id].mStatus = status;
        mVolumeInputs[id].broadcast("onStatusChanged", (c) -> c.onStatusChanged(status));
    }

    int getStatus(int id) {
        if (!isValidId(id)) return AudioInputStatus.INACTIVE;
        if (!isValidId(id)) return bluetooth.constants.aics.AudioInputStatus.INACTIVE;
        return mVolumeInputs[id].mStatus;
    }

+2 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.bluetooth.vc.VolumeControlStackEvent.EVENT_TYPE_VOLUME

import static java.util.Objects.requireNonNull;

import android.bluetooth.AudioInputControl.AudioInputStatus;
import android.bluetooth.BluetoothDevice;
import android.util.Log;

@@ -159,7 +160,7 @@ class VolumeControlNativeCallback {
    }

    @VisibleForTesting
    void onExtAudioInStatusChanged(int id, int status, byte[] address) {
    void onExtAudioInStatusChanged(int id, @AudioInputStatus int status, byte[] address) {
        sendMessageToService(s -> s.onExtAudioInStatusChanged(getDevice(address), id, status));
    }

+16 −4
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import static java.util.Objects.requireNonNull;
import static java.util.Objects.requireNonNullElseGet;

import android.annotation.RequiresPermission;
import android.bluetooth.AudioInputControl.AudioInputStatus;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
@@ -67,7 +68,6 @@ import com.android.internal.annotations.VisibleForTesting;
import libcore.util.SneakyThrow;

import bluetooth.constants.AudioInputType;
import bluetooth.constants.aics.AudioInputStatus;

import java.util.ArrayList;
import java.util.Arrays;
@@ -1059,7 +1059,7 @@ public class VolumeControlService extends ProfileService {
        input.setState(id, gainSetting, mute, gainMode);
    }

    void onExtAudioInStatusChanged(BluetoothDevice device, int id, int status) {
    void onExtAudioInStatusChanged(BluetoothDevice device, int id, @AudioInputStatus int status) {
        String logInfo =
                "onExtAudioInStatusChanged("
                        + ("device=" + device)
@@ -1073,13 +1073,14 @@ public class VolumeControlService extends ProfileService {
            return;
        }

        if (status != AudioInputStatus.INACTIVE && status != AudioInputStatus.ACTIVE) {
        if (status != bluetooth.constants.aics.AudioInputStatus.INACTIVE
                && status != bluetooth.constants.aics.AudioInputStatus.ACTIVE) {
            Log.e(TAG, logInfo + ": Invalid status argument");
            return;
        }

        Log.d(TAG, logInfo);
        input.setStatus(id, status);
        input.onStatusChanged(id, status);
    }

    void onExtAudioInTypeChanged(BluetoothDevice device, int id, int type) {
@@ -1808,6 +1809,17 @@ public class VolumeControlService extends ProfileService {
            return aicsWrapper(
                    source, device, i -> i.setDescription(instanceId, description), false);
        }

        @Override
        public @AudioInputStatus int getAudioInputStatus(
                AttributionSource source, BluetoothDevice device, int instanceId) {
            Log.d(TAG, "getAudioInputStatus(" + device + ", " + instanceId + ")");
            return aicsWrapper(
                    source,
                    device,
                    i -> i.getStatus(instanceId),
                    (int) bluetooth.constants.aics.AudioInputStatus.INACTIVE);
        }
    }

    @Override
Loading