C
return contextResolver.query(
ContactsContract.Contacts.
CONTENT_URI,
arrayOf(
ContactsContract.Contacts.
_ID,
ContactsContract.Contacts.
DISPLAY_NAME,
ContactsContract.Contacts.
PHOTO_THUMBNAIL_URI),
WHERE,
query.
asQueryArgs(),
ContactsContract.Contacts.
DISPLAY_NAME)?.
use { cursor
->val result =
mutableListOf<Client>()
var count = 0
while (cursor.moveToNext()) {
val id = cursor.getString(0) // use id from contact book to prevent blinking
result.add(
Client(
id = id,
name = cursor.getString(1),
email = contextResolver.
extractEmail(id) ?: "",
fromContactBook = true,
updatedAt = 0
)
)
count += 1
if (count >= limit) {
break
}
}
result
}…
private fun ContentResolver.extractEmail(id: String): String? {
return query(
ContactsContract.CommonDataKinds.Email.
CONTENT_URI,
arrayOf(
ContactsContract.CommonDataKinds.Email.
ADDRESS),
ContactsContract.CommonDataKinds.Email.
CONTACT_ID + " = ?",
arrayOf(id),
ContactsContract.CommonDataKinds.Email.
ADDRESS)?.
use {when (
it.moveToFirst()) {
true ->
it.getString(0)
false -> null
}
}}