mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
make getAvailableContacts asynchronous
This commit is contained in:
@@ -1,19 +1,15 @@
|
|||||||
package com.simplemobiletools.smsmessenger.activities
|
package com.simplemobiletools.smsmessenger.activities
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.database.Cursor
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.ContactsContract
|
|
||||||
import android.provider.ContactsContract.CommonDataKinds
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.view.WindowManager
|
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.commons.helpers.PERMISSION_READ_CONTACTS
|
||||||
import com.simplemobiletools.smsmessenger.R
|
import com.simplemobiletools.smsmessenger.R
|
||||||
import com.simplemobiletools.smsmessenger.adapters.ContactsAdapter
|
import com.simplemobiletools.smsmessenger.adapters.ContactsAdapter
|
||||||
import com.simplemobiletools.smsmessenger.extensions.getAvailableContacts
|
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.extensions.getThreadId
|
||||||
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
|
||||||
import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME
|
||||||
@@ -40,8 +36,12 @@ class NewMessageActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initContacts() {
|
private fun initContacts() {
|
||||||
allContacts = getAvailableContacts()
|
getAvailableContacts {
|
||||||
setupAdapter(allContacts)
|
allContacts = it
|
||||||
|
runOnUiThread {
|
||||||
|
setupAdapter(allContacts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
new_message_to.onTextChangeListener {
|
new_message_to.onTextChangeListener {
|
||||||
val searchString = it
|
val searchString = it
|
||||||
|
@@ -10,6 +10,7 @@ import android.provider.Telephony
|
|||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.commons.helpers.isMarshmallowPlus
|
import com.simplemobiletools.commons.helpers.isMarshmallowPlus
|
||||||
import com.simplemobiletools.smsmessenger.helpers.Config
|
import com.simplemobiletools.smsmessenger.helpers.Config
|
||||||
import com.simplemobiletools.smsmessenger.models.Contact
|
import com.simplemobiletools.smsmessenger.models.Contact
|
||||||
@@ -179,32 +180,34 @@ fun Context.getPersonsName(id: Int): String? {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getAvailableContacts(): ArrayList<Contact> {
|
fun Context.getAvailableContacts(callback: (ArrayList<Contact>) -> Unit) {
|
||||||
val names = getContactNames()
|
ensureBackgroundThread {
|
||||||
var allContacts = getContactPhoneNumbers()
|
val names = getContactNames()
|
||||||
allContacts.forEach {
|
var allContacts = getContactPhoneNumbers()
|
||||||
val contactId = it.id
|
allContacts.forEach {
|
||||||
val contact = names.firstOrNull { it.id == contactId }
|
val contactId = it.id
|
||||||
val name = contact?.name
|
val contact = names.firstOrNull { it.id == contactId }
|
||||||
if (name != null) {
|
val name = contact?.name
|
||||||
it.name = 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
|
allContacts = allContacts.filter { it.name.isNotEmpty() }.distinctBy {
|
||||||
if (photoUri != null) {
|
val startIndex = Math.max(0, it.phoneNumber.length - 9)
|
||||||
it.photoUri = photoUri
|
it.phoneNumber.substring(startIndex)
|
||||||
}
|
}.toMutableList() as ArrayList<Contact>
|
||||||
|
|
||||||
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<Contact>
|
|
||||||
|
|
||||||
allContacts.sortBy { it.name.normalizeString().toLowerCase() }
|
|
||||||
return allContacts
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getNameFromPhoneNumber(number: String): Int? {
|
fun Context.getNameFromPhoneNumber(number: String): Int? {
|
||||||
|
Reference in New Issue
Block a user