From 16e59d8009e33373409eeabe06ab5603896e21e0 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 22 Feb 2022 11:43:10 +0100 Subject: [PATCH] Using async mode of magic search --- .../viewmodels/ContactsListViewModel.kt | 19 ++++++++++++++++++- .../res/layout/contact_master_fragment.xml | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt index 46a32f51c..855dc703b 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt @@ -28,6 +28,8 @@ import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.contact.Contact import org.linphone.contact.ContactsUpdatedListenerStub import org.linphone.contact.NativeContact +import org.linphone.core.MagicSearch +import org.linphone.core.MagicSearchListenerStub import org.linphone.core.SearchResult import org.linphone.core.tools.Log @@ -36,6 +38,8 @@ class ContactsListViewModel : ViewModel() { val contactsList = MutableLiveData>() + val fetchInProgress = MutableLiveData() + val filter = MutableLiveData() private var previousFilter = "NotSet" @@ -46,14 +50,24 @@ class ContactsListViewModel : ViewModel() { } } + private val magicSearchListener = object : MagicSearchListenerStub() { + override fun onSearchResultsReceived(magicSearch: MagicSearch) { + processMagicSearchResults(magicSearch.lastSearch) + fetchInProgress.value = false + } + } + init { sipContactsSelected.value = coreContext.contactsManager.shouldDisplaySipContactsList() + fetchInProgress.value = false coreContext.contactsManager.addListener(contactsUpdatedListener) + coreContext.contactsManager.magicSearch.addListener(magicSearchListener) } override fun onCleared() { contactsList.value.orEmpty().forEach(ContactViewModel::destroy) + coreContext.contactsManager.magicSearch.removeListener(magicSearchListener) coreContext.contactsManager.removeListener(contactsUpdatedListener) super.onCleared() @@ -69,8 +83,11 @@ class ContactsListViewModel : ViewModel() { previousFilter = filterValue val domain = if (sipContactsSelected.value == true) coreContext.core.defaultAccount?.params?.domain ?: "" else "" - val results = coreContext.contactsManager.magicSearch.getContactListFromFilter(filterValue, domain) + fetchInProgress.value = true + coreContext.contactsManager.magicSearch.getContactListFromFilterAsync(filterValue, domain) + } + private fun processMagicSearchResults(results: Array) { val list = arrayListOf() for (result in results) { val contact = searchMatchingContact(result) ?: Contact(searchResult = result) diff --git a/app/src/main/res/layout/contact_master_fragment.xml b/app/src/main/res/layout/contact_master_fragment.xml index 78990bf38..ada3c7640 100644 --- a/app/src/main/res/layout/contact_master_fragment.xml +++ b/app/src/main/res/layout/contact_master_fragment.xml @@ -175,6 +175,10 @@ android:text="@string/no_contact" android:visibility="@{!viewModel.sipContactsSelected && viewModel.contactsList.empty ? View.VISIBLE : View.GONE}" /> + +