From 04dfcbd61f3a59332da3be23672a27c31d36a513 Mon Sep 17 00:00:00 2001 From: Gowtham Anandha Babu Date: Thu, 16 Jan 2025 17:18:28 +0530 Subject: [PATCH] Update BT HFP call state to audio manager As we are using btusb loopback device, there is no audio output if we open btusb card during DIALING/RINGING call state. Audio is routed properly when btusb loopback device is opened after call is picked up (i.e., call state to ACTIVE). We are updating this call state to audio manager, so that audio manager can open/close the btusb loopback device. Voice call verified. Tracked-On: Signed-off-by: Gowtham Anandha Babu --- ...e-BT-HFP-call-state-to-audio-manager.patch | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 aosp_diff/base_aaos/packages/modules/Bluetooth/0002-Update-BT-HFP-call-state-to-audio-manager.patch diff --git a/aosp_diff/base_aaos/packages/modules/Bluetooth/0002-Update-BT-HFP-call-state-to-audio-manager.patch b/aosp_diff/base_aaos/packages/modules/Bluetooth/0002-Update-BT-HFP-call-state-to-audio-manager.patch new file mode 100644 index 0000000000..d582429010 --- /dev/null +++ b/aosp_diff/base_aaos/packages/modules/Bluetooth/0002-Update-BT-HFP-call-state-to-audio-manager.patch @@ -0,0 +1,87 @@ +From ee78a86d781d957e116c5a1aeff1160d0715145e Mon Sep 17 00:00:00 2001 +From: Gowtham Anandha Babu +Date: Thu, 16 Jan 2025 11:58:53 +0000 +Subject: [PATCH] Update BT HFP call state to audio manager + +As we are using btusb loopback device, there is no audio output +if we open btusb card during DIALING/RINGING call state. + +Audio is routed properly when btusb loopback device is opened +after call is picked up (i.e., call state to ACTIVE). + +We are updating this call state to audio manager, so that +audio manager can open/close the btusb loopback device. + +Voice call verified. + +Tracked-On: +Signed-off-by: Gowtham Anandha Babu +--- + .../hfpclient/HeadsetClientStateMachine.java | 37 +++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java b/android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java +index ee53a4dafe..1bc42b058d 100644 +--- a/android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java ++++ b/android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java +@@ -124,6 +124,9 @@ public class HeadsetClientStateMachine extends StateMachine { + // Keep track of audio routing across all devices. + private static boolean sAudioIsRouted = false; + ++ // Keep track of call state. ++ private static boolean sIsCallStateUpdatedToAudio = false; ++ + private final Disconnected mDisconnected; + private final Connecting mConnecting; + private final Connected mConnected; +@@ -373,6 +376,7 @@ public class HeadsetClientStateMachine extends StateMachine { + mService.sendBroadcast( + intent, BLUETOOTH_CONNECT, Utils.getTempBroadcastOptions().toBundle()); + HfpClientConnectionService.onCallChanged(c.getDevice(), c); ++ updateCallStateToAudioManager(c); + } + + private void sendNetworkStateChangedIntent(BluetoothDevice device) { +@@ -965,6 +969,39 @@ public class HeadsetClientStateMachine extends StateMachine { + sAudioIsRouted = enable; + } + ++ synchronized void updateCallStateToAudioManager(HfpClientCall c) { ++ if (mAudioManager == null) { ++ Log.e(TAG, "AudioManager is null!"); ++ return; ++ } ++ ++ debug("bthfp_call_state=" + c.getState()); ++ switch (c.getState()) { ++ case HfpClientCall.CALL_STATE_INCOMING: ++ case HfpClientCall.CALL_STATE_WAITING: ++ case HfpClientCall.CALL_STATE_HELD: ++ case HfpClientCall.CALL_STATE_HELD_BY_RESPONSE_AND_HOLD: ++ case HfpClientCall.CALL_STATE_ALERTING: ++ case HfpClientCall.CALL_STATE_DIALING: ++ /* Not handled as of now */ ++ break; ++ case HfpClientCall.CALL_STATE_ACTIVE: ++ if (!sIsCallStateUpdatedToAudio) { ++ mAudioManager.setParameters("bthfp_call_state=true"); ++ sIsCallStateUpdatedToAudio = true; ++ } ++ break; ++ case HfpClientCall.CALL_STATE_TERMINATED: ++ if (sIsCallStateUpdatedToAudio) { ++ mAudioManager.setParameters("bthfp_call_state=false"); ++ sIsCallStateUpdatedToAudio = false; ++ } ++ break; ++ default: ++ break; ++ } ++ } ++ + private AudioFocusRequest requestAudioFocus() { + AudioAttributes streamAttributes = + new AudioAttributes.Builder() +-- +2.34.1 +