fix #132, fix searching with UTF8 chars

This commit is contained in:
tibbi 2018-08-12 20:18:05 +02:00
parent 9ab6f9d7df
commit 0bcbf9bb94
5 changed files with 12 additions and 17 deletions

View File

@ -45,7 +45,7 @@ ext {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:4.6.5' implementation 'com.simplemobiletools:commons:4.6.6'
implementation 'joda-time:joda-time:2.9.9' implementation 'joda-time:joda-time:2.9.9'
implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support.constraint:constraint-layout:1.1.2'

View File

@ -1,6 +0,0 @@
package com.simplemobiletools.contacts.extensions
import com.simplemobiletools.contacts.helpers.normalizeRegex
import java.text.Normalizer
fun String.normalizeString() = Normalizer.normalize(this, Normalizer.Form.NFD).replace(normalizeRegex, "")

View File

@ -236,32 +236,35 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
} }
fun onSearchQueryChanged(text: String) { fun onSearchQueryChanged(text: String) {
val shouldNormalize = text.normalizeString() == text
(fragment_list.adapter as? ContactsAdapter)?.apply { (fragment_list.adapter as? ContactsAdapter)?.apply {
val filtered = contactsIgnoringSearch.filter { val filtered = contactsIgnoringSearch.filter {
it.getFullName().contains(text, true) || getProperText(it.getFullName(), shouldNormalize).contains(text, true) ||
it.phoneNumbers.any { it.value.contains(text, true) } || it.phoneNumbers.any { it.value.contains(text, true) } ||
it.emails.any { it.value.contains(text, true) } || it.emails.any { it.value.contains(text, true) } ||
it.addresses.any { it.value.contains(text, true) } || it.addresses.any { getProperText(it.value, shouldNormalize).contains(text, true) } ||
it.notes.contains(text, true) || getProperText(it.notes, shouldNormalize).contains(text, true) ||
it.organization.company.contains(text, true) || getProperText(it.organization.company, shouldNormalize).contains(text, true) ||
it.organization.jobPosition.contains(text, true) || getProperText(it.organization.jobPosition, shouldNormalize).contains(text, true) ||
it.websites.any { it.contains(text, true) } it.websites.any { it.contains(text, true) }
} as ArrayList } as ArrayList
Contact.sorting = config.sorting Contact.sorting = config.sorting
Contact.startWithSurname = config.startNameWithSurname Contact.startWithSurname = config.startNameWithSurname
filtered.sort() filtered.sort()
filtered.sortBy { !it.getFullName().startsWith(text, true) } filtered.sortBy { !getProperText(it.getFullName(), shouldNormalize).startsWith(text, true) }
if (filtered.isEmpty() && this@MyViewPagerFragment is FavoritesFragment) { if (filtered.isEmpty() && this@MyViewPagerFragment is FavoritesFragment) {
fragment_placeholder.text = activity.getString(R.string.no_items_found) fragment_placeholder.text = activity.getString(R.string.no_items_found)
} }
fragment_placeholder.beVisibleIf(filtered.isEmpty()) fragment_placeholder.beVisibleIf(filtered.isEmpty())
updateItems(filtered, text) updateItems(filtered, text.normalizeString())
} }
} }
private fun getProperText(text: String, shouldNormalize: Boolean) = if (shouldNormalize) text.normalizeString() else text
fun onSearchOpened() { fun onSearchOpened() {
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList() contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList()
} }

View File

@ -122,5 +122,3 @@ val localAccountTypes = arrayListOf("vnd.sec.contact.phone",
"com.android.huawei.phone", "com.android.huawei.phone",
"Local Phone Account" "Local Phone Account"
) )
val normalizeRegex = "\\p{InCombiningDiacriticalMarks}+".toRegex()

View File

@ -1,10 +1,10 @@
package com.simplemobiletools.contacts.models package com.simplemobiletools.contacts.models
import android.graphics.Bitmap import android.graphics.Bitmap
import com.simplemobiletools.commons.extensions.normalizeString
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
import com.simplemobiletools.commons.helpers.SORT_DESCENDING import com.simplemobiletools.commons.helpers.SORT_DESCENDING
import com.simplemobiletools.contacts.extensions.normalizeString
import com.simplemobiletools.contacts.helpers.PHONE_NUMBER_PATTERN import com.simplemobiletools.contacts.helpers.PHONE_NUMBER_PATTERN
data class Contact(val id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var photoUri: String, data class Contact(val id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var photoUri: String,