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

Commit 89e51138 authored by Jack He's avatar Jack He Committed by Automerger Merge Worker
Browse files

Merge changes from topic "le-audio-broadcast" into tm-dev am: bed3aea4

parents 0ea20eac bed3aea4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -656,6 +656,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
                    audioDevice = AudioSystem.DEVICE_IN_BLE_HEADSET;
                }
                break;
            case BluetoothProfile.LE_AUDIO_BROADCAST:
                audioDevice = AudioSystem.DEVICE_OUT_BLE_BROADCAST;
                break;
            default: throw new IllegalArgumentException("Invalid profile " + d.mInfo.getProfile());
        }
        return new BtDeviceInfo(d, device, state, audioDevice, codec);
+28 −11
Original line number Diff line number Diff line
@@ -370,6 +370,7 @@ public class AudioDeviceInventory {
                    }
                    break;
                case BluetoothProfile.LE_AUDIO:
                case BluetoothProfile.LE_AUDIO_BROADCAST:
                    if (switchToUnavailable) {
                        makeLeAudioDeviceUnavailable(address, btInfo.mAudioSystemDevice);
                    } else if (switchToAvailable) {
@@ -847,7 +848,10 @@ public class AudioDeviceInventory {
                disconnectHearingAid();
                break;
            case BluetoothProfile.LE_AUDIO:
                disconnectLeAudio();
                disconnectLeAudioUnicast();
                break;
            case BluetoothProfile.LE_AUDIO_BROADCAST:
                disconnectLeAudioBroadcast();
                break;
            default:
                // Not a valid profile to disconnect
@@ -857,28 +861,39 @@ public class AudioDeviceInventory {
        }
    }

     /*package*/ void disconnectLeAudio() {
     /*package*/ void disconnectLeAudio(int device) {
        if (device != AudioSystem.DEVICE_OUT_BLE_HEADSET ||
                    device != AudioSystem.DEVICE_OUT_BLE_BROADCAST) {
            Log.e(TAG, "disconnectLeAudio: Can't disconnect not LE Audio device " + device);
            return;
        }

        synchronized (mDevicesLock) {
            final ArraySet<String> toRemove = new ArraySet<>();
            // Disconnect ALL DEVICE_OUT_BLE_HEADSET devices
            // Disconnect ALL DEVICE_OUT_BLE_HEADSET or DEVICE_OUT_BLE_BROADCAST devices
            mConnectedDevices.values().forEach(deviceInfo -> {
                if (deviceInfo.mDeviceType == AudioSystem.DEVICE_OUT_BLE_HEADSET) {
                if (deviceInfo.mDeviceType == device) {
                    toRemove.add(deviceInfo.mDeviceAddress);
                }
            });
            new MediaMetrics.Item(mMetricsId + "disconnectLeAudio")
                    .record();
            if (toRemove.size() > 0) {
                final int delay = checkSendBecomingNoisyIntentInt(
                        AudioSystem.DEVICE_OUT_BLE_HEADSET, 0, AudioSystem.DEVICE_NONE);
                toRemove.stream().forEach(deviceAddress ->
                        makeLeAudioDeviceUnavailable(deviceAddress,
                            AudioSystem.DEVICE_OUT_BLE_HEADSET)
                        makeLeAudioDeviceUnavailable(deviceAddress, device)
                );
            }
        }
    }

    /*package*/ void disconnectLeAudioUnicast() {
        disconnectLeAudio(AudioSystem.DEVICE_OUT_BLE_HEADSET);
    }

    /*package*/ void disconnectLeAudioBroadcast() {
        disconnectLeAudio(AudioSystem.DEVICE_OUT_BLE_BROADCAST);
    }

    // must be called before removing the device from mConnectedDevices
    // musicDevice argument is used when not AudioSystem.DEVICE_NONE instead of querying
    // from AudioSystem
@@ -908,7 +923,9 @@ public class AudioDeviceInventory {
        int delay;
        synchronized (mDevicesLock) {
            if (!info.mSupprNoisy
                    && ((info.mProfile == BluetoothProfile.LE_AUDIO && info.mIsLeOutput)
                    && (((info.mProfile == BluetoothProfile.LE_AUDIO
                        || info.mProfile == BluetoothProfile.LE_AUDIO_BROADCAST)
                        && info.mIsLeOutput)
                        || info.mProfile == BluetoothProfile.HEARING_AID
                        || info.mProfile == BluetoothProfile.A2DP)) {
                @AudioService.ConnectionState int asState =
@@ -1162,8 +1179,7 @@ public class AudioDeviceInventory {
            return;
        }

        final int leAudioVolIndex = mDeviceBroker.getVssVolumeForDevice(streamType,
                                    AudioSystem.DEVICE_OUT_BLE_HEADSET);
        final int leAudioVolIndex = mDeviceBroker.getVssVolumeForDevice(streamType, device);
        final int maxIndex = mDeviceBroker.getMaxVssVolumeForStream(streamType);
        mDeviceBroker.postSetLeAudioVolumeIndex(leAudioVolIndex, maxIndex, streamType);
        mDeviceBroker.postApplyVolumeOnDevice(streamType, device, "makeLeAudioDeviceAvailable");
@@ -1215,6 +1231,7 @@ public class AudioDeviceInventory {
        BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_LINE);
        BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_HEARING_AID);
        BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_BLE_HEADSET);
        BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_BLE_BROADCAST);
        BECOMING_NOISY_INTENT_DEVICES_SET.addAll(AudioSystem.DEVICE_OUT_ALL_A2DP_SET);
        BECOMING_NOISY_INTENT_DEVICES_SET.addAll(AudioSystem.DEVICE_OUT_ALL_USB_SET);
        BECOMING_NOISY_INTENT_DEVICES_SET.addAll(AudioSystem.DEVICE_OUT_ALL_BLE_SET);
+6 −2
Original line number Diff line number Diff line
@@ -3228,7 +3228,8 @@ public class AudioService extends IAudioService.Stub
                dispatchAbsoluteVolumeChanged(streamType, info, newIndex);
            }

            if (device == AudioSystem.DEVICE_OUT_BLE_HEADSET
            if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET
                    || device == AudioSystem.DEVICE_OUT_BLE_BROADCAST)
                    && streamType == getBluetoothContextualVolumeStream()
                    && (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
                if (DEBUG_VOL) {
@@ -3891,7 +3892,8 @@ public class AudioService extends IAudioService.Stub
                dispatchAbsoluteVolumeChanged(streamType, info, index);
            }

            if (device == AudioSystem.DEVICE_OUT_BLE_HEADSET
            if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET
                    || device == AudioSystem.DEVICE_OUT_BLE_BROADCAST)
                    && streamType == getBluetoothContextualVolumeStream()
                    && (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
                if (DEBUG_VOL) {
@@ -6832,6 +6834,7 @@ public class AudioService extends IAudioService.Stub
            BluetoothProfile.A2DP,
            BluetoothProfile.A2DP_SINK,
            BluetoothProfile.LE_AUDIO,
            BluetoothProfile.LE_AUDIO_BROADCAST,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface BtProfile {}
@@ -6853,6 +6856,7 @@ public class AudioService extends IAudioService.Stub
        final int profile = info.getProfile();
        if (profile != BluetoothProfile.A2DP && profile != BluetoothProfile.A2DP_SINK
                && profile != BluetoothProfile.LE_AUDIO
                && profile != BluetoothProfile.LE_AUDIO_BROADCAST
                && profile != BluetoothProfile.HEARING_AID) {
            throw new IllegalArgumentException("Illegal BluetoothProfile profile for device "
                    + previousDevice + " -> " + newDevice + ". Got: " + profile);