From 16d15242c71b66686e8ce96f9415e5d7ba014fa1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Apr 2024 10:17:02 +0200 Subject: [PATCH] Improved connection to meeting waiting screen --- .../fragment/MeetingWaitingRoomFragment.kt | 12 +++++ .../viewmodel/MeetingWaitingRoomViewModel.kt | 13 +++++ .../org/linphone/utils/DataBindingUtils.kt | 8 ++- .../meeting_waiting_room_fragment.xml | 54 +++++++++++++++++++ .../call_conference_active_speaker_cell.xml | 1 + .../call_conference_audio_only_cell.xml | 1 + .../res/layout/call_conference_grid_cell.xml | 1 + app/src/main/res/layout/contact_avatar.xml | 4 ++ .../main/res/layout/contact_avatar_big.xml | 5 ++ .../main/res/layout/contact_avatar_medium.xml | 5 ++ .../main/res/layout/contact_avatar_small.xml | 1 + .../layout/meeting_waiting_room_fragment.xml | 54 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 14 files changed, 162 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt index e24f5e518..fafba6c4c 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingWaitingRoomFragment.kt @@ -39,6 +39,7 @@ import org.linphone.core.tools.Log import org.linphone.databinding.MeetingWaitingRoomFragmentBinding import org.linphone.ui.call.fragment.AudioDevicesMenuDialogFragment import org.linphone.ui.call.model.AudioDeviceModel +import org.linphone.ui.main.MainActivity import org.linphone.ui.main.fragment.GenericFragment import org.linphone.ui.main.meetings.viewmodel.MeetingWaitingRoomViewModel @@ -132,6 +133,17 @@ class MeetingWaitingRoomFragment : GenericFragment() { } } + viewModel.conferenceCreationError.observe(viewLifecycleOwner) { + it.consume { + Log.e("$TAG Error joining the conference!") + val message = getString( + R.string.toast_no_app_registered_to_handle_content_type_error + ) + val icon = R.drawable.x + (requireActivity() as MainActivity).showRedToast(message, icon) + } + } + if (!isCameraPermissionGranted()) { viewModel.isVideoAvailable.value = false Log.w("$TAG Camera permission wasn't granted yet, asking for it now") diff --git a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingWaitingRoomViewModel.kt b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingWaitingRoomViewModel.kt index 51fbdc03d..16e3d348f 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingWaitingRoomViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingWaitingRoomViewModel.kt @@ -70,6 +70,8 @@ class MeetingWaitingRoomViewModel @UiThread constructor() : ViewModel() { val hideVideo = MutableLiveData() + val joining = MutableLiveData() + val conferenceInfoFoundEvent = MutableLiveData>() val showAudioDevicesListEvent: MutableLiveData>> by lazy { @@ -80,6 +82,10 @@ class MeetingWaitingRoomViewModel @UiThread constructor() : ViewModel() { MutableLiveData>() } + val conferenceCreationError: MutableLiveData> by lazy { + MutableLiveData>() + } + private lateinit var conferenceInfo: ConferenceInfo private lateinit var selectedOutputAudioDevice: AudioDevice @@ -97,11 +103,17 @@ class MeetingWaitingRoomViewModel @UiThread constructor() : ViewModel() { Log.i("$TAG Conference state changed: [$state]") if (conference.state == Conference.State.Created) { conferenceCreatedEvent.postValue(Event(true)) + joining.postValue(false) + } else if (conference.state == Conference.State.CreationFailed) { + conferenceCreationError.postValue(Event(true)) + joining.postValue(false) } } } init { + joining.value = false + coreContext.postOnCoreThread { core -> core.addListener(coreListener) @@ -193,6 +205,7 @@ class MeetingWaitingRoomViewModel @UiThread constructor() : ViewModel() { params.outputAudioDevice = selectedOutputAudioDevice } params.account = core.defaultAccount + joining.postValue(true) coreContext.startCall(conferenceUri, params) } } diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 403127a55..5da4b134d 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -206,7 +206,13 @@ fun AppCompatTextView.setDrawableTint(@ColorInt color: Int) { @UiThread @BindingAdapter("presenceIcon") fun ImageView.setPresenceIcon(presence: ConsolidatedPresence?) { - visibility = if (presence == null || presence == ConsolidatedPresence.Offline) { + setPresenceIcon(presence, false) +} + +@UiThread +@BindingAdapter("presenceIcon", "hidePresence") +fun ImageView.setPresenceIcon(presence: ConsolidatedPresence?, hidePresence: Boolean) { + visibility = if (hidePresence || presence == null || presence == ConsolidatedPresence.Offline) { View.GONE } else { View.VISIBLE diff --git a/app/src/main/res/layout-land/meeting_waiting_room_fragment.xml b/app/src/main/res/layout-land/meeting_waiting_room_fragment.xml index f3eaf9d0a..f101993dc 100644 --- a/app/src/main/res/layout-land/meeting_waiting_room_fragment.xml +++ b/app/src/main/res/layout-land/meeting_waiting_room_fragment.xml @@ -192,6 +192,60 @@ app:layout_constraintStart_toEndOf="@id/half_screen" app:layout_constraintEnd_toEndOf="parent" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/call_conference_active_speaker_cell.xml b/app/src/main/res/layout/call_conference_active_speaker_cell.xml index f79c8fef4..03d7ffd93 100644 --- a/app/src/main/res/layout/call_conference_active_speaker_cell.xml +++ b/app/src/main/res/layout/call_conference_active_speaker_cell.xml @@ -30,6 +30,7 @@ android:visibility="@{model.isSendingVideo || model.isJoining || !model.isInConference ? View.GONE : View.VISIBLE}" layout="@layout/contact_avatar_medium" bind:model="@{model.avatarModel}" + bind:hidePresence="@{true}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/call_conference_audio_only_cell.xml b/app/src/main/res/layout/call_conference_audio_only_cell.xml index 89a4d779e..2903d4f05 100644 --- a/app/src/main/res/layout/call_conference_audio_only_cell.xml +++ b/app/src/main/res/layout/call_conference_audio_only_cell.xml @@ -33,6 +33,7 @@ android:layout_marginStart="10dp" layout="@layout/contact_avatar" bind:model="@{model.avatarModel}" + bind:hidePresence="@{true}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/call_conference_grid_cell.xml b/app/src/main/res/layout/call_conference_grid_cell.xml index 11bdbbe00..e6cefda11 100644 --- a/app/src/main/res/layout/call_conference_grid_cell.xml +++ b/app/src/main/res/layout/call_conference_grid_cell.xml @@ -30,6 +30,7 @@ android:visibility="@{model.isSendingVideo || model.isJoining || !model.isInConference ? View.GONE : View.VISIBLE}" layout="@layout/contact_avatar_big" bind:model="@{model.avatarModel}" + bind:hidePresence="@{true}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/contact_avatar.xml b/app/src/main/res/layout/contact_avatar.xml index 25aedb522..5726731be 100644 --- a/app/src/main/res/layout/contact_avatar.xml +++ b/app/src/main/res/layout/contact_avatar.xml @@ -9,6 +9,9 @@ + diff --git a/app/src/main/res/layout/contact_avatar_big.xml b/app/src/main/res/layout/contact_avatar_big.xml index 71b6558af..bca644def 100644 --- a/app/src/main/res/layout/contact_avatar_big.xml +++ b/app/src/main/res/layout/contact_avatar_big.xml @@ -9,6 +9,9 @@ + @@ -62,4 +66,5 @@ app:layout_constraintBottom_toBottomOf="@id/avatar"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/contact_avatar_medium.xml b/app/src/main/res/layout/contact_avatar_medium.xml index adeebc58b..510d50522 100644 --- a/app/src/main/res/layout/contact_avatar_medium.xml +++ b/app/src/main/res/layout/contact_avatar_medium.xml @@ -9,6 +9,9 @@ + @@ -62,4 +66,5 @@ app:layout_constraintBottom_toBottomOf="@id/avatar"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/contact_avatar_small.xml b/app/src/main/res/layout/contact_avatar_small.xml index e76cc2798..5ec436a6e 100644 --- a/app/src/main/res/layout/contact_avatar_small.xml +++ b/app/src/main/res/layout/contact_avatar_small.xml @@ -62,4 +62,5 @@ app:layout_constraintBottom_toBottomOf="@id/avatar"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/meeting_waiting_room_fragment.xml b/app/src/main/res/layout/meeting_waiting_room_fragment.xml index 6abe68f31..dbf0f3ffd 100644 --- a/app/src/main/res/layout/meeting_waiting_room_fragment.xml +++ b/app/src/main/res/layout/meeting_waiting_room_fragment.xml @@ -188,6 +188,60 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index afc9bc100..d98cda98b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -485,6 +485,8 @@ La réunion a été annulée Rejoindre + Connexion à la réunion + Vous allez rejoindre la réunion dans quelques instants… Appel sortant Appel entrant diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a2d9dbb98..0812d7641 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -534,6 +534,8 @@ Meeting has been cancelled Join + Connection in progress + You\'ll be joining in a short moment Outgoing call