Using new MagicSearch API

This commit is contained in:
Sylvain Berfini 2022-02-25 17:23:18 +01:00
parent c5dfda1688
commit 09263382e1
7 changed files with 44 additions and 8 deletions

View file

@ -24,7 +24,6 @@ import android.animation.ValueAnimator
import android.annotation.TargetApi
import android.app.Dialog
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Bundle
import android.os.SystemClock

View file

@ -257,13 +257,13 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
listViewModel.sipContactsSelected.observe(
viewLifecycleOwner
) {
listViewModel.updateContactsList()
listViewModel.updateContactsList(true)
}
listViewModel.filter.observe(
viewLifecycleOwner
) {
listViewModel.updateContactsList()
listViewModel.updateContactsList(false)
}
binding.setNewContactClickListener {

View file

@ -30,6 +30,7 @@ import org.linphone.contact.ContactsUpdatedListenerStub
import org.linphone.contact.NativeContact
import org.linphone.core.MagicSearch
import org.linphone.core.MagicSearchListenerStub
import org.linphone.core.MagicSearchSource
import org.linphone.core.SearchResult
import org.linphone.core.tools.Log
@ -46,7 +47,7 @@ class ContactsListViewModel : ViewModel() {
private val contactsUpdatedListener = object : ContactsUpdatedListenerStub() {
override fun onContactsUpdated() {
Log.i("[Contacts] Contacts have changed")
updateContactsList()
updateContactsList(true)
}
}
@ -73,18 +74,26 @@ class ContactsListViewModel : ViewModel() {
super.onCleared()
}
fun updateContactsList() {
fun updateContactsList(clearCache: Boolean) {
val filterValue = filter.value.orEmpty()
contactsList.value.orEmpty().forEach(ContactViewModel::destroy)
if (previousFilter.isNotEmpty() && previousFilter.length > filterValue.length) {
if (clearCache || (
previousFilter.isNotEmpty() && (
previousFilter.length > filterValue.length ||
(previousFilter.length == filterValue.length && previousFilter != filterValue)
)
)
) {
coreContext.contactsManager.magicSearch.resetSearchCache()
}
previousFilter = filterValue
val domain = if (sipContactsSelected.value == true) coreContext.core.defaultAccount?.params?.domain ?: "" else ""
fetchInProgress.value = true
coreContext.contactsManager.magicSearch.getContactListFromFilterAsync(filterValue, domain)
val domain = if (sipContactsSelected.value == true) coreContext.core.defaultAccount?.params?.domain ?: "" else ""
val filter = MagicSearchSource.Friends.toInt() or MagicSearchSource.LdapServers.toInt()
coreContext.contactsManager.magicSearch.getContactsAsync(filterValue, domain, filter)
}
private fun processMagicSearchResults(results: Array<SearchResult>) {

View file

@ -178,6 +178,20 @@ class LdapSettingsViewModel(private val ldap: Ldap, val index: String) : Generic
}
val ldapSearchTimeout = MutableLiveData<Int>()
val ldapRequestDelayListener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
try {
val intValue = newValue.toInt()
val params = ldap.params.clone()
params.delay = intValue
ldap.params = params
} catch (nfe: NumberFormatException) {
Log.e("[LDAP Settings] Failed to set request delay ($newValue): $nfe")
}
}
}
val ldapRequestDelay = MutableLiveData<Int>()
val ldapNameAttributeListener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
val params = ldap.params.clone()
@ -226,6 +240,7 @@ class LdapSettingsViewModel(private val ldap: Ldap, val index: String) : Generic
ldapSearchFilter.value = params.filter
ldapSearchMaxResults.value = params.maxResults
ldapSearchTimeout.value = params.timeout
ldapRequestDelay.value = params.delay
ldapNameAttribute.value = params.nameAttribute
ldapSipAttribute.value = params.sipAttribute
ldapSipDomain.value = params.sipDomain

View file

@ -169,6 +169,14 @@
linphone:defaultValue="@{viewModel.ldapSearchTimeout.toString()}"
linphone:inputType="@{InputType.TYPE_CLASS_NUMBER}"/>
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/contacts_settings_ldap_request_delay_title}"
linphone:subtitle="@{@string/contacts_settings_ldap_request_delay_subtitle}"
linphone:listener="@{viewModel.ldapRequestDelayListener}"
linphone:defaultValue="@{viewModel.ldapRequestDelay.toString()}"
linphone:inputType="@{InputType.TYPE_CLASS_NUMBER}"/>
<TextView
style="@style/settings_category_font"
android:text="@string/contacts_settings_ldap_parsing_title"

View file

@ -624,6 +624,7 @@
<string name="about_weblate_translation">Contribuer aux traductions</string>
<string name="assistant_generic_account_warning">Certaines fonctionnalités avancées comme les messages de groupe ou les messages éphémères nécessitent un compte &appName;.\n\nElles seront masquées dans l\'application si vous configurez un compte SIP tiers.\n\nSi vous souhaitez les activer pour un projet professionnel, contactez-nous.</string>
<string name="assistant_generic_account_warning_continue_button_text">J\'ai compris</string>
<string name="contacts_settings_create_new_ldap_config_title">Nouvelle configuration LDAP</string>
<string name="contacts_settings_ldap_title">LDAP</string>
<string name="contacts_settings_ldap_enable_title">Activer</string>
<string name="contacts_settings_ldap_delete_title">Supprimer</string>
@ -646,6 +647,8 @@
<string name="contacts_settings_ldap_search_max_results_title">Résultats maximum</string>
<string name="contacts_settings_ldap_search_timeout_title">Durée max</string>
<string name="contacts_settings_ldap_search_timeout_subtitle">En secondes</string>
<string name="contacts_settings_ldap_request_delay_title">Délai entre 2 requêtes</string>
<string name="contacts_settings_ldap_request_delay_subtitle">En millisecondes</string>
<string name="contacts_settings_ldap_parsing_title">Analyse</string>
<string name="contacts_settings_ldap_name_attribute_title">Attributs de nom</string>
<string name="contacts_settings_ldap_sip_attribute_title">Attributs SIP</string>

View file

@ -509,6 +509,8 @@
<string name="contacts_settings_ldap_search_max_results_title">Max results</string>
<string name="contacts_settings_ldap_search_timeout_title">Timeout</string>
<string name="contacts_settings_ldap_search_timeout_subtitle">In seconds</string>
<string name="contacts_settings_ldap_request_delay_title">Delay between two requests</string>
<string name="contacts_settings_ldap_request_delay_subtitle">In milliseconds</string>
<string name="contacts_settings_ldap_parsing_title">Parsing</string>
<string name="contacts_settings_ldap_name_attribute_title">Name attributes</string>
<string name="contacts_settings_ldap_sip_attribute_title">SIP attributes</string>