Merge "LeAudio: Fix volume control"

This commit is contained in:
Jack He 2022-09-09 06:03:21 +00:00 committed by Gerrit Code Review
commit 0075e9935d
4 changed files with 22 additions and 12 deletions

View File

@ -2376,6 +2376,14 @@ public class AudioSystem
return types.size() == 1 && types.contains(type); return types.size() == 1 && types.contains(type);
} }
/**
* @hide
* Return true if the audio device type is a Bluetooth LE Audio device.
*/
public static boolean isLeAudioDeviceType(int type) {
return DEVICE_OUT_ALL_BLE_SET.contains(type);
}
/** @hide */ /** @hide */
public static final int DEFAULT_MUTE_STREAMS_AFFECTED = public static final int DEFAULT_MUTE_STREAMS_AFFECTED =
(1 << STREAM_MUSIC) | (1 << STREAM_MUSIC) |

View File

@ -3243,8 +3243,7 @@ public class AudioService extends IAudioService.Stub
dispatchAbsoluteVolumeChanged(streamType, info, newIndex); dispatchAbsoluteVolumeChanged(streamType, info, newIndex);
} }
if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET if (AudioSystem.isLeAudioDeviceType(device)
|| 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) {
@ -3937,8 +3936,7 @@ public class AudioService extends IAudioService.Stub
dispatchAbsoluteVolumeChanged(streamType, info, index); dispatchAbsoluteVolumeChanged(streamType, info, index);
} }
if ((device == AudioSystem.DEVICE_OUT_BLE_HEADSET if (AudioSystem.isLeAudioDeviceType(device)
|| 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) {
@ -6776,7 +6774,8 @@ public class AudioService extends IAudioService.Stub
return AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE; return AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE;
} }
if (isAbsoluteVolumeDevice(audioSystemDeviceOut) if (isAbsoluteVolumeDevice(audioSystemDeviceOut)
|| isA2dpAbsoluteVolumeDevice(audioSystemDeviceOut)) { || isA2dpAbsoluteVolumeDevice(audioSystemDeviceOut)
|| AudioSystem.isLeAudioDeviceType(audioSystemDeviceOut)) {
return AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE; return AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE;
} }
return AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE; return AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE;
@ -7543,7 +7542,9 @@ public class AudioService extends IAudioService.Stub
int index; int index;
if (isFullyMuted()) { if (isFullyMuted()) {
index = 0; index = 0;
} else if (isAbsoluteVolumeDevice(device) || isA2dpAbsoluteVolumeDevice(device)) { } else if (isAbsoluteVolumeDevice(device)
|| isA2dpAbsoluteVolumeDevice(device)
|| AudioSystem.isLeAudioDeviceType(device)) {
index = getAbsoluteVolumeIndex((getIndex(device) + 5)/10); index = getAbsoluteVolumeIndex((getIndex(device) + 5)/10);
} else if (isFullVolumeDevice(device)) { } else if (isFullVolumeDevice(device)) {
index = (mIndexMax + 5)/10; index = (mIndexMax + 5)/10;
@ -7565,7 +7566,8 @@ public class AudioService extends IAudioService.Stub
if (isFullyMuted()) { if (isFullyMuted()) {
index = 0; index = 0;
} else if (isAbsoluteVolumeDevice(device) } else if (isAbsoluteVolumeDevice(device)
|| isA2dpAbsoluteVolumeDevice(device)) { || isA2dpAbsoluteVolumeDevice(device)
|| AudioSystem.isLeAudioDeviceType(device)) {
index = getAbsoluteVolumeIndex((getIndex(device) + 5)/10); index = getAbsoluteVolumeIndex((getIndex(device) + 5)/10);
} else if (isFullVolumeDevice(device)) { } else if (isFullVolumeDevice(device)) {
index = (mIndexMax + 5)/10; index = (mIndexMax + 5)/10;
@ -7986,7 +7988,8 @@ public class AudioService extends IAudioService.Stub
int streamDevice = getDeviceForStream(streamType); int streamDevice = getDeviceForStream(streamType);
if ((device != streamDevice) if ((device != streamDevice)
&& (isAbsoluteVolumeDevice(device) && (isAbsoluteVolumeDevice(device)
|| isA2dpAbsoluteVolumeDevice(device))) { || isA2dpAbsoluteVolumeDevice(device)
|| AudioSystem.isLeAudioDeviceType(device))) {
mStreamStates[streamType].applyDeviceVolume_syncVSS(device); mStreamStates[streamType].applyDeviceVolume_syncVSS(device);
} }
mStreamStates[streamType].applyDeviceVolume_syncVSS(streamDevice); mStreamStates[streamType].applyDeviceVolume_syncVSS(streamDevice);

View File

@ -394,7 +394,7 @@ public class AudioServiceEvents {
case VOL_SET_LE_AUDIO_VOL: case VOL_SET_LE_AUDIO_VOL:
return new StringBuilder("setLeAudioVolume:") return new StringBuilder("setLeAudioVolume:")
.append(" index:").append(mVal1) .append(" index:").append(mVal1)
.append(" gain dB:").append(mVal2) .append(" maxIndex:").append(mVal2)
.toString(); .toString();
case VOL_SET_AVRCP_VOL: case VOL_SET_AVRCP_VOL:
return new StringBuilder("setAvrcpVolume:") return new StringBuilder("setAvrcpVolume:")

View File

@ -410,9 +410,8 @@ public class BtHelper {
} }
return; return;
} }
/* leaudio expect volume value in range 0 to 255 /* leaudio expect volume value in range 0 to 255 */
*/ int volume = (int) Math.round((double) index * BT_LE_AUDIO_MAX_VOL / maxIndex);
int volume = (index * (BT_LE_AUDIO_MAX_VOL - BT_LE_AUDIO_MIN_VOL)) / maxIndex ;
if (AudioService.DEBUG_VOL) { if (AudioService.DEBUG_VOL) {
Log.i(TAG, "setLeAudioVolume: calling mLeAudio.setVolume idx=" Log.i(TAG, "setLeAudioVolume: calling mLeAudio.setVolume idx="