Merge "BtHelper: do not clear sco clients when sco audio is disconnected" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-05-12 04:49:33 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 4 deletions

View File

@@ -211,7 +211,13 @@ import java.io.PrintWriter;
} }
mForcedUseForComm = AudioSystem.FORCE_SPEAKER; mForcedUseForComm = AudioSystem.FORCE_SPEAKER;
} else if (mForcedUseForComm == AudioSystem.FORCE_SPEAKER) { } else if (mForcedUseForComm == AudioSystem.FORCE_SPEAKER) {
mForcedUseForComm = AudioSystem.FORCE_NONE; if (mBtHelper.isBluetoothScoOn()) {
mForcedUseForComm = AudioSystem.FORCE_BT_SCO;
setForceUse_Async(
AudioSystem.FOR_RECORD, AudioSystem.FORCE_BT_SCO, eventSource);
} else {
mForcedUseForComm = AudioSystem.FORCE_NONE;
}
} }
mForcedUseForCommExt = mForcedUseForComm; mForcedUseForCommExt = mForcedUseForComm;

View File

@@ -307,8 +307,15 @@ public class BtHelper {
case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: case BluetoothHeadset.STATE_AUDIO_DISCONNECTED:
mDeviceBroker.setBluetoothScoOn(false, "BtHelper.receiveBtEvent"); mDeviceBroker.setBluetoothScoOn(false, "BtHelper.receiveBtEvent");
scoAudioState = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; scoAudioState = AudioManager.SCO_AUDIO_STATE_DISCONNECTED;
// startBluetoothSco called after stopBluetoothSco // There are two cases where we want to immediately reconnect audio:
if (mScoAudioState == SCO_STATE_ACTIVATE_REQ) { // 1) If a new start request was received while disconnecting: this was
// notified by requestScoState() setting state to SCO_STATE_ACTIVATE_REQ.
// 2) If audio was connected then disconnected via Bluetooth APIs and
// we still have pending activation requests by apps: this is indicated by
// state SCO_STATE_ACTIVE_EXTERNAL and the mScoClients list not empty.
if (mScoAudioState == SCO_STATE_ACTIVATE_REQ
|| (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL
&& !mScoClients.isEmpty())) {
if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null if (mBluetoothHeadset != null && mBluetoothHeadsetDevice != null
&& connectBluetoothScoAudioHelper(mBluetoothHeadset, && connectBluetoothScoAudioHelper(mBluetoothHeadset,
mBluetoothHeadsetDevice, mScoAudioMode)) { mBluetoothHeadsetDevice, mScoAudioMode)) {
@@ -318,7 +325,9 @@ public class BtHelper {
} }
} }
// Tear down SCO if disconnected from external // Tear down SCO if disconnected from external
clearAllScoClients(0, mScoAudioState == SCO_STATE_ACTIVE_INTERNAL); if (mScoAudioState == SCO_STATE_DEACTIVATING) {
clearAllScoClients(0, false);
}
mScoAudioState = SCO_STATE_INACTIVE; mScoAudioState = SCO_STATE_INACTIVE;
break; break;
case BluetoothHeadset.STATE_AUDIO_CONNECTING: case BluetoothHeadset.STATE_AUDIO_CONNECTING: