From cfe7a8ed3820ad806a3354b168a2544559981a8b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 4 Jun 2024 11:01:50 +0200 Subject: [PATCH] Added confirmation dialog before clearing conversation history --- .../chat/fragment/ConversationInfoFragment.kt | 30 ++++- .../viewmodel/ConversationInfoViewModel.kt | 1 - .../java/org/linphone/utils/DialogUtils.kt | 17 +++ .../main/res/layout/chat_info_fragment.xml | 5 +- .../dialog_remove_conversation_history.xml | 104 ++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values/strings.xml | 4 +- 7 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/layout/dialog_remove_conversation_history.xml diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt index ed4813532..398ae2d9d 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt @@ -42,6 +42,7 @@ import org.linphone.ui.main.chat.model.ParticipantModel import org.linphone.ui.main.chat.viewmodel.ConversationInfoViewModel import org.linphone.ui.main.fragment.GroupSetOrEditSubjectDialogModel import org.linphone.ui.main.fragment.SlidingPaneChildFragment +import org.linphone.ui.main.history.model.ConfirmationDialogModel import org.linphone.utils.DialogUtils import org.linphone.utils.Event @@ -150,7 +151,7 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { Log.i("$TAG History has been deleted, leaving conversation info...") sharedViewModel.forceRefreshConversationEvents.value = Event(true) goBack() - val message = getString(R.string.toast_conversation_history_deleted) + val message = getString(R.string.conversation_info_history_deleted_toast) (requireActivity() as GenericActivity).showGreenToast( message, R.drawable.chat_teardrop_text @@ -293,6 +294,10 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { findNavController().navigate(action) } } + + binding.setDeleteHistoryClickListener { + showDeleteHistoryConfirmationDialog() + } } private fun showParticipantAdminPopupMenu(view: View, participantModel: ParticipantModel) { @@ -373,4 +378,27 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { popupWindow.elevation = 20f popupWindow.showAsDropDown(view, 0, 0, Gravity.BOTTOM) } + + private fun showDeleteHistoryConfirmationDialog() { + val model = ConfirmationDialogModel() + val dialog = DialogUtils.getDeleteConversationHistoryConfirmationDialog( + requireActivity(), + model + ) + + model.dismissEvent.observe(viewLifecycleOwner) { + it.consume { + dialog.dismiss() + } + } + + model.confirmEvent.observe(viewLifecycleOwner) { + it.consume { + viewModel.deleteHistory() + dialog.dismiss() + } + } + + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt index 9f9954022..f022840ef 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt @@ -267,7 +267,6 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi @UiThread fun deleteHistory() { coreContext.postOnCoreThread { - // TODO: confirmation dialog ? if (isChatRoomInitialized()) { Log.i( "$TAG Cleaning conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] history" diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index a08298f6f..6cdcc9040 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -50,6 +50,7 @@ import org.linphone.databinding.DialogPickNumberOrAddressBinding import org.linphone.databinding.DialogRemoveAccountBinding import org.linphone.databinding.DialogRemoveAllCallLogsBinding import org.linphone.databinding.DialogRemoveCallLogsBinding +import org.linphone.databinding.DialogRemoveConversationHistoryBinding import org.linphone.databinding.DialogSetOrEditGroupSubjectBindingImpl import org.linphone.databinding.DialogUpdateAccountPasswordBinding import org.linphone.databinding.DialogUpdateAvailableBinding @@ -293,6 +294,22 @@ class DialogUtils { return getDialog(context, binding) } + @UiThread + fun getDeleteConversationHistoryConfirmationDialog( + context: Context, + viewModel: ConfirmationDialogModel + ): Dialog { + val binding: DialogRemoveConversationHistoryBinding = DataBindingUtil.inflate( + LayoutInflater.from(context), + R.layout.dialog_remove_conversation_history, + null, + false + ) + binding.viewModel = viewModel + + return getDialog(context, binding) + } + @UiThread fun getOpenOrExportFileDialog( context: Context, diff --git a/app/src/main/res/layout/chat_info_fragment.xml b/app/src/main/res/layout/chat_info_fragment.xml index 38a0cb660..66dd6cba7 100644 --- a/app/src/main/res/layout/chat_info_fragment.xml +++ b/app/src/main/res/layout/chat_info_fragment.xml @@ -24,6 +24,9 @@ + @@ -443,7 +446,7 @@ android:layout_marginBottom="@dimen/screen_bottom_margin" android:background="@drawable/action_background" android:drawableStart="@drawable/trash_simple" - android:onClick="@{() -> viewModel.deleteHistory()}" + android:onClick="@{deleteHistoryClickListener}" android:text="@string/conversation_info_delete_history_action" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@id/actions_background" diff --git a/app/src/main/res/layout/dialog_remove_conversation_history.xml b/app/src/main/res/layout/dialog_remove_conversation_history.xml new file mode 100644 index 000000000..4f66142de --- /dev/null +++ b/app/src/main/res/layout/dialog_remove_conversation_history.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 8aa3eb0aa..0a059da14 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -94,7 +94,6 @@ Durée maximale atteinte Un ou plusieurs participants n\'ont pû être ajoutés Conversation supprimée - Historique d\'appels supprimé Vous avez quitté la conversation Le volume media est bas, vous pourriez ne rien entendre ! Aucune application trouvée pour lire ce fichier @@ -494,6 +493,9 @@ Retirer les privilèges administrateur Voir le contact Ajouter aux contacts + Voulez-vous tout supprimer ? + Tout les messages de cette conversation seront supprimés. + Historique supprimé Vous avez rejoint le groupe Vous avez quitté le groupe diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb91b20ae..40ce61df1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -129,7 +129,6 @@ Max duration reached Failed to add participant(s) to conversation Conversation was successfully deleted - History has been successfully deleted You have left the group Media volume is low, you may not hear anything! No app found to open this kind of file @@ -530,6 +529,9 @@ Remove admin rights See contact profile Add to contacts + Do you really want to delete all messages? + All messages will be removed from the history + History has been successfully deleted You have joined the group You have left the group