From f5c2be45c0c671bd980568e40551a3ac031b341f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 23 Mar 2021 13:53:51 +0100 Subject: [PATCH] Fixed speaker not activated when video call is started + prevent switch to speaker if using wired headset --- .../org/linphone/call/AndroidAudioManager.java | 14 ++++++++++++++ .../java/org/linphone/call/CallActivity.java | 18 +++++++++++------- .../java/org/linphone/call/CallManager.java | 3 ++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/call/AndroidAudioManager.java b/app/src/main/java/org/linphone/call/AndroidAudioManager.java index 83eadbfe8..cf78818e2 100644 --- a/app/src/main/java/org/linphone/call/AndroidAudioManager.java +++ b/app/src/main/java/org/linphone/call/AndroidAudioManager.java @@ -205,6 +205,20 @@ public class AndroidAudioManager { return false; } + public synchronized boolean isWiredHeadsetAvailable() { + for (AudioDevice audioDevice : LinphoneManager.getCore().getExtendedAudioDevices()) { + Log.e("# AUDIO DEVICE TYPE IS " + audioDevice.getType().name()); + if (audioDevice.getType() == AudioDevice.Type.Headphones + || audioDevice.getType() == AudioDevice.Type.Headset) { + Log.i( + "[Audio Manager] Found headset/headphone device: ", + audioDevice.getDeviceName()); + return true; + } + } + return false; + } + public synchronized void routeAudioToBluetooth() { if (LinphoneManager.getCore().getCallsNb() == 0) return; Call currentCall = LinphoneManager.getCore().getCurrentCall(); diff --git a/app/src/main/java/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java index ab97dbcf7..20def9233 100644 --- a/app/src/main/java/org/linphone/call/CallActivity.java +++ b/app/src/main/java/org/linphone/call/CallActivity.java @@ -407,15 +407,16 @@ public class CallActivity extends LinphoneGenericActivity } else if (state == Call.State.StreamsRunning) { mCallPausedByRemote.setVisibility(View.GONE); - setCurrentCallContactInformation(); - updateInterfaceDependingOnVideo(); - } else if (state == Call.State.Updating) { if (call.getCurrentParams().videoEnabled()) { - if (!LinphoneManager.getAudioManager() - .isUsingBluetoothAudioRoute()) { + AndroidAudioManager manager = LinphoneManager.getAudioManager(); + if (!manager.isUsingBluetoothAudioRoute() + && !manager.isWiredHeadsetAvailable()) { LinphoneManager.getAudioManager().routeAudioToSpeaker(); } } + + setCurrentCallContactInformation(); + updateInterfaceDependingOnVideo(); } else if (state == Call.State.UpdatedByRemote) { // If the correspondent asks for video while in audio call boolean videoEnabled = LinphonePreferences.instance().isVideoEnabled(); @@ -464,8 +465,11 @@ public class CallActivity extends LinphoneGenericActivity if (videoEnabled) { mAudioManager = LinphoneManager.getAudioManager(); - mAudioManager.routeAudioToSpeaker(); - mSpeaker.setSelected(true); + if (!mAudioManager.isWiredHeadsetAvailable() + && !mAudioManager.isUsingBluetoothAudioRoute()) { + mAudioManager.routeAudioToSpeaker(); + mSpeaker.setSelected(true); + } } } } diff --git a/app/src/main/java/org/linphone/call/CallManager.java b/app/src/main/java/org/linphone/call/CallManager.java index de54ccd19..cdafb21eb 100644 --- a/app/src/main/java/org/linphone/call/CallManager.java +++ b/app/src/main/java/org/linphone/call/CallManager.java @@ -145,7 +145,8 @@ public class CallManager { core.enableVideoCapture(true); core.enableVideoDisplay(true); - if (!LinphoneManager.getAudioManager().isUsingBluetoothAudioRoute()) { + if (!LinphoneManager.getAudioManager().isUsingBluetoothAudioRoute() + && !LinphoneManager.getAudioManager().isWiredHeadsetAvailable()) { LinphoneManager.getAudioManager().routeAudioToSpeaker(); } } else {