fix #103, make sure private contact names are shown at group conversations

This commit is contained in:
tibbi 2020-12-06 16:36:31 +01:00
parent 8b17b8a13e
commit 75fb84f9d4
2 changed files with 16 additions and 18 deletions

View File

@ -185,20 +185,8 @@ class MainActivity : SimpleActivity() {
private fun getNewConversations(cachedConversations: ArrayList<Conversation>) { private fun getNewConversations(cachedConversations: ArrayList<Conversation>) {
val privateCursor = getMyContactsCursor().loadInBackground() val privateCursor = getMyContactsCursor().loadInBackground()
ensureBackgroundThread { ensureBackgroundThread {
val conversations = getConversations()
// check if no message came from a privately stored contact in Simple Contacts
val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
if (privateContacts.isNotEmpty()) { val conversations = getConversations(privateContacts = privateContacts)
conversations.filter { it.title == it.phoneNumber }.forEach { conversation ->
privateContacts.forEach { contact ->
if (contact.doesContainPhoneNumber(conversation.phoneNumber)) {
conversation.title = contact.name
conversation.photoUri = contact.photoUri
}
}
}
}
runOnUiThread { runOnUiThread {
setupConversations(conversations) setupConversations(conversations)

View File

@ -185,7 +185,7 @@ fun Context.getMMSSender(msgId: Int): String {
return "" return ""
} }
fun Context.getConversations(threadId: Long? = null): ArrayList<Conversation> { fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<SimpleContact> = ArrayList()): ArrayList<Conversation> {
val uri = Uri.parse("${Threads.CONTENT_URI}?simple=true") val uri = Uri.parse("${Threads.CONTENT_URI}?simple=true")
val projection = arrayOf( val projection = arrayOf(
Threads._ID, Threads._ID,
@ -226,7 +226,7 @@ fun Context.getConversations(threadId: Long? = null): ArrayList<Conversation> {
return@queryCursor return@queryCursor
} }
val names = getThreadContactNames(phoneNumbers) val names = getThreadContactNames(phoneNumbers, privateContacts)
val title = TextUtils.join(", ", names.toTypedArray()) val title = TextUtils.join(", ", names.toTypedArray())
val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else "" val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else ""
val isGroupConversation = phoneNumbers.size > 1 val isGroupConversation = phoneNumbers.size > 1
@ -356,10 +356,20 @@ fun Context.getThreadPhoneNumbers(recipientIds: List<Int>): ArrayList<String> {
return numbers return numbers
} }
fun Context.getThreadContactNames(phoneNumbers: List<String>): ArrayList<String> { fun Context.getThreadContactNames(phoneNumbers: List<String>, privateContacts: ArrayList<SimpleContact>): ArrayList<String> {
val names = ArrayList<String>() val names = ArrayList<String>()
phoneNumbers.forEach { phoneNumbers.forEach { number ->
names.add(SimpleContactsHelper(this).getNameFromPhoneNumber(it)) val name = SimpleContactsHelper(this).getNameFromPhoneNumber(number)
if (name != number) {
names.add(name)
} else {
val privateContact = privateContacts.firstOrNull { it.doesContainPhoneNumber(number) }
if (privateContact == null) {
names.add(name)
} else {
names.add(privateContact.name)
}
}
} }
return names return names
} }