diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt index 7622c2ae..34d6bf31 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt @@ -10,6 +10,7 @@ import android.media.AudioManager import android.media.RingtoneManager import android.net.Uri import android.os.Bundle +import android.os.Handler import android.provider.ContactsContract.CommonDataKinds import android.provider.ContactsContract.CommonDataKinds.* import android.provider.MediaStore @@ -19,6 +20,7 @@ import android.view.ViewGroup import android.view.WindowManager import android.widget.* import androidx.core.content.ContextCompat +import androidx.core.widget.doAfterTextChanged import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog @@ -57,6 +59,8 @@ class EditContactActivity : ContactActivity() { private val CHOOSE_PHOTO = 2 private val REMOVE_PHOTO = 3 + private val AUTO_FILL_DELAY = 5000L + private var mLastSavePromptTS = 0L private var wasActivityInitialized = false private var lastPhotoIntentUri: Uri? = null @@ -1534,6 +1538,7 @@ class EditContactActivity : ContactActivity() { private fun setupAutofill(nameTextViews: List) { ContactsHelper(this).getContacts { contacts -> val adapter = AutoCompleteTextViewAdapter(this, contacts) + val handler = Handler(mainLooper) nameTextViews.forEach { view -> view.setAdapter(adapter) view.setOnItemClickListener { _, _, position, _ -> @@ -1549,6 +1554,12 @@ class EditContactActivity : ContactActivity() { contact_surname.setText(selectedContact.surname) } } + view.doAfterTextChanged { + handler.postDelayed({ + adapter.enableAutoFill = true + adapter.filter.filter(it) + }, AUTO_FILL_DELAY) + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/AutoCompleteTextViewAdapter.kt index 0374f651..5354e75b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -21,7 +21,7 @@ import kotlinx.android.synthetic.main.item_autocomplete_name_number.view.item_au import kotlinx.android.synthetic.main.item_autocomplete_name_number.view.item_autocomplete_name import kotlinx.android.synthetic.main.item_autocomplete_name_number.view.item_autocomplete_number -class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { +class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList, var enableAutoFill: Boolean = false) : ArrayAdapter(activity, 0, contacts) { var resultList = ArrayList() override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { @@ -67,20 +67,22 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar val filterResults = FilterResults() if (constraint != null) { resultList.clear() - val searchString = constraint.toString().normalizeString() - contacts.forEach { - if (it.name.contains(searchString, true)) { - resultList.add(it) + if (enableAutoFill) { + val searchString = constraint.toString().normalizeString() + contacts.forEach { + if (it.name.contains(searchString, true)) { + resultList.add(it) + } } + + resultList.sortWith(compareBy + { it.name.startsWith(searchString, true) }.thenBy + { it.name.contains(searchString, true) }) + resultList.reverse() + + filterResults.values = resultList + filterResults.count = resultList.size } - - resultList.sortWith(compareBy - { it.name.startsWith(searchString, true) }.thenBy - { it.name.contains(searchString, true) }) - resultList.reverse() - - filterResults.values = resultList - filterResults.count = resultList.size } return filterResults }