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 1d02e5bd1..80926d131 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 @@ -56,20 +56,25 @@ class ContactsListViewModel : ViewModel() { super.onCleared() } - fun updateContactsList() { - var list = arrayListOf() - list.addAll(if (sipContactsSelected.value == true) coreContext.contactsManager.sipContacts else coreContext.contactsManager.contacts) + private fun getContactsList(): ArrayList { + return if (sipContactsSelected.value == true) coreContext.contactsManager.sipContacts else coreContext.contactsManager.contacts + } - val filterValue = filter.value.orEmpty().toLowerCase(Locale.getDefault()) - if (filterValue.isNotEmpty()) { - list = list.filter { contact -> - contact.fullName?.toLowerCase(Locale.getDefault())?.contains(filterValue) ?: false + fun updateContactsList() { + val list: ArrayList + + val filterValue = filter.value.orEmpty() + list = if (filterValue.isNotEmpty()) { + getContactsList().filter { contact -> + contact.fullName?.contains(filterValue, true) ?: false } as ArrayList + } else { + getContactsList() } // Prevent blinking items when list hasn't changed if (list.isEmpty() || list.size != contactsList.value.orEmpty().size) { - contactsList.value = list + contactsList.postValue(list) } } diff --git a/app/src/main/java/org/linphone/contact/Contact.kt b/app/src/main/java/org/linphone/contact/Contact.kt index a4778f5e4..e917f2b66 100644 --- a/app/src/main/java/org/linphone/contact/Contact.kt +++ b/app/src/main/java/org/linphone/contact/Contact.kt @@ -24,7 +24,6 @@ import android.graphics.Bitmap import android.net.Uri import androidx.core.app.Person import androidx.core.graphics.drawable.IconCompat -import java.text.Collator import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.Address @@ -57,6 +56,7 @@ open class Contact : Comparable { override fun compareTo(other: Contact): Int { val fn = fullName ?: "" val otherFn = other.fullName ?: "" + if (fn == otherFn) { if (phoneNumbers.size == other.phoneNumbers.size && phoneNumbers.size > 0) { if (phoneNumbers != other.phoneNumbers) { @@ -84,9 +84,8 @@ open class Contact : Comparable { val otherOrg = other.organization ?: "" return org.compareTo(otherOrg) } - val collator = Collator.getInstance() - collator.strength = Collator.NO_DECOMPOSITION - return collator.compare(fn, otherFn) + + return coreContext.collator.compare(fn, otherFn) } @Synchronized diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 6bf079662..22b78b332 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -41,6 +41,7 @@ import java.math.BigInteger import java.nio.charset.StandardCharsets import java.security.KeyStore import java.security.MessageDigest +import java.text.Collator import java.util.* import javax.crypto.Cipher import javax.crypto.KeyGenerator @@ -84,6 +85,7 @@ class CoreContext(val context: Context, coreConfig: Config) { "$sdkVersion ($sdkBranch, $sdkBuildType)" } + val collator = Collator.getInstance() val contactsManager: ContactsManager by lazy { ContactsManager(context) } @@ -308,6 +310,7 @@ class CoreContext(val context: Context, coreConfig: Config) { telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) EmojiCompat.init(BundledEmojiCompatConfig(context)) + collator.strength = Collator.NO_DECOMPOSITION } fun stop() {