From 7e267ab7615cb727d5c7fe39708f3d31cd0dc615 Mon Sep 17 00:00:00 2001 From: gavine99 Date: Wed, 16 Apr 2025 11:35:25 +1000 Subject: [PATCH] add a default audio device option in audio manager. stops auto-switch to bluetooth being disabled by 'user selected audio device' being set in code Signed-off-by: gavine99 --- .../nextcloud/talk/activities/CallActivity.kt | 11 +++++++++-- .../talk/webrtc/WebRtcAudioManager.java | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt index 9dd673853..8681d6333 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt @@ -805,9 +805,9 @@ class CallActivity : CallBaseActivity() { ) } if (isVoiceOnlyCall) { - setAudioOutputChannel(AudioDevice.EARPIECE) + setDefaultAudioOutputChannel(AudioDevice.EARPIECE) } else { - setAudioOutputChannel(AudioDevice.SPEAKER_PHONE) + setDefaultAudioOutputChannel(AudioDevice.SPEAKER_PHONE) } iceServers = ArrayList() @@ -834,6 +834,13 @@ class CallActivity : CallBaseActivity() { microphoneInitialization() } + fun setDefaultAudioOutputChannel(selectedAudioDevice: AudioDevice?) { + if (audioManager != null) { + audioManager!!.selectDefaultAudioDevice(selectedAudioDevice) + updateAudioOutputButton(audioManager!!.currentAudioDevice) + } + } + fun setAudioOutputChannel(selectedAudioDevice: AudioDevice?) { if (audioManager != null) { audioManager!!.selectAudioDevice(selectedAudioDevice) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebRtcAudioManager.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebRtcAudioManager.java index 77c4d79d9..a77aadfd7 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebRtcAudioManager.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebRtcAudioManager.java @@ -55,6 +55,7 @@ public class WebRtcAudioManager { private AudioDevice userSelectedAudioDevice; private AudioDevice currentAudioDevice; + private AudioDevice defaultAudioDevice; private ProximitySensor proximitySensor = null; @@ -215,6 +216,7 @@ public class WebRtcAudioManager { // Set initial device states. userSelectedAudioDevice = AudioDevice.NONE; currentAudioDevice = AudioDevice.NONE; + defaultAudioDevice = AudioDevice.NONE; audioDevices.clear(); startBluetoothManager(); @@ -297,6 +299,15 @@ public class WebRtcAudioManager { /** * Changes selection of the currently active audio device. */ + public void selectDefaultAudioDevice(AudioDevice device) { + ThreadUtils.checkIsOnMainThread(); + if (!audioDevices.contains(device)) { + Log.e(TAG, "Can not select default " + device + " from available " + audioDevices); + } + defaultAudioDevice = device; + updateAudioDeviceState(); + } + public void selectAudioDevice(AudioDevice device) { ThreadUtils.checkIsOnMainThread(); if (!audioDevices.contains(device)) { @@ -493,7 +504,10 @@ public class WebRtcAudioManager { // phone (on a tablet), or speaker phone and earpiece (on mobile phone). // |defaultAudioDevice| contains either AudioDevice.SPEAKER_PHONE or AudioDevice.EARPIECE // depending on the user's selection. - newCurrentAudioDevice = userSelectedAudioDevice; + if ((userSelectedAudioDevice == AudioDevice.NONE) && (defaultAudioDevice != AudioDevice.NONE)) + newCurrentAudioDevice = defaultAudioDevice; + else + newCurrentAudioDevice = userSelectedAudioDevice; } // Switch to new device but only if there has been any changes. if (newCurrentAudioDevice != currentAudioDevice || audioDeviceSetUpdated) {