From a871fb971b5db424c457e1431a681c519841973f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 20 Mar 2024 10:53:35 +0100 Subject: [PATCH] Updated conference invitation chat message layout to add label/icon when meeting is updated/cancelled --- .../ui/main/chat/model/MessageModel.kt | 8 ++++ .../meetings/fragment/EditMeetingFragment.kt | 5 ++ .../main/meetings/fragment/MeetingFragment.kt | 4 ++ .../fragment/ScheduleMeetingFragment.kt | 5 ++ .../meetings/viewmodel/MeetingViewModel.kt | 6 ++- .../chat_bubble_meeting_invite_content.xml | 48 ++++++++++++++++++- app/src/main/res/values-fr/strings.xml | 11 ++++- app/src/main/res/values/strings.xml | 11 ++++- 8 files changed, 90 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt index cf09cc08b..e029bcc5f 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt @@ -45,6 +45,7 @@ import org.linphone.core.ChatMessage import org.linphone.core.ChatMessageListenerStub import org.linphone.core.ChatMessageReaction import org.linphone.core.ChatRoom +import org.linphone.core.ConferenceInfo import org.linphone.core.Content import org.linphone.core.Factory import org.linphone.core.Player @@ -120,6 +121,10 @@ class MessageModel @WorkerThread constructor( // Below are for conferences info val meetingFound = MutableLiveData() + val meetingUpdated = MutableLiveData() + + val meetingCancelled = MutableLiveData() + val meetingDay = MutableLiveData() val meetingDayNumber = MutableLiveData() @@ -581,6 +586,9 @@ class MessageModel @WorkerThread constructor( meetingSubject.postValue(conferenceInfo.subject) meetingDescription.postValue(conferenceInfo.description) + meetingUpdated.postValue(conferenceInfo.state == ConferenceInfo.State.Updated) + meetingCancelled.postValue(conferenceInfo.state == ConferenceInfo.State.Cancelled) + val timestamp = conferenceInfo.dateTime val duration = conferenceInfo.duration val date = TimestampUtils.toString( diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/EditMeetingFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/EditMeetingFragment.kt index 0034270fd..e9d245202 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/EditMeetingFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/EditMeetingFragment.kt @@ -36,6 +36,7 @@ import com.google.android.material.timepicker.TimeFormat import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.MeetingEditFragmentBinding +import org.linphone.ui.main.MainActivity import org.linphone.ui.main.fragment.SlidingPaneChildFragment import org.linphone.ui.main.meetings.viewmodel.ScheduleMeetingViewModel import org.linphone.utils.Event @@ -167,6 +168,10 @@ class EditMeetingFragment : SlidingPaneChildFragment() { viewModel.conferenceCreatedEvent.observe(viewLifecycleOwner) { it.consume { Log.i("$TAG Conference was scheduled, leaving fragment and ask list to refresh") + (requireActivity() as MainActivity).showGreenToast( + getString(R.string.meeting_info_updated_toast), + R.drawable.check + ) sharedViewModel.forceRefreshMeetingsListEvent.value = Event(true) goBack() } diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingFragment.kt index bed84bc8e..760162eb3 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingFragment.kt @@ -159,6 +159,10 @@ class MeetingFragment : SlidingPaneChildFragment() { viewModel.conferenceCancelledEvent.observe(viewLifecycleOwner) { it.consume { Log.i("$TAG Meeting has been cancelled successfully, deleting it") + (requireActivity() as MainActivity).showGreenToast( + getString(R.string.meeting_info_cancelled_toast), + R.drawable.trash_simple + ) viewModel.delete() } } diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/ScheduleMeetingFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/ScheduleMeetingFragment.kt index 2ed9258e2..4a289f189 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/ScheduleMeetingFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/ScheduleMeetingFragment.kt @@ -36,6 +36,7 @@ import com.google.android.material.timepicker.TimeFormat import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.MeetingScheduleFragmentBinding +import org.linphone.ui.main.MainActivity import org.linphone.ui.main.fragment.GenericFragment import org.linphone.ui.main.meetings.viewmodel.ScheduleMeetingViewModel import org.linphone.utils.Event @@ -169,6 +170,10 @@ class ScheduleMeetingFragment : GenericFragment() { viewModel.conferenceCreatedEvent.observe(viewLifecycleOwner) { it.consume { Log.i("$TAG Conference was scheduled, leaving fragment and ask list to refresh") + (requireActivity() as MainActivity).showGreenToast( + getString(R.string.meeting_info_created_toast), + R.drawable.check + ) sharedViewModel.forceRefreshMeetingsListEvent.value = Event(true) goBack() } diff --git a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt index a79e958b1..6092f3085 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/MeetingViewModel.kt @@ -96,9 +96,8 @@ class MeetingViewModel @UiThread constructor() : ViewModel() { chatRoomParams.isEncryptionEnabled = true chatRoomParams.subject = "Meeting cancelled" // Won't be used conferenceScheduler.sendInvitations(chatRoomParams) // Send cancel ICS - + } else if (state == ConferenceScheduler.State.Error) { operationInProgress.postValue(false) - conferenceCancelledEvent.postValue(Event(true)) } } @@ -118,6 +117,9 @@ class MeetingViewModel @UiThread constructor() : ViewModel() { ) } conferenceScheduler.removeListener(this) + + operationInProgress.postValue(false) + conferenceCancelledEvent.postValue(Event(true)) } } diff --git a/app/src/main/res/layout/chat_bubble_meeting_invite_content.xml b/app/src/main/res/layout/chat_bubble_meeting_invite_content.xml index 7e464d75f..2081ce644 100644 --- a/app/src/main/res/layout/chat_bubble_meeting_invite_content.xml +++ b/app/src/main/res/layout/chat_bubble_meeting_invite_content.xml @@ -34,6 +34,48 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="@id/day_background"/> + + + + @@ -101,7 +143,7 @@ app:drawableTint="?attr/color_main2_600" app:layout_constraintStart_toEndOf="@id/day_background" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toBottomOf="@id/meeting_cancelled_title"/> Modifier la réunion Annuler la réunion? Voulez-vous annuler la réunion et envoyer une notification aux participants? + La réunion a été créée + La réunion a été mise à jour + La réunion a été annulée Rejoindre @@ -577,17 +580,21 @@ Vous n\'êtes pas connecté à internet Opération en cours, merci de patienter… - + Passer Mot de passe oublié ? Passer - + invitation à une réunion : %s réunion mise à jour : %s réunion annulée : %s message vocal + + La réunion a été mise à jour + La réunion a été annulée + Contact is trusted Contact is not trusted! Contact is online diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 39530870e..19f2a18df 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -528,6 +528,9 @@ Edit meeting Cancel the meeting? Do you want to cancel the meeting and send a notification to all participants? + Meeting has been created + Meeting has been updated + Meeting has been cancelled Join @@ -631,17 +634,21 @@ You aren\'t connected to internet Operation in progress, please wait - + Skip Forgotten password? Skip - + meeting invite: %s meeting updated: %s meeting cancelled: %s voice message + + Meeting has been updated + Meeting has been cancelled! + Contact is trusted Contact is not trusted!