From 97299a090095e708377c2f451ef571bcb97db1ab Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 6 Apr 2020 22:06:58 +0200 Subject: [PATCH] make getAvailableContacts asynchronous --- .../activities/NewMessageActivity.kt | 18 +++---- .../smsmessenger/extensions/Context.kt | 47 ++++++++++--------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt index 70c250ad..00758fce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt @@ -1,19 +1,15 @@ package com.simplemobiletools.smsmessenger.activities import android.content.Intent -import android.database.Cursor import android.os.Bundle -import android.provider.ContactsContract -import android.provider.ContactsContract.CommonDataKinds -import android.text.TextUtils import android.view.WindowManager -import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.extensions.hideKeyboard +import com.simplemobiletools.commons.extensions.onTextChangeListener +import com.simplemobiletools.commons.extensions.updateTextColors import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.ContactsAdapter import com.simplemobiletools.smsmessenger.extensions.getAvailableContacts -import com.simplemobiletools.smsmessenger.extensions.getContactNames -import com.simplemobiletools.smsmessenger.extensions.getContactPhoneNumbers import com.simplemobiletools.smsmessenger.extensions.getThreadId import com.simplemobiletools.smsmessenger.helpers.THREAD_ID import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME @@ -40,8 +36,12 @@ class NewMessageActivity : SimpleActivity() { } private fun initContacts() { - allContacts = getAvailableContacts() - setupAdapter(allContacts) + getAvailableContacts { + allContacts = it + runOnUiThread { + setupAdapter(allContacts) + } + } new_message_to.onTextChangeListener { val searchString = it diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index bf68bea8..2c6131df 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -10,6 +10,7 @@ import android.provider.Telephony import android.text.TextUtils import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.isMarshmallowPlus import com.simplemobiletools.smsmessenger.helpers.Config import com.simplemobiletools.smsmessenger.models.Contact @@ -179,32 +180,34 @@ fun Context.getPersonsName(id: Int): String? { return null } -fun Context.getAvailableContacts(): ArrayList { - val names = getContactNames() - var allContacts = getContactPhoneNumbers() - allContacts.forEach { - val contactId = it.id - val contact = names.firstOrNull { it.id == contactId } - val name = contact?.name - if (name != null) { - it.name = name +fun Context.getAvailableContacts(callback: (ArrayList) -> Unit) { + ensureBackgroundThread { + val names = getContactNames() + var allContacts = getContactPhoneNumbers() + allContacts.forEach { + val contactId = it.id + val contact = names.firstOrNull { it.id == contactId } + val name = contact?.name + if (name != null) { + it.name = name + } + + val photoUri = contact?.photoUri + if (photoUri != null) { + it.photoUri = photoUri + } + + it.isOrganization = contact?.isOrganization ?: false } - val photoUri = contact?.photoUri - if (photoUri != null) { - it.photoUri = photoUri - } + allContacts = allContacts.filter { it.name.isNotEmpty() }.distinctBy { + val startIndex = Math.max(0, it.phoneNumber.length - 9) + it.phoneNumber.substring(startIndex) + }.toMutableList() as ArrayList - it.isOrganization = contact?.isOrganization ?: false + allContacts.sortBy { it.name.normalizeString().toLowerCase() } + callback(allContacts) } - - allContacts = allContacts.filter { it.name.isNotEmpty() }.distinctBy { - val startIndex = Math.max(0, it.phoneNumber.length - 9) - it.phoneNumber.substring(startIndex) - }.toMutableList() as ArrayList - - allContacts.sortBy { it.name.normalizeString().toLowerCase() } - return allContacts } fun Context.getNameFromPhoneNumber(number: String): Int? {