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

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

AICS: Gain Setting Properties implementation

This relate to:
* gainSettingUnit
* gainSettingMax
* gainSettingMin

Bug: 372328699
Flag: com.android.bluetooth.flags.aics_api
Test: atest CtsBluetoothTestCases
Change-Id: I90503b73a8202cfd1dfd46f6d633c26c770af725
parent 8d981af4
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -82,6 +82,13 @@ interface IBluetoothVolumeControl {
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    void unregisterAudioInputControlCallback(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId, in IAudioInputCallback callback);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getAudioInputGainSettingUnit(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getAudioInputGainSettingMin(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getAudioInputGainSettingMax(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    String getAudioInputDescription(in AttributionSource attributionSource, in BluetoothDevice device, int instanceId);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
+6 −5
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ static jmethodID method_onExtAudioInSetMuteFailed;
static jmethodID method_onExtAudioInSetGainModeFailed;
static jmethodID method_onExtAudioInStatusChanged;
static jmethodID method_onExtAudioInTypeChanged;
static jmethodID method_onExtAudioInGainPropsChanged;
static jmethodID method_onExtAudioInGainSettingPropertiesChanged;
static jmethodID method_onExtAudioInDescriptionChanged;

static VolumeControlInterface* sVolumeControlInterface = nullptr;
@@ -361,8 +361,8 @@ public:
                                 (jint)type, addr.get());
  }

  void OnExtAudioInGainPropsChanged(const RawAddress& bd_addr, uint8_t ext_input_id, uint8_t unit,
                                    int8_t min, int8_t max) override {
  void OnExtAudioInGainSettingPropertiesChanged(const RawAddress& bd_addr, uint8_t ext_input_id,
                                                uint8_t unit, int8_t min, int8_t max) override {
    log::info("");

    std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
@@ -380,7 +380,7 @@ public:

    sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                     reinterpret_cast<const jbyte*>(&bd_addr));
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExtAudioInGainPropsChanged,
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExtAudioInGainSettingPropertiesChanged,
                                 (jint)ext_input_id, (jint)unit, (jint)min, (jint)max, addr.get());
  }

@@ -984,7 +984,8 @@ int register_com_android_bluetooth_vc(JNIEnv* env) {
          {"onExtAudioInSetGainModeFailed", "(I[B)V", &method_onExtAudioInSetGainModeFailed},
          {"onExtAudioInStatusChanged", "(II[B)V", &method_onExtAudioInStatusChanged},
          {"onExtAudioInTypeChanged", "(II[B)V", &method_onExtAudioInTypeChanged},
          {"onExtAudioInGainPropsChanged", "(IIII[B)V", &method_onExtAudioInGainPropsChanged},
          {"onExtAudioInGainSettingPropertiesChanged", "(IIII[B)V",
           &method_onExtAudioInGainSettingPropertiesChanged},
          {"onExtAudioInDescriptionChanged", "(ILjava/lang/String;Z[B)V",
           &method_onExtAudioInDescriptionChanged},
  };
+17 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ class VolumeControlInputDescriptor {
        mNativeInterface = requireNonNull(nativeInterface);
        mDevice = requireNonNull(device);
        mVolumeInputs = new Descriptor[numberOfExternalInputs];
        // Stack delivers us number of audio inputs. ids are countinous from [0;n[
        // Stack delivers us number of AICSs instances. ids are countinous from [0;n[
        for (int i = 0; i < numberOfExternalInputs; i++) {
            mVolumeInputs[i] = new Descriptor();
        }
@@ -168,7 +168,7 @@ class VolumeControlInputDescriptor {
        return mVolumeInputs[id].mType;
    }

    void setPropSettings(int id, int gainUnit, int gainMin, int gainMax) {
    void onGainSettingsPropertiesChanged(int id, int gainUnit, int gainMin, int gainMax) {
        if (!isValidId(id)) return;

        mVolumeInputs[id].mGainSettingsUnits = gainUnit;
@@ -176,6 +176,21 @@ class VolumeControlInputDescriptor {
        mVolumeInputs[id].mGainSettingsMax = gainMax;
    }

    int getGainSettingUnit(int id) {
        if (!isValidId(id)) return 0;
        return mVolumeInputs[id].mGainSettingsUnits;
    }

    int getGainSettingMin(int id) {
        if (!isValidId(id)) return 0;
        return mVolumeInputs[id].mGainSettingsMin;
    }

    int getGainSettingMax(int id) {
        if (!isValidId(id)) return 0;
        return mVolumeInputs[id].mGainSettingsMax;
    }

    void onStateChanged(int id, int gainSetting, @Mute int mute, @GainMode int gainMode) {
        if (!isValidId(id)) return;

+5 −2
Original line number Diff line number Diff line
@@ -198,8 +198,11 @@ class VolumeControlNativeCallback {
    }

    @VisibleForTesting
    void onExtAudioInGainPropsChanged(int id, int unit, int min, int max, byte[] address) {
    void onExtAudioInGainSettingPropertiesChanged(
            int id, int unit, int min, int max, byte[] address) {
        sendMessageToService(
                s -> s.onExtAudioInGainPropsChanged(getDevice(address), id, unit, min, max));
                s ->
                        s.onExtAudioInGainSettingPropertiesChanged(
                                getDevice(address), id, unit, min, max));
    }
}
+25 −3
Original line number Diff line number Diff line
@@ -1170,9 +1170,10 @@ public class VolumeControlService extends ProfileService {
        input.onDescriptionChanged(id, description, isWritable);
    }

    void onExtAudioInGainPropsChanged(BluetoothDevice device, int id, int unit, int min, int max) {
    void onExtAudioInGainSettingPropertiesChanged(
            BluetoothDevice device, int id, int unit, int min, int max) {
        String logInfo =
                "onExtAudioInGainPropsChanged("
                "onExtAudioInGainSettingPropertiesChanged("
                        + ("device=" + device)
                        + (", id=" + id)
                        + (", unit=" + unit)
@@ -1187,7 +1188,7 @@ public class VolumeControlService extends ProfileService {
        }

        Log.d(TAG, logInfo);
        input.setPropSettings(id, unit, min, max);
        input.onGainSettingsPropertiesChanged(id, unit, min, max);
    }

    void handleStackEvent(VolumeControlStackEvent stackEvent) {
@@ -1823,6 +1824,27 @@ public class VolumeControlService extends ProfileService {
                    null);
        }

        @Override
        public int getAudioInputGainSettingUnit(
                AttributionSource source, BluetoothDevice device, int instanceId) {
            Log.d(TAG, "getAudioInputGainSettingUnit(" + device + ", " + instanceId + ")");
            return aicsWrapper(source, device, i -> i.getGainSettingUnit(instanceId), 0);
        }

        @Override
        public int getAudioInputGainSettingMin(
                AttributionSource source, BluetoothDevice device, int instanceId) {
            Log.d(TAG, "getAudioInputGainSettingMin(" + device + ", " + instanceId + ")");
            return aicsWrapper(source, device, i -> i.getGainSettingMin(instanceId), 0);
        }

        @Override
        public int getAudioInputGainSettingMax(
                AttributionSource source, BluetoothDevice device, int instanceId) {
            Log.d(TAG, "getAudioInputGainSettingMax(" + device + ", " + instanceId + ")");
            return aicsWrapper(source, device, i -> i.getGainSettingMax(instanceId), 0);
        }

        @Override
        public String getAudioInputDescription(
                AttributionSource source, BluetoothDevice device, int instanceId) {
Loading