Merge changes from topic "le-audio-broadcast-old-api"
* changes: le_audio: Extend handling of Broadcaster as active device AudioDeviceBroker: Extend createBtDeviceInfo with LE_AUDIO_BROADCAST
This commit is contained in:
@@ -642,6 +642,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
audioDevice = AudioSystem.DEVICE_IN_BLE_HEADSET;
|
audioDevice = AudioSystem.DEVICE_IN_BLE_HEADSET;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BluetoothProfile.LE_AUDIO_BROADCAST:
|
||||||
|
audioDevice = AudioSystem.DEVICE_OUT_BLE_BROADCAST;
|
||||||
|
break;
|
||||||
default: throw new IllegalArgumentException("Invalid profile " + d.mInfo.getProfile());
|
default: throw new IllegalArgumentException("Invalid profile " + d.mInfo.getProfile());
|
||||||
}
|
}
|
||||||
return new BtDeviceInfo(d, device, state, audioDevice, codec);
|
return new BtDeviceInfo(d, device, state, audioDevice, codec);
|
||||||
|
|||||||
@@ -363,6 +363,7 @@ public class AudioDeviceInventory {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BluetoothProfile.LE_AUDIO:
|
case BluetoothProfile.LE_AUDIO:
|
||||||
|
case BluetoothProfile.LE_AUDIO_BROADCAST:
|
||||||
if (switchToUnavailable) {
|
if (switchToUnavailable) {
|
||||||
makeLeAudioDeviceUnavailable(address, btInfo.mAudioSystemDevice);
|
makeLeAudioDeviceUnavailable(address, btInfo.mAudioSystemDevice);
|
||||||
} else if (switchToAvailable) {
|
} else if (switchToAvailable) {
|
||||||
@@ -814,7 +815,10 @@ public class AudioDeviceInventory {
|
|||||||
disconnectHearingAid();
|
disconnectHearingAid();
|
||||||
break;
|
break;
|
||||||
case BluetoothProfile.LE_AUDIO:
|
case BluetoothProfile.LE_AUDIO:
|
||||||
disconnectLeAudio();
|
disconnectLeAudioUnicast();
|
||||||
|
break;
|
||||||
|
case BluetoothProfile.LE_AUDIO_BROADCAST:
|
||||||
|
disconnectLeAudioBroadcast();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// Not a valid profile to disconnect
|
// Not a valid profile to disconnect
|
||||||
@@ -824,28 +828,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) {
|
synchronized (mDevicesLock) {
|
||||||
final ArraySet<String> toRemove = new ArraySet<>();
|
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 -> {
|
mConnectedDevices.values().forEach(deviceInfo -> {
|
||||||
if (deviceInfo.mDeviceType == AudioSystem.DEVICE_OUT_BLE_HEADSET) {
|
if (deviceInfo.mDeviceType == device) {
|
||||||
toRemove.add(deviceInfo.mDeviceAddress);
|
toRemove.add(deviceInfo.mDeviceAddress);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
new MediaMetrics.Item(mMetricsId + "disconnectLeAudio")
|
new MediaMetrics.Item(mMetricsId + "disconnectLeAudio")
|
||||||
.record();
|
.record();
|
||||||
if (toRemove.size() > 0) {
|
if (toRemove.size() > 0) {
|
||||||
final int delay = checkSendBecomingNoisyIntentInt(
|
|
||||||
AudioSystem.DEVICE_OUT_BLE_HEADSET, 0, AudioSystem.DEVICE_NONE);
|
|
||||||
toRemove.stream().forEach(deviceAddress ->
|
toRemove.stream().forEach(deviceAddress ->
|
||||||
makeLeAudioDeviceUnavailable(deviceAddress,
|
makeLeAudioDeviceUnavailable(deviceAddress, device)
|
||||||
AudioSystem.DEVICE_OUT_BLE_HEADSET)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*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
|
// must be called before removing the device from mConnectedDevices
|
||||||
// musicDevice argument is used when not AudioSystem.DEVICE_NONE instead of querying
|
// musicDevice argument is used when not AudioSystem.DEVICE_NONE instead of querying
|
||||||
// from AudioSystem
|
// from AudioSystem
|
||||||
@@ -875,7 +890,9 @@ public class AudioDeviceInventory {
|
|||||||
int delay;
|
int delay;
|
||||||
synchronized (mDevicesLock) {
|
synchronized (mDevicesLock) {
|
||||||
if (!info.mSupprNoisy
|
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.HEARING_AID
|
||||||
|| info.mProfile == BluetoothProfile.A2DP)) {
|
|| info.mProfile == BluetoothProfile.A2DP)) {
|
||||||
@AudioService.ConnectionState int asState =
|
@AudioService.ConnectionState int asState =
|
||||||
@@ -1110,8 +1127,7 @@ public class AudioDeviceInventory {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int leAudioVolIndex = mDeviceBroker.getVssVolumeForDevice(streamType,
|
final int leAudioVolIndex = mDeviceBroker.getVssVolumeForDevice(streamType, device);
|
||||||
AudioSystem.DEVICE_OUT_BLE_HEADSET);
|
|
||||||
final int maxIndex = mDeviceBroker.getMaxVssVolumeForStream(streamType);
|
final int maxIndex = mDeviceBroker.getMaxVssVolumeForStream(streamType);
|
||||||
mDeviceBroker.postSetLeAudioVolumeIndex(leAudioVolIndex, maxIndex, streamType);
|
mDeviceBroker.postSetLeAudioVolumeIndex(leAudioVolIndex, maxIndex, streamType);
|
||||||
mDeviceBroker.postApplyVolumeOnDevice(streamType, device, "makeLeAudioDeviceAvailable");
|
mDeviceBroker.postApplyVolumeOnDevice(streamType, device, "makeLeAudioDeviceAvailable");
|
||||||
@@ -1163,6 +1179,7 @@ public class AudioDeviceInventory {
|
|||||||
BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_LINE);
|
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_HEARING_AID);
|
||||||
BECOMING_NOISY_INTENT_DEVICES_SET.add(AudioSystem.DEVICE_OUT_BLE_HEADSET);
|
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_A2DP_SET);
|
||||||
BECOMING_NOISY_INTENT_DEVICES_SET.addAll(AudioSystem.DEVICE_OUT_ALL_USB_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);
|
BECOMING_NOISY_INTENT_DEVICES_SET.addAll(AudioSystem.DEVICE_OUT_ALL_BLE_SET);
|
||||||
|
|||||||
@@ -2998,7 +2998,8 @@ public class AudioService extends IAudioService.Stub
|
|||||||
mDeviceBroker.postSetAvrcpAbsoluteVolumeIndex(newIndex / 10);
|
mDeviceBroker.postSetAvrcpAbsoluteVolumeIndex(newIndex / 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device == AudioSystem.DEVICE_OUT_BLE_HEADSET
|
if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET
|
||||||
|
|| device == AudioSystem.DEVICE_OUT_BLE_BROADCAST)
|
||||||
&& streamType == getBluetoothContextualVolumeStream()
|
&& streamType == getBluetoothContextualVolumeStream()
|
||||||
&& (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
|
&& (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
|
||||||
if (DEBUG_VOL) {
|
if (DEBUG_VOL) {
|
||||||
@@ -3644,7 +3645,8 @@ public class AudioService extends IAudioService.Stub
|
|||||||
mDeviceBroker.postSetAvrcpAbsoluteVolumeIndex(index / 10);
|
mDeviceBroker.postSetAvrcpAbsoluteVolumeIndex(index / 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device == AudioSystem.DEVICE_OUT_BLE_HEADSET
|
if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET
|
||||||
|
|| device == AudioSystem.DEVICE_OUT_BLE_BROADCAST)
|
||||||
&& streamType == getBluetoothContextualVolumeStream()
|
&& streamType == getBluetoothContextualVolumeStream()
|
||||||
&& (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
|
&& (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {
|
||||||
if (DEBUG_VOL) {
|
if (DEBUG_VOL) {
|
||||||
@@ -6336,6 +6338,7 @@ public class AudioService extends IAudioService.Stub
|
|||||||
BluetoothProfile.A2DP,
|
BluetoothProfile.A2DP,
|
||||||
BluetoothProfile.A2DP_SINK,
|
BluetoothProfile.A2DP_SINK,
|
||||||
BluetoothProfile.LE_AUDIO,
|
BluetoothProfile.LE_AUDIO,
|
||||||
|
BluetoothProfile.LE_AUDIO_BROADCAST,
|
||||||
})
|
})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface BtProfile {}
|
public @interface BtProfile {}
|
||||||
@@ -6357,6 +6360,7 @@ public class AudioService extends IAudioService.Stub
|
|||||||
final int profile = info.getProfile();
|
final int profile = info.getProfile();
|
||||||
if (profile != BluetoothProfile.A2DP && profile != BluetoothProfile.A2DP_SINK
|
if (profile != BluetoothProfile.A2DP && profile != BluetoothProfile.A2DP_SINK
|
||||||
&& profile != BluetoothProfile.LE_AUDIO
|
&& profile != BluetoothProfile.LE_AUDIO
|
||||||
|
&& profile != BluetoothProfile.LE_AUDIO_BROADCAST
|
||||||
&& profile != BluetoothProfile.HEARING_AID) {
|
&& profile != BluetoothProfile.HEARING_AID) {
|
||||||
throw new IllegalArgumentException("Illegal BluetoothProfile profile for device "
|
throw new IllegalArgumentException("Illegal BluetoothProfile profile for device "
|
||||||
+ previousDevice + " -> " + newDevice + ". Got: " + profile);
|
+ previousDevice + " -> " + newDevice + ". Got: " + profile);
|
||||||
|
|||||||
Reference in New Issue
Block a user