Fixed group call outgoing process (hiding outgoing call fragment)

This commit is contained in:
Sylvain Berfini 2022-06-16 12:08:14 +02:00
parent 6f11fbc586
commit 435e4b84f6
3 changed files with 34 additions and 8 deletions

View file

@ -95,8 +95,7 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
chatRoomParams.subject = subject.value chatRoomParams.subject = subject.value
conferenceScheduler.sendInvitations(chatRoomParams) conferenceScheduler.sendInvitations(chatRoomParams)
} else { } else {
conferenceCreationInProgress.value = false // Will be done in coreListener
conferenceCreationCompletedEvent.value = Event(true)
} }
} else if (state == ConferenceSchedulerState.Error) { } else if (state == ConferenceSchedulerState.Error) {
Log.e("[Conference Creation] Failed to create conference!") Log.e("[Conference Creation] Failed to create conference!")
@ -128,6 +127,30 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
} }
} }
private val coreListener: CoreListenerStub = object : CoreListenerStub() {
override fun onCallStateChanged(
core: Core,
call: Call,
state: Call.State?,
message: String
) {
when (state) {
Call.State.OutgoingProgress -> {
conferenceCreationInProgress.value = false
}
Call.State.End -> {
Log.i("[Conference Creation] Call has ended, leaving waiting room fragment")
conferenceCreationCompletedEvent.value = Event(true)
}
Call.State.Error -> {
Log.w("[Conference Creation] Call has failed, leaving waiting room fragment")
conferenceCreationCompletedEvent.value = Event(true)
}
else -> {}
}
}
}
init { init {
sipContactsSelected.value = true sipContactsSelected.value = true
@ -159,9 +182,11 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
} }
conferenceScheduler.addListener(listener) conferenceScheduler.addListener(listener)
coreContext.core.addListener(coreListener)
} }
override fun onCleared() { override fun onCleared() {
coreContext.core.removeListener(coreListener)
conferenceScheduler.removeListener(listener) conferenceScheduler.removeListener(listener)
participantsData.value.orEmpty().forEach(ConferenceSchedulingParticipantData::destroy) participantsData.value.orEmpty().forEach(ConferenceSchedulingParticipantData::destroy)

View file

@ -90,11 +90,12 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() {
message: String message: String
) { ) {
when (state) { when (state) {
Call.State.Connected -> { Call.State.End -> {
Log.i("[Conference Waiting Room] Call is now connected") Log.i("[Conference Waiting Room] Call has ended, leaving waiting room fragment")
leaveWaitingRoomEvent.value = Event(true)
} }
Call.State.End, Call.State.Error -> { Call.State.Error -> {
Log.w("[Conference Waiting Room] Call has failed or ended, leaving waiting room fragment") Log.w("[Conference Waiting Room] Call has failed, leaving waiting room fragment")
leaveWaitingRoomEvent.value = Event(true) leaveWaitingRoomEvent.value = Event(true)
} }
else -> {} else -> {}

View file

@ -182,13 +182,13 @@ class CoreContext(
) )
} }
} }
} else if (state == Call.State.OutgoingInit) { } else if (state == Call.State.OutgoingProgress) {
val conferenceInfo = core.findConferenceInformationFromUri(call.remoteAddress) val conferenceInfo = core.findConferenceInformationFromUri(call.remoteAddress)
// Do not show outgoing call view for conference calls, wait for connected state // Do not show outgoing call view for conference calls, wait for connected state
if (conferenceInfo == null) { if (conferenceInfo == null) {
onOutgoingStarted() onOutgoingStarted()
} }
} else if (state == Call.State.OutgoingProgress) {
if (core.callsNb == 1 && corePreferences.routeAudioToBluetoothIfAvailable) { if (core.callsNb == 1 && corePreferences.routeAudioToBluetoothIfAvailable) {
AudioRouteUtils.routeAudioToBluetooth(call) AudioRouteUtils.routeAudioToBluetooth(call)
} }