From d212b7b06e28b22fcf744da66c4d8f5bd9453b7d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 30 May 2025 10:09:56 +0200 Subject: [PATCH] Added setting to hide contacts without SIP address nor phone number --- .../java/org/linphone/core/CorePreferences.kt | 7 +++++ .../viewmodel/ContactsListViewModel.kt | 6 ++++ .../settings/viewmodel/SettingsViewModel.kt | 11 +++++++ app/src/main/res/layout/settings_contacts.xml | 29 ++++++++++++++++++- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index b91feaefd..5d5a8f002 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -224,6 +224,13 @@ class CorePreferences config.setBool("ui", "sort_contacts_by_first_name", value) } + @get:WorkerThread + var hideContactsWithoutPhoneNumberOrSipAddress: Boolean + get() = config.getBool("ui", "hide_contacts_without_phone_number_or_sip_address", false) + set(value) { + config.setBool("ui", "hide_contacts_without_phone_number_or_sip_address", value) + } + @get:WorkerThread @set:WorkerThread var contactsFilter: String get() = config.getString("ui", "contacts_filter", "")!! // Default value must be empty! diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt index 7d9eb8a49..2d223b35f 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt @@ -276,10 +276,16 @@ class ContactsListViewModel val favouritesList = arrayListOf() var count = 0 val collator = Collator.getInstance(Locale.getDefault()) + val hideEmptyContacts = corePreferences.hideContactsWithoutPhoneNumberOrSipAddress for (result in results) { val friend = result.friend if (friend != null) { + if (hideEmptyContacts && friend.addresses.isEmpty() && friend.phoneNumbers.isEmpty()) { + Log.i("$TAG Friend [${friend.name}] has no SIP address nor phone number, do not show it") + continue + } + if (friend.refKey.orEmpty().isEmpty()) { if (friend.vcard != null) { friend.vcard?.generateUniqueId() diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt index 0fc439ecf..b5166aa87 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt @@ -110,6 +110,7 @@ class SettingsViewModel AppUtils.getString(R.string.contact_editor_last_name), ) val sortContactsByValues = arrayListOf(0, 1) + val hideEmptyContacts = MutableLiveData() val ldapAvailable = MutableLiveData() val ldapServers = MutableLiveData>() @@ -339,6 +340,7 @@ class SettingsViewModel ) sortContactsBy.postValue(if (corePreferences.sortContactsByFirstName) 0 else 1) + hideEmptyContacts.postValue(corePreferences.hideContactsWithoutPhoneNumberOrSipAddress) defaultLayout.postValue(core.defaultConferenceLayout.toInt()) @@ -565,6 +567,15 @@ class SettingsViewModel } } + @UiThread + fun toggleHideEmptyContacts() { + val newValue = hideEmptyContacts.value == false + coreContext.postOnCoreThread { + corePreferences.hideContactsWithoutPhoneNumberOrSipAddress = newValue + hideEmptyContacts.postValue(newValue) + } + } + @UiThread fun addLdapServer() { addLdapServerEvent.value = Event(true) diff --git a/app/src/main/res/layout/settings_contacts.xml b/app/src/main/res/layout/settings_contacts.xml index 40d189ed4..01dd3e590 100644 --- a/app/src/main/res/layout/settings_contacts.xml +++ b/app/src/main/res/layout/settings_contacts.xml @@ -61,6 +61,33 @@ app:layout_constraintBottom_toBottomOf="@id/sort_contacts_by_first_name_spinner" app:layout_constraintEnd_toEndOf="@id/sort_contacts_by_first_name_spinner"/> + + + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b6adebfef..6e8c8a474 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -208,6 +208,7 @@ Marquer la conversation comme lue lorsqu\'une notification de message est supprimée Contacts Trier les contacts par + Masquer les contacts sans adresse SIP ni numéro de téléphone Ajouter un serveur LDAP Editer le serveur LDAP Ajouter un carnet d\'adresse CardDAV diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 464ab9020..c07db9256 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -248,6 +248,7 @@ Mark conversation as read when dismissing message notification Contacts Sort contacts by + Hide contacts without SIP address nor phone number Add LDAP server Edit LDAP server Add CardDAV address book