From 54ae2f8d9c4ce880eeed817523f3b4833d525aad Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 24 May 2021 14:45:54 +0200 Subject: [PATCH] Fixed speaker button state while in conference + remove deprecated APIs regarding conference --- .../call/viewmodels/ControlsViewModel.kt | 22 ++++++++----------- .../org/linphone/utils/AudioRouteUtils.kt | 14 +++++++++++- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt index 4df101e78..5396f20c8 100644 --- a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt @@ -255,8 +255,7 @@ class ControlsViewModel : ViewModel() { fun toggleSpeaker() { somethingClickedEvent.value = Event(true) - val audioDevice = coreContext.core.outputAudioDevice - if (audioDevice?.type == AudioDevice.Type.Speaker) { + if (AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed()) { forceEarpieceAudioRoute() } else { forceSpeakerAudioRoute() @@ -272,7 +271,7 @@ class ControlsViewModel : ViewModel() { val core = coreContext.core when { core.currentCall != null -> core.currentCall?.terminate() - core.isInConference -> core.terminateConference() + core.conference?.isIn == true -> core.terminateConference() else -> core.terminateAllCalls() } } @@ -287,7 +286,7 @@ class ControlsViewModel : ViewModel() { val currentCall = core.currentCall val conference = core.conference - if (conference != null && core.isInConference) { + if (conference != null && conference.isIn) { val params = core.createConferenceParams() val videoEnabled = conference.currentParams.isVideoEnabled params.isVideoEnabled = !videoEnabled @@ -399,7 +398,7 @@ class ControlsViewModel : ViewModel() { fun updateMuteMicState() { isMicrophoneMuted.value = !PermissionHelper.get().hasRecordAudioPermission() || !coreContext.core.micEnabled() - isMuteMicrophoneEnabled.value = coreContext.core.currentCall != null || coreContext.core.isInConference + isMuteMicrophoneEnabled.value = coreContext.core.currentCall != null || coreContext.core.conference?.isIn == true } private fun updateAudioRelated() { @@ -413,7 +412,7 @@ class ControlsViewModel : ViewModel() { updateVideoAvailable() updateVideoEnabled() isPauseEnabled.value = currentCall != null && !currentCall.mediaInProgress() - isMuteMicrophoneEnabled.value = currentCall != null || coreContext.core.isInConference + isMuteMicrophoneEnabled.value = currentCall != null || coreContext.core.conference?.isIn == true updateConferenceState() // Check periodically until mediaInProgress is false @@ -426,8 +425,7 @@ class ControlsViewModel : ViewModel() { } private fun updateSpeakerState() { - val audioDevice = coreContext.core.outputAudioDevice - isSpeakerSelected.value = audioDevice?.type == AudioDevice.Type.Speaker + isSpeakerSelected.value = AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed() } private fun updateAudioRoutesState() { @@ -439,9 +437,7 @@ class ControlsViewModel : ViewModel() { } private fun updateBluetoothHeadsetState() { - if (coreContext.core.callsNb == 0) return - val audioDevice = (coreContext.core.currentCall ?: coreContext.core.calls[0]).outputAudioDevice - isBluetoothHeadsetSelected.value = audioDevice?.type == AudioDevice.Type.Bluetooth + isBluetoothHeadsetSelected.value = AudioRouteUtils.isBluetoothAudioRouteCurrentlyUsed() } private fun updateVideoAvailable() { @@ -449,7 +445,7 @@ class ControlsViewModel : ViewModel() { val currentCall = core.currentCall isVideoAvailable.value = (core.videoCaptureEnabled() || core.videoPreviewEnabled()) && ((currentCall != null && !currentCall.mediaInProgress()) || - (core.conference != null && core.isInConference)) + core.conference?.isIn == true) } private fun updateVideoEnabled() { @@ -459,6 +455,6 @@ class ControlsViewModel : ViewModel() { private fun updateConferenceState() { val core = coreContext.core - isConferencingAvailable.value = core.callsNb > max(1, core.conferenceSize) && !core.soundResourcesLocked() + isConferencingAvailable.value = core.callsNb > max(1, core.conference?.participantCount ?: 0) && !core.soundResourcesLocked() } } diff --git a/app/src/main/java/org/linphone/utils/AudioRouteUtils.kt b/app/src/main/java/org/linphone/utils/AudioRouteUtils.kt index d000a0f5c..56a51538c 100644 --- a/app/src/main/java/org/linphone/utils/AudioRouteUtils.kt +++ b/app/src/main/java/org/linphone/utils/AudioRouteUtils.kt @@ -98,6 +98,18 @@ class AudioRouteUtils { Log.e("[Audio Route Helper] Couldn't find headset audio device") } + fun isSpeakerAudioRouteCurrentlyUsed(call: Call? = null): Boolean { + if (coreContext.core.callsNb == 0) { + Log.w("[Audio Route Helper] No call found, so speaker audio route isn't used") + return false + } + val currentCall = call ?: coreContext.core.currentCall ?: coreContext.core.calls[0] + + val audioDevice = currentCall.outputAudioDevice + Log.i("[Audio Route Helper] Audio device currently in use is [${audioDevice?.deviceName}] with type (${audioDevice?.type})") + return audioDevice?.type == AudioDevice.Type.Speaker + } + fun isBluetoothAudioRouteCurrentlyUsed(call: Call? = null): Boolean { if (coreContext.core.callsNb == 0) { Log.w("[Audio Route Helper] No call found, so bluetooth audio route isn't used") @@ -106,7 +118,7 @@ class AudioRouteUtils { val currentCall = call ?: coreContext.core.currentCall ?: coreContext.core.calls[0] val audioDevice = currentCall.outputAudioDevice - Log.i("[Audio Route Helper] Audio device currently in use is [${audioDevice?.deviceName}]") + Log.i("[Audio Route Helper] Audio device currently in use is [${audioDevice?.deviceName}] with type (${audioDevice?.type})") return audioDevice?.type == AudioDevice.Type.Bluetooth }