From 0db1754603c0310e3feb746a6f646610d0910015 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 5 Apr 2024 16:47:45 +0200 Subject: [PATCH] Change contacts list filter function depending on whether the default account is a Linphone account in secure mode or something else --- .../contacts/fragment/ContactsListFragment.kt | 21 +++++++++- .../viewmodel/ContactsListViewModel.kt | 41 ++++++++++++++----- .../contacts_list_filter_popup_menu.xml | 28 ++++++++++++- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 78 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt index 9c3d28a9f..4e5188f0b 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt @@ -283,6 +283,7 @@ class ContactsListFragment : AbstractTopBarFragment() { false ) popupView.seeAllSelected = listViewModel.areAllContactsDisplayed() + popupView.showLinphoneFilter = listViewModel.isDefaultAccountLinphone.value == true val popupWindow = PopupWindow( popupView.root, @@ -293,14 +294,30 @@ class ContactsListFragment : AbstractTopBarFragment() { popupView.setNoFilterClickListener { if (!listViewModel.areAllContactsDisplayed()) { - listViewModel.changeContactsFilter(onlyLinphoneContacts = false) + listViewModel.changeContactsFilter( + onlyLinphoneContacts = false, + onlySipContacts = false + ) } popupWindow.dismiss() } popupView.setLinphoneOnlyClickListener { if (listViewModel.areAllContactsDisplayed()) { - listViewModel.changeContactsFilter(onlyLinphoneContacts = true) + listViewModel.changeContactsFilter( + onlyLinphoneContacts = true, + onlySipContacts = false + ) + } + popupWindow.dismiss() + } + + popupView.setSipOnlyClickListener { + if (listViewModel.areAllContactsDisplayed()) { + listViewModel.changeContactsFilter( + onlyLinphoneContacts = false, + onlySipContacts = true + ) } popupWindow.dismiss() } 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 8e465c999..bb56380b7 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 @@ -57,12 +57,14 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() val isListFiltered = MutableLiveData() + val isDefaultAccountLinphone = MutableLiveData() + val vCardTerminatedEvent: MutableLiveData>> by lazy { MutableLiveData>>() } private var previousFilter = "NotSet" - private var limitSearchToLinphoneAccounts = true + private var domainFilter = "" private lateinit var magicSearch: MagicSearch @@ -84,7 +86,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() applyFilter( currentFilter, - if (limitSearchToLinphoneAccounts) corePreferences.defaultDomain else "" + domainFilter ) } } @@ -93,8 +95,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() showFavourites.value = true coreContext.postOnCoreThread { core -> - val defaultAccount = core.defaultAccount - limitSearchToLinphoneAccounts = defaultAccount?.isInSecureMode() ?: false + updateDomainFilter() coreContext.contactsManager.addListener(contactsListener) magicSearch = core.createMagicSearch() @@ -120,29 +121,34 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() coreContext.postOnCoreThread { applyFilter( currentFilter, - if (limitSearchToLinphoneAccounts) corePreferences.defaultDomain else "" + domainFilter ) } } @UiThread fun applyCurrentDefaultAccountFilter() { - coreContext.postOnCoreThread { core -> - val defaultAccount = core.defaultAccount - limitSearchToLinphoneAccounts = defaultAccount?.isInSecureMode() ?: false + coreContext.postOnCoreThread { + updateDomainFilter() } applyFilter(currentFilter) } @UiThread - fun changeContactsFilter(onlyLinphoneContacts: Boolean) { - limitSearchToLinphoneAccounts = onlyLinphoneContacts + fun changeContactsFilter(onlyLinphoneContacts: Boolean, onlySipContacts: Boolean) { + domainFilter = if (onlyLinphoneContacts) { + corePreferences.defaultDomain + } else if (onlySipContacts) { + "*" + } else { + "" + } applyFilter(currentFilter) } fun areAllContactsDisplayed(): Boolean { - return !limitSearchToLinphoneAccounts + return domainFilter.isEmpty() } @UiThread @@ -150,6 +156,19 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() showFavourites.value = showFavourites.value == false } + @WorkerThread + private fun updateDomainFilter() { + val defaultAccount = coreContext.core.defaultAccount + isDefaultAccountLinphone.postValue( + defaultAccount?.isInSecureMode() == true && defaultAccount.params.domain == corePreferences.defaultDomain + ) + domainFilter = if (defaultAccount?.isInSecureMode() == true) { + corePreferences.defaultDomain + } else { + "*" + } + } + @UiThread fun exportContactAsVCard(friend: Friend) { coreContext.postOnCoreThread { diff --git a/app/src/main/res/layout/contacts_list_filter_popup_menu.xml b/app/src/main/res/layout/contacts_list_filter_popup_menu.xml index 35b47a7c2..50b1230ef 100644 --- a/app/src/main/res/layout/contacts_list_filter_popup_menu.xml +++ b/app/src/main/res/layout/contacts_list_filter_popup_menu.xml @@ -12,9 +12,15 @@ + + + + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4d97445fb..8f845afc9 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -312,6 +312,7 @@ Tous les contacts Voir tous les contacts Voir les contacts &appName; + Voir les contacts SIP Nouveau contact Modifier contact diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d96a62b76..b0de6217d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -359,6 +359,7 @@ All contacts See all See &appName; contacts + See SIP contacts New contact Edit contact