Merge "AudioService: handle BT profile disconnections" into tm-qpr-dev

This commit is contained in:
Jean-Michel Trivi
2023-02-13 23:23:52 +00:00
committed by Android (Google) Code Review
2 changed files with 62 additions and 7 deletions

View File

@@ -1512,6 +1512,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
case MSG_I_BT_SERVICE_DISCONNECTED_PROFILE: case MSG_I_BT_SERVICE_DISCONNECTED_PROFILE:
if (msg.arg1 != BluetoothProfile.HEADSET) { if (msg.arg1 != BluetoothProfile.HEADSET) {
synchronized (mDeviceStateLock) { synchronized (mDeviceStateLock) {
mBtHelper.onBtProfileDisconnected(msg.arg1);
mDeviceInventory.onBtProfileDisconnected(msg.arg1); mDeviceInventory.onBtProfileDisconnected(msg.arg1);
} }
} else { } else {

View File

@@ -279,7 +279,11 @@ public class BtHelper {
} }
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent( AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_AVRCP_VOL, index)); AudioServiceEvents.VolumeEvent.VOL_SET_AVRCP_VOL, index));
try {
mA2dp.setAvrcpAbsoluteVolume(index); mA2dp.setAvrcpAbsoluteVolume(index);
} catch (Exception e) {
Log.e(TAG, "Exception while changing abs volume", e);
}
} }
/*package*/ synchronized @AudioSystem.AudioFormatNativeEnumForBtCodec int getA2dpCodec( /*package*/ synchronized @AudioSystem.AudioFormatNativeEnumForBtCodec int getA2dpCodec(
@@ -287,7 +291,12 @@ public class BtHelper {
if (mA2dp == null) { if (mA2dp == null) {
return AudioSystem.AUDIO_FORMAT_DEFAULT; return AudioSystem.AUDIO_FORMAT_DEFAULT;
} }
final BluetoothCodecStatus btCodecStatus = mA2dp.getCodecStatus(device); final BluetoothCodecStatus btCodecStatus = null;
try {
mA2dp.getCodecStatus(device);
} catch (Exception e) {
Log.e(TAG, "Exception while getting status of " + device, e);
}
if (btCodecStatus == null) { if (btCodecStatus == null) {
return AudioSystem.AUDIO_FORMAT_DEFAULT; return AudioSystem.AUDIO_FORMAT_DEFAULT;
} }
@@ -421,7 +430,11 @@ public class BtHelper {
} }
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent( AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_LE_AUDIO_VOL, index, maxIndex)); AudioServiceEvents.VolumeEvent.VOL_SET_LE_AUDIO_VOL, index, maxIndex));
try {
mLeAudio.setVolume(volume); mLeAudio.setVolume(volume);
} catch (Exception e) {
Log.e(TAG, "Exception while setting LE volume", e);
}
} }
/*package*/ synchronized void setHearingAidVolume(int index, int streamType, /*package*/ synchronized void setHearingAidVolume(int index, int streamType,
@@ -447,7 +460,11 @@ public class BtHelper {
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent( AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB)); AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB));
} }
try {
mHearingAid.setVolume(gainDB); mHearingAid.setVolume(gainDB);
} catch (Exception e) {
Log.i(TAG, "Exception while setting hearing aid volume", e);
}
} }
/*package*/ synchronized void onBroadcastScoConnectionState(int state) { /*package*/ synchronized void onBroadcastScoConnectionState(int state) {
@@ -487,6 +504,35 @@ public class BtHelper {
mBluetoothHeadset = null; mBluetoothHeadset = null;
} }
//@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
/*package*/ synchronized void onBtProfileDisconnected(int profile) {
switch (profile) {
case BluetoothProfile.A2DP:
mA2dp = null;
break;
case BluetoothProfile.HEARING_AID:
mHearingAid = null;
break;
case BluetoothProfile.LE_AUDIO:
mLeAudio = null;
break;
case BluetoothProfile.A2DP_SINK:
case BluetoothProfile.LE_AUDIO_BROADCAST:
// shouldn't be received here as profile doesn't involve BtHelper
Log.e(TAG, "onBtProfileDisconnected: Not a profile handled by BtHelper "
+ BluetoothProfile.getProfileName(profile));
break;
default:
// Not a valid profile to disconnect
Log.e(TAG, "onBtProfileDisconnected: Not a valid profile to disconnect "
+ BluetoothProfile.getProfileName(profile));
break;
}
}
//@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
/*package*/ synchronized void onBtProfileConnected(int profile, BluetoothProfile proxy) { /*package*/ synchronized void onBtProfileConnected(int profile, BluetoothProfile proxy) {
if (profile == BluetoothProfile.HEADSET) { if (profile == BluetoothProfile.HEADSET) {
onHeadsetProfileConnected((BluetoothHeadset) proxy); onHeadsetProfileConnected((BluetoothHeadset) proxy);
@@ -672,7 +718,6 @@ public class BtHelper {
public void onServiceConnected(int profile, BluetoothProfile proxy) { public void onServiceConnected(int profile, BluetoothProfile proxy) {
switch(profile) { switch(profile) {
case BluetoothProfile.A2DP: case BluetoothProfile.A2DP:
case BluetoothProfile.A2DP_SINK:
case BluetoothProfile.HEADSET: case BluetoothProfile.HEADSET:
case BluetoothProfile.HEARING_AID: case BluetoothProfile.HEARING_AID:
case BluetoothProfile.LE_AUDIO: case BluetoothProfile.LE_AUDIO:
@@ -682,6 +727,10 @@ public class BtHelper {
mDeviceBroker.postBtProfileConnected(profile, proxy); mDeviceBroker.postBtProfileConnected(profile, proxy);
break; break;
case BluetoothProfile.A2DP_SINK:
// no A2DP sink functionality handled by BtHelper
case BluetoothProfile.LE_AUDIO_BROADCAST:
// no broadcast functionality handled by BtHelper
default: default:
break; break;
} }
@@ -690,14 +739,19 @@ public class BtHelper {
switch (profile) { switch (profile) {
case BluetoothProfile.A2DP: case BluetoothProfile.A2DP:
case BluetoothProfile.A2DP_SINK:
case BluetoothProfile.HEADSET: case BluetoothProfile.HEADSET:
case BluetoothProfile.HEARING_AID: case BluetoothProfile.HEARING_AID:
case BluetoothProfile.LE_AUDIO: case BluetoothProfile.LE_AUDIO:
case BluetoothProfile.LE_AUDIO_BROADCAST: AudioService.sDeviceLogger.log(new AudioEventLogger.StringEvent(
"BT profile service: disconnecting "
+ BluetoothProfile.getProfileName(profile) + " profile"));
mDeviceBroker.postBtProfileDisconnected(profile); mDeviceBroker.postBtProfileDisconnected(profile);
break; break;
case BluetoothProfile.A2DP_SINK:
// no A2DP sink functionality handled by BtHelper
case BluetoothProfile.LE_AUDIO_BROADCAST:
// no broadcast functionality handled by BtHelper
default: default:
break; break;
} }