diff --git a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceSchedulingViewModel.kt b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceSchedulingViewModel.kt index 42b051eb7..7960ae678 100644 --- a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceSchedulingViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceSchedulingViewModel.kt @@ -95,8 +95,7 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() { chatRoomParams.subject = subject.value conferenceScheduler.sendInvitations(chatRoomParams) } else { - conferenceCreationInProgress.value = false - conferenceCreationCompletedEvent.value = Event(true) + // Will be done in coreListener } } else if (state == ConferenceSchedulerState.Error) { 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 { sipContactsSelected.value = true @@ -159,9 +182,11 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() { } conferenceScheduler.addListener(listener) + coreContext.core.addListener(coreListener) } override fun onCleared() { + coreContext.core.removeListener(coreListener) conferenceScheduler.removeListener(listener) participantsData.value.orEmpty().forEach(ConferenceSchedulingParticipantData::destroy) diff --git a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt index cf2667268..358f01ee7 100644 --- a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt @@ -90,11 +90,12 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { message: String ) { when (state) { - Call.State.Connected -> { - Log.i("[Conference Waiting Room] Call is now connected") + Call.State.End -> { + Log.i("[Conference Waiting Room] Call has ended, leaving waiting room fragment") + leaveWaitingRoomEvent.value = Event(true) } - Call.State.End, Call.State.Error -> { - Log.w("[Conference Waiting Room] Call has failed or ended, leaving waiting room fragment") + Call.State.Error -> { + Log.w("[Conference Waiting Room] Call has failed, leaving waiting room fragment") leaveWaitingRoomEvent.value = Event(true) } else -> {} diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index fdfa82fd5..8934de199 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -182,13 +182,13 @@ class CoreContext( ) } } - } else if (state == Call.State.OutgoingInit) { + } else if (state == Call.State.OutgoingProgress) { val conferenceInfo = core.findConferenceInformationFromUri(call.remoteAddress) // Do not show outgoing call view for conference calls, wait for connected state if (conferenceInfo == null) { onOutgoingStarted() } - } else if (state == Call.State.OutgoingProgress) { + if (core.callsNb == 1 && corePreferences.routeAudioToBluetoothIfAvailable) { AudioRouteUtils.routeAudioToBluetooth(call) }