From 256a3ed77a0df0307c72810dd7f946e79c058ef3 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 31 Jul 2023 10:11:25 +0200 Subject: [PATCH] Showing confirmation dialog when about to create a new contact without SIP URI nor phone number (won't be displayed) --- .../fragments/ContactEditorFragment.kt | 73 ++++++++++++++++++- app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/ContactEditorFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/ContactEditorFragment.kt index 94b0d81f9..31c5497ac 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/ContactEditorFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/ContactEditorFragment.kt @@ -20,6 +20,7 @@ package org.linphone.activities.main.contact.fragments import android.app.Activity +import android.app.Dialog import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle @@ -38,9 +39,11 @@ import org.linphone.activities.main.MainActivity import org.linphone.activities.main.contact.data.ContactEditorData import org.linphone.activities.main.contact.data.NumberOrAddressEditorData import org.linphone.activities.main.contact.viewmodels.* +import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.navigateToContact import org.linphone.core.tools.Log import org.linphone.databinding.ContactEditorFragmentBinding +import org.linphone.utils.DialogUtils import org.linphone.utils.FileUtils import org.linphone.utils.PermissionHelper @@ -71,10 +74,38 @@ class ContactEditorFragment : GenericFragment(), S data.syncAccountName = null data.syncAccountType = null - if (data.friend == null && corePreferences.showNewContactAccountDialog) { - Log.i("[Contact Editor] New contact, ask user where to store it") - SyncAccountPickerFragment(this).show(childFragmentManager, "SyncAccountPicker") + if (data.friend == null) { + var atLeastASipAddressOrPhoneNumber = false + for (addr in data.addresses.value.orEmpty()) { + if (addr.newValue.value.orEmpty().isNotEmpty()) { + atLeastASipAddressOrPhoneNumber = true + break + } + } + if (!atLeastASipAddressOrPhoneNumber) { + for (number in data.numbers.value.orEmpty()) { + if (number.newValue.value.orEmpty().isNotEmpty()) { + atLeastASipAddressOrPhoneNumber = true + break + } + } + } + if (!atLeastASipAddressOrPhoneNumber) { + // Contact will be created without phone and SIP address + // Let's warn the user it won't be visible in Linphone app + Log.w( + "[Contact Editor] New contact without SIP address nor phone number, showing warning dialog" + ) + showInvisibleContactWarningDialog() + } else if (corePreferences.showNewContactAccountDialog) { + Log.i("[Contact Editor] New contact, ask user where to store it") + SyncAccountPickerFragment(this).show(childFragmentManager, "SyncAccountPicker") + } else { + Log.i("[Contact Editor] Saving new contact") + saveContact() + } } else { + Log.i("[Contact Editor] Saving contact changes") saveContact() } } @@ -98,7 +129,7 @@ class ContactEditorFragment : GenericFragment(), S } override fun onSyncAccountClicked(name: String?, type: String?) { - Log.i("[Contact Editor] Using account $name / $type") + Log.i("[Contact Editor] Saving new contact using account $name / $type") data.syncAccountName = name data.syncAccountType = type saveContact() @@ -146,6 +177,9 @@ class ContactEditorFragment : GenericFragment(), S Log.i("[Contact Editor] Displaying contact $savedContact") navigateToContact(id) } else { + Log.w( + "[Contact Editor] Can't display $savedContact because it doesn't have a refKey, going back" + ) goBack() } } @@ -183,4 +217,35 @@ class ContactEditorFragment : GenericFragment(), S startActivityForResult(chooserIntent, 0) } + + private fun showInvisibleContactWarningDialog() { + val dialogViewModel = + DialogViewModel(getString(R.string.contacts_new_contact_wont_be_visible_warning_dialog)) + val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) + + dialogViewModel.showCancelButton( + { + Log.i("[Contact Editor] Aborting new contact saving") + dialog.dismiss() + }, + getString(R.string.no) + ) + + dialogViewModel.showOkButton( + { + dialog.dismiss() + + if (corePreferences.showNewContactAccountDialog) { + Log.i("[Contact Editor] New contact, ask user where to store it") + SyncAccountPickerFragment(this).show(childFragmentManager, "SyncAccountPicker") + } else { + Log.i("[Contact Editor] Saving new contact") + saveContact() + } + }, + getString(R.string.yes) + ) + + dialog.show() + } } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ea178ddf8..fbe4a8bfd 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -791,4 +791,7 @@ Permission requise pour afficher les appels entrant non accordée Afficher Préfixe international inconnu + Vous êtes sur le point de créer un nouveau contact sans adresse SIP ni numéro de téléphone, il ne sera donc pas visible dans &appName;.\n\nVoulez-vous le créer quand même ? + Oui + Non \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b99e5e090..aa114b4da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,8 @@ %d days Share logs link using… + Yes + No Unexpected error… @@ -114,6 +116,7 @@ Store locally This contact can\'t be deleted More results are available, refine your search + You are about to create a new contact without a SIP URI nor a phone number, thus it won\'t be visible in &appName;.\n\nDo you want to create it anyway? Enter a number or an address