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

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

Merge changes Ie0ff7fb4,I90503b73 into main

* changes:
  AICS: expose implementation in framework
  AICS: Gain Setting Properties implementation
parents e32756e9 60855574
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -77,11 +77,21 @@ interface IBluetoothVolumeControl {
    // ---------------------
    // AICS related methods:

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

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    void registerAudioInputControlCallback(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})")
    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));
    }
}
+33 −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) {
@@ -1779,6 +1780,14 @@ public class VolumeControlService extends ProfileService {
            return fn.apply(inputs);
        }

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

        @Override
        public void registerAudioInputControlCallback(
                AttributionSource source,
@@ -1823,6 +1832,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