From 7016afa6f85b65bc18cc464d85d8414e8c44b262 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 25 Aug 2023 15:05:38 +0200 Subject: [PATCH] Added trust explanation dialog in contact detail + improved DialogUtils class --- .../main/calls/fragment/StartCallFragment.kt | 4 +- .../main/contacts/fragment/ContactFragment.kt | 11 ++ .../contacts/viewmodel/ContactViewModel.kt | 9 ++ .../java/org/linphone/utils/DialogUtils.kt | 72 +++++------- app/src/main/res/layout/contact_fragment.xml | 25 ++++- .../layout/dialog_contact_trust_process.xml | 105 ++++++++++++++++++ 6 files changed, 173 insertions(+), 53 deletions(-) create mode 100644 app/src/main/res/layout/dialog_contact_trust_process.xml diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt index d0afa0681..015d3a65d 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt @@ -30,7 +30,6 @@ import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R -import org.linphone.core.Address import org.linphone.databinding.CallStartFragmentBinding import org.linphone.ui.main.calls.adapter.SuggestionsListAdapter import org.linphone.ui.main.calls.viewmodel.StartCallViewModel @@ -66,7 +65,8 @@ class StartCallFragment : GenericFragment() { private val listener = object : ContactNumberOrAddressClickListener { @UiThread - override fun onClicked(address: Address?) { + override fun onClicked(model: ContactNumberOrAddressModel) { + val address = model.address if (address != null) { coreContext.postOnCoreThread { coreContext.startCall(address) diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt index abdff70ef..5f75a79d1 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt @@ -172,6 +172,12 @@ class ContactFragment : GenericFragment() { shareContact(file) } } + + viewModel.displayTrustProcessDialogEvent.observe(viewLifecycleOwner) { + it.consume { + showTrustProcessDialog() + } + } } private fun copyNumberOrAddressToClipboard(value: String, isSip: Boolean) { @@ -214,4 +220,9 @@ class ContactFragment : GenericFragment() { } startActivity(smsIntent) } + + private fun showTrustProcessDialog() { + val dialog = DialogUtils.getContactTrustProcessExplanationDialog(requireActivity()) + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index bf67ecd32..3c4609086 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -84,6 +84,10 @@ class ContactViewModel @UiThread constructor() : ViewModel() { MutableLiveData>() } + val displayTrustProcessDialogEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + private val listener = object : ContactNumberOrAddressClickListener { @UiThread override fun onClicked(model: ContactNumberOrAddressModel) { @@ -234,6 +238,11 @@ class ContactViewModel @UiThread constructor() : ViewModel() { expandDevicesTrust.value = expandDevicesTrust.value == false } + @UiThread + fun displayTrustDialog() { + displayTrustProcessDialogEvent.value = Event(true) + } + @UiThread fun editContact() { coreContext.postOnCoreThread { diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index f4988eb0f..35b597d04 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -29,9 +29,11 @@ import android.view.WindowManager import androidx.annotation.UiThread import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil +import androidx.databinding.ViewDataBinding import org.linphone.R import org.linphone.databinding.DialogCancelContactChangesBinding import org.linphone.databinding.DialogConfirmZrtpSasBinding +import org.linphone.databinding.DialogContactTrustProcessBinding import org.linphone.databinding.DialogPickNumberOrAddressBinding import org.linphone.databinding.DialogRemoveAllCallLogsBinding import org.linphone.ui.main.calls.model.ConfirmationDialogModel @@ -45,9 +47,6 @@ class DialogUtils { context: Context, viewModel: NumberOrAddressPickerDialogModel ): Dialog { - val dialog = Dialog(context, R.style.Theme_LinphoneDialog) - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - val binding: DialogPickNumberOrAddressBinding = DataBindingUtil.inflate( LayoutInflater.from(context), R.layout.dialog_pick_number_or_address, @@ -55,18 +54,23 @@ class DialogUtils { false ) binding.viewModel = viewModel - dialog.setContentView(binding.root) - val d: Drawable = ColorDrawable( - ContextCompat.getColor(dialog.context, R.color.dialog_background) + return getDialog(context, binding) + } + + fun getContactTrustProcessExplanationDialog(context: Context): Dialog { + val binding: DialogContactTrustProcessBinding = DataBindingUtil.inflate( + LayoutInflater.from(context), + R.layout.dialog_contact_trust_process, + null, + false ) - d.alpha = 166 - dialog.window - ?.setLayout( - WindowManager.LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.MATCH_PARENT - ) - dialog.window?.setBackgroundDrawable(d) + val dialog = getDialog(context, binding) + + binding.setDismissClickListener { + dialog.dismiss() + } + return dialog } @@ -75,9 +79,6 @@ class DialogUtils { context: Context, model: ConfirmationDialogModel ): Dialog { - val dialog = Dialog(context, R.style.Theme_LinphoneDialog) - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - val binding: DialogRemoveAllCallLogsBinding = DataBindingUtil.inflate( LayoutInflater.from(context), R.layout.dialog_remove_all_call_logs, @@ -85,19 +86,8 @@ class DialogUtils { 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 + return getDialog(context, binding) } @UiThread @@ -105,9 +95,6 @@ class DialogUtils { 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, @@ -115,19 +102,8 @@ class DialogUtils { 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 + return getDialog(context, binding) } @UiThread @@ -135,9 +111,6 @@ class DialogUtils { context: Context, viewModel: ZrtpSasConfirmationDialogModel ): Dialog { - val dialog = Dialog(context, R.style.Theme_LinphoneDialog) - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - val binding: DialogConfirmZrtpSasBinding = DataBindingUtil.inflate( LayoutInflater.from(context), R.layout.dialog_confirm_zrtp_sas, @@ -145,6 +118,13 @@ class DialogUtils { false ) binding.viewModel = viewModel + + return getDialog(context, binding) + } + + private fun getDialog(context: Context, binding: ViewDataBinding): Dialog { + val dialog = Dialog(context, R.style.Theme_LinphoneDialog) + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog.setContentView(binding.root) val d: Drawable = ColorDrawable( diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index 329d2912d..3494972db 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -346,19 +346,34 @@ + + diff --git a/app/src/main/res/layout/dialog_contact_trust_process.xml b/app/src/main/res/layout/dialog_contact_trust_process.xml new file mode 100644 index 000000000..d79670620 --- /dev/null +++ b/app/src/main/res/layout/dialog_contact_trust_process.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file