Fixed speaker button state while in conference + remove deprecated APIs regarding conference

This commit is contained in:
Sylvain Berfini 2021-05-24 14:45:54 +02:00
parent 30057429a4
commit 54ae2f8d9c
2 changed files with 22 additions and 14 deletions

View file

@ -255,8 +255,7 @@ class ControlsViewModel : ViewModel() {
fun toggleSpeaker() { fun toggleSpeaker() {
somethingClickedEvent.value = Event(true) somethingClickedEvent.value = Event(true)
val audioDevice = coreContext.core.outputAudioDevice if (AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed()) {
if (audioDevice?.type == AudioDevice.Type.Speaker) {
forceEarpieceAudioRoute() forceEarpieceAudioRoute()
} else { } else {
forceSpeakerAudioRoute() forceSpeakerAudioRoute()
@ -272,7 +271,7 @@ class ControlsViewModel : ViewModel() {
val core = coreContext.core val core = coreContext.core
when { when {
core.currentCall != null -> core.currentCall?.terminate() core.currentCall != null -> core.currentCall?.terminate()
core.isInConference -> core.terminateConference() core.conference?.isIn == true -> core.terminateConference()
else -> core.terminateAllCalls() else -> core.terminateAllCalls()
} }
} }
@ -287,7 +286,7 @@ class ControlsViewModel : ViewModel() {
val currentCall = core.currentCall val currentCall = core.currentCall
val conference = core.conference val conference = core.conference
if (conference != null && core.isInConference) { if (conference != null && conference.isIn) {
val params = core.createConferenceParams() val params = core.createConferenceParams()
val videoEnabled = conference.currentParams.isVideoEnabled val videoEnabled = conference.currentParams.isVideoEnabled
params.isVideoEnabled = !videoEnabled params.isVideoEnabled = !videoEnabled
@ -399,7 +398,7 @@ class ControlsViewModel : ViewModel() {
fun updateMuteMicState() { fun updateMuteMicState() {
isMicrophoneMuted.value = !PermissionHelper.get().hasRecordAudioPermission() || !coreContext.core.micEnabled() 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() { private fun updateAudioRelated() {
@ -413,7 +412,7 @@ class ControlsViewModel : ViewModel() {
updateVideoAvailable() updateVideoAvailable()
updateVideoEnabled() updateVideoEnabled()
isPauseEnabled.value = currentCall != null && !currentCall.mediaInProgress() isPauseEnabled.value = currentCall != null && !currentCall.mediaInProgress()
isMuteMicrophoneEnabled.value = currentCall != null || coreContext.core.isInConference isMuteMicrophoneEnabled.value = currentCall != null || coreContext.core.conference?.isIn == true
updateConferenceState() updateConferenceState()
// Check periodically until mediaInProgress is false // Check periodically until mediaInProgress is false
@ -426,8 +425,7 @@ class ControlsViewModel : ViewModel() {
} }
private fun updateSpeakerState() { private fun updateSpeakerState() {
val audioDevice = coreContext.core.outputAudioDevice isSpeakerSelected.value = AudioRouteUtils.isSpeakerAudioRouteCurrentlyUsed()
isSpeakerSelected.value = audioDevice?.type == AudioDevice.Type.Speaker
} }
private fun updateAudioRoutesState() { private fun updateAudioRoutesState() {
@ -439,9 +437,7 @@ class ControlsViewModel : ViewModel() {
} }
private fun updateBluetoothHeadsetState() { private fun updateBluetoothHeadsetState() {
if (coreContext.core.callsNb == 0) return isBluetoothHeadsetSelected.value = AudioRouteUtils.isBluetoothAudioRouteCurrentlyUsed()
val audioDevice = (coreContext.core.currentCall ?: coreContext.core.calls[0]).outputAudioDevice
isBluetoothHeadsetSelected.value = audioDevice?.type == AudioDevice.Type.Bluetooth
} }
private fun updateVideoAvailable() { private fun updateVideoAvailable() {
@ -449,7 +445,7 @@ class ControlsViewModel : ViewModel() {
val currentCall = core.currentCall val currentCall = core.currentCall
isVideoAvailable.value = (core.videoCaptureEnabled() || core.videoPreviewEnabled()) && isVideoAvailable.value = (core.videoCaptureEnabled() || core.videoPreviewEnabled()) &&
((currentCall != null && !currentCall.mediaInProgress()) || ((currentCall != null && !currentCall.mediaInProgress()) ||
(core.conference != null && core.isInConference)) core.conference?.isIn == true)
} }
private fun updateVideoEnabled() { private fun updateVideoEnabled() {
@ -459,6 +455,6 @@ class ControlsViewModel : ViewModel() {
private fun updateConferenceState() { private fun updateConferenceState() {
val core = coreContext.core 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()
} }
} }

View file

@ -98,6 +98,18 @@ class AudioRouteUtils {
Log.e("[Audio Route Helper] Couldn't find headset audio device") 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 { fun isBluetoothAudioRouteCurrentlyUsed(call: Call? = null): Boolean {
if (coreContext.core.callsNb == 0) { if (coreContext.core.callsNb == 0) {
Log.w("[Audio Route Helper] No call found, so bluetooth audio route isn't used") 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 currentCall = call ?: coreContext.core.currentCall ?: coreContext.core.calls[0]
val audioDevice = currentCall.outputAudioDevice 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 return audioDevice?.type == AudioDevice.Type.Bluetooth
} }