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

This commit is contained in:
Jean-Michel Trivi
2023-02-17 21:41:14 +00:00
committed by Android (Google) Code Review
2 changed files with 64 additions and 9 deletions

View File

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

View File

@@ -279,7 +279,11 @@ public class BtHelper {
}
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_AVRCP_VOL, index));
mA2dp.setAvrcpAbsoluteVolume(index);
try {
mA2dp.setAvrcpAbsoluteVolume(index);
} catch (Exception e) {
Log.e(TAG, "Exception while changing abs volume", e);
}
}
/*package*/ synchronized @AudioSystem.AudioFormatNativeEnumForBtCodec int getA2dpCodec(
@@ -287,7 +291,12 @@ public class BtHelper {
if (mA2dp == null) {
return AudioSystem.AUDIO_FORMAT_DEFAULT;
}
final BluetoothCodecStatus btCodecStatus = mA2dp.getCodecStatus(device);
BluetoothCodecStatus btCodecStatus = null;
try {
btCodecStatus = mA2dp.getCodecStatus(device);
} catch (Exception e) {
Log.e(TAG, "Exception while getting status of " + device, e);
}
if (btCodecStatus == null) {
return AudioSystem.AUDIO_FORMAT_DEFAULT;
}
@@ -421,7 +430,11 @@ public class BtHelper {
}
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_LE_AUDIO_VOL, index, maxIndex));
mLeAudio.setVolume(volume);
try {
mLeAudio.setVolume(volume);
} catch (Exception e) {
Log.e(TAG, "Exception while setting LE volume", e);
}
}
/*package*/ synchronized void setHearingAidVolume(int index, int streamType,
@@ -447,7 +460,11 @@ public class BtHelper {
AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB));
}
mHearingAid.setVolume(gainDB);
try {
mHearingAid.setVolume(gainDB);
} catch (Exception e) {
Log.i(TAG, "Exception while setting hearing aid volume", e);
}
}
/*package*/ synchronized void onBroadcastScoConnectionState(int state) {
@@ -472,7 +489,7 @@ public class BtHelper {
}
// @GuardedBy("AudioDeviceBroker.mSetModeLock")
@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
//@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
/*package*/ synchronized void resetBluetoothSco() {
mScoAudioState = SCO_STATE_INACTIVE;
broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
@@ -487,6 +504,35 @@ public class BtHelper {
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) {
if (profile == BluetoothProfile.HEADSET) {
onHeadsetProfileConnected((BluetoothHeadset) proxy);
@@ -518,7 +564,7 @@ public class BtHelper {
}
// @GuardedBy("AudioDeviceBroker.mSetModeLock")
@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
//@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
/*package*/ synchronized void onHeadsetProfileConnected(BluetoothHeadset headset) {
// Discard timeout message
mDeviceBroker.handleCancelFailureToConnectToBtHeadsetService();
@@ -672,7 +718,6 @@ public class BtHelper {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
switch(profile) {
case BluetoothProfile.A2DP:
case BluetoothProfile.A2DP_SINK:
case BluetoothProfile.HEADSET:
case BluetoothProfile.HEARING_AID:
case BluetoothProfile.LE_AUDIO:
@@ -682,6 +727,10 @@ public class BtHelper {
mDeviceBroker.postBtProfileConnected(profile, proxy);
break;
case BluetoothProfile.A2DP_SINK:
// no A2DP sink functionality handled by BtHelper
case BluetoothProfile.LE_AUDIO_BROADCAST:
// no broadcast functionality handled by BtHelper
default:
break;
}
@@ -690,14 +739,19 @@ public class BtHelper {
switch (profile) {
case BluetoothProfile.A2DP:
case BluetoothProfile.A2DP_SINK:
case BluetoothProfile.HEADSET:
case BluetoothProfile.HEARING_AID:
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);
break;
case BluetoothProfile.A2DP_SINK:
// no A2DP sink functionality handled by BtHelper
case BluetoothProfile.LE_AUDIO_BROADCAST:
// no broadcast functionality handled by BtHelper
default:
break;
}