From 4ac78c5b3020ef85031e9befa4e569896866bd55 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 18 Aug 2023 14:17:07 +0200 Subject: [PATCH] Added confirmation dialog when going back during new/edit contact --- .../main/calls/fragment/CallsListFragment.kt | 4 +- ...logModel.kt => ConfirmationDialogModel.kt} | 2 +- .../contacts/fragment/EditContactFragment.kt | 23 +++- .../contacts/fragment/NewContactFragment.kt | 23 +++- .../java/org/linphone/utils/DialogUtils.kt | 35 ++++- .../layout/dialog_cancel_contact_changes.xml | 127 ++++++++++++++++++ .../layout/dialog_remove_all_call_logs.xml | 2 +- 7 files changed, 208 insertions(+), 8 deletions(-) rename app/src/main/java/org/linphone/ui/main/calls/model/{RemoveAllCallLogsDialogModel.kt => ConfirmationDialogModel.kt} (96%) create mode 100644 app/src/main/res/layout/dialog_cancel_contact_changes.xml diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt index b5c4f57c3..beb1056d1 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt @@ -40,7 +40,7 @@ import org.linphone.databinding.CallsListFragmentBinding import org.linphone.databinding.CallsListPopupMenuBinding import org.linphone.ui.main.MainActivity import org.linphone.ui.main.calls.adapter.CallsListAdapter -import org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel +import org.linphone.ui.main.calls.model.ConfirmationDialogModel import org.linphone.ui.main.calls.viewmodel.CallsListViewModel import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.DialogUtils @@ -179,7 +179,7 @@ class CallsListFragment : GenericFragment() { ) popupView.setDeleteAllHistoryClickListener { - val model = RemoveAllCallLogsDialogModel() + val model = ConfirmationDialogModel() val dialog = DialogUtils.getRemoveAllCallLogsConfirmationDialog( requireActivity(), model diff --git a/app/src/main/java/org/linphone/ui/main/calls/model/RemoveAllCallLogsDialogModel.kt b/app/src/main/java/org/linphone/ui/main/calls/model/ConfirmationDialogModel.kt similarity index 96% rename from app/src/main/java/org/linphone/ui/main/calls/model/RemoveAllCallLogsDialogModel.kt rename to app/src/main/java/org/linphone/ui/main/calls/model/ConfirmationDialogModel.kt index e78c689c6..07cfe2632 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/model/RemoveAllCallLogsDialogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/model/ConfirmationDialogModel.kt @@ -22,7 +22,7 @@ package org.linphone.ui.main.calls.model import androidx.lifecycle.MutableLiveData import org.linphone.utils.Event -class RemoveAllCallLogsDialogModel() { +class ConfirmationDialogModel() { val dismissEvent = MutableLiveData>() val confirmRemovalEvent = MutableLiveData>() diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt index 3144e588e..db848aa44 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt @@ -38,9 +38,11 @@ import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.ContactNewOrEditFragmentBinding import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.calls.model.ConfirmationDialogModel import org.linphone.ui.main.contacts.model.NewOrEditNumberOrAddressModel import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel import org.linphone.ui.main.fragment.GenericFragment +import org.linphone.utils.DialogUtils import org.linphone.utils.FileUtils class EditContactFragment : GenericFragment() { @@ -101,7 +103,26 @@ class EditContactFragment : GenericFragment() { viewModel.findFriendByRefKey(refKey) binding.setCancelClickListener { - goBack() + val model = ConfirmationDialogModel() + val dialog = DialogUtils.getCancelContactChangesConfirmationDialog( + requireActivity(), + model + ) + + model.dismissEvent.observe(viewLifecycleOwner) { + it.consume { + dialog.dismiss() + } + } + + model.confirmRemovalEvent.observe(viewLifecycleOwner) { + it.consume { + goBack() + dialog.dismiss() + } + } + + dialog.show() } binding.setPickImageClickListener { diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt index bfb1182c0..6ae5b1822 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt @@ -37,9 +37,11 @@ import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.ContactNewOrEditFragmentBinding import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.calls.model.ConfirmationDialogModel import org.linphone.ui.main.contacts.model.NewOrEditNumberOrAddressModel import org.linphone.ui.main.contacts.viewmodel.ContactNewOrEditViewModel import org.linphone.ui.main.fragment.GenericFragment +import org.linphone.utils.DialogUtils import org.linphone.utils.Event import org.linphone.utils.FileUtils @@ -95,7 +97,26 @@ class NewContactFragment : GenericFragment() { viewModel.findFriendByRefKey("") binding.setCancelClickListener { - goBack() + val model = ConfirmationDialogModel() + val dialog = DialogUtils.getCancelContactChangesConfirmationDialog( + requireActivity(), + model + ) + + model.dismissEvent.observe(viewLifecycleOwner) { + it.consume { + dialog.dismiss() + } + } + + model.confirmRemovalEvent.observe(viewLifecycleOwner) { + it.consume { + goBack() + dialog.dismiss() + } + } + + dialog.show() } binding.setPickImageClickListener { diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index 7db8d07d2..b65dc426b 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -29,10 +29,11 @@ import android.view.WindowManager import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import org.linphone.R +import org.linphone.databinding.DialogCancelContactChangesBinding import org.linphone.databinding.DialogConfirmZrtpSasBinding import org.linphone.databinding.DialogPickNumberOrAddressBinding import org.linphone.databinding.DialogRemoveAllCallLogsBinding -import org.linphone.ui.main.calls.model.RemoveAllCallLogsDialogModel +import org.linphone.ui.main.calls.model.ConfirmationDialogModel import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel import org.linphone.ui.voip.model.ZrtpSasConfirmationDialogModel @@ -66,9 +67,10 @@ class DialogUtils { dialog.window?.setBackgroundDrawable(d) return dialog } + fun getRemoveAllCallLogsConfirmationDialog( context: Context, - model: RemoveAllCallLogsDialogModel + model: ConfirmationDialogModel ): Dialog { val dialog = Dialog(context, R.style.Theme_LinphoneDialog) dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) @@ -95,6 +97,35 @@ class DialogUtils { return dialog } + fun getCancelContactChangesConfirmationDialog( + context: Context, + model: ConfirmationDialogModel + ): Dialog { + val dialog = Dialog(context, R.style.Theme_LinphoneDialog) + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) + + val binding: DialogCancelContactChangesBinding = DataBindingUtil.inflate( + LayoutInflater.from(context), + R.layout.dialog_cancel_contact_changes, + null, + false + ) + binding.viewModel = model + dialog.setContentView(binding.root) + + val d: Drawable = ColorDrawable( + ContextCompat.getColor(dialog.context, R.color.dialog_background) + ) + d.alpha = 166 + dialog.window + ?.setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.MATCH_PARENT + ) + dialog.window?.setBackgroundDrawable(d) + return dialog + } + fun getZrtpSasConfirmationDialog( context: Context, viewModel: ZrtpSasConfirmationDialogModel diff --git a/app/src/main/res/layout/dialog_cancel_contact_changes.xml b/app/src/main/res/layout/dialog_cancel_contact_changes.xml new file mode 100644 index 000000000..d9d1cf1ef --- /dev/null +++ b/app/src/main/res/layout/dialog_cancel_contact_changes.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_remove_all_call_logs.xml b/app/src/main/res/layout/dialog_remove_all_call_logs.xml index 69c605293..30428de4b 100644 --- a/app/src/main/res/layout/dialog_remove_all_call_logs.xml +++ b/app/src/main/res/layout/dialog_remove_all_call_logs.xml @@ -8,7 +8,7 @@ + type="org.linphone.ui.main.calls.model.ConfirmationDialogModel" />