From 75fb84f9d4258fcb966f7e6390d18c95b2dd9972 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 6 Dec 2020 16:36:31 +0100 Subject: [PATCH] fix #103, make sure private contact names are shown at group conversations --- .../smsmessenger/activities/MainActivity.kt | 14 +------------ .../smsmessenger/extensions/Context.kt | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 3e57dd0e..fa266e34 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -185,20 +185,8 @@ class MainActivity : SimpleActivity() { private fun getNewConversations(cachedConversations: ArrayList) { val privateCursor = getMyContactsCursor().loadInBackground() ensureBackgroundThread { - val conversations = getConversations() - - // check if no message came from a privately stored contact in Simple Contacts val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) - if (privateContacts.isNotEmpty()) { - conversations.filter { it.title == it.phoneNumber }.forEach { conversation -> - privateContacts.forEach { contact -> - if (contact.doesContainPhoneNumber(conversation.phoneNumber)) { - conversation.title = contact.name - conversation.photoUri = contact.photoUri - } - } - } - } + val conversations = getConversations(privateContacts = privateContacts) runOnUiThread { setupConversations(conversations) 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 5eba91ed..b49943a1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -185,7 +185,7 @@ fun Context.getMMSSender(msgId: Int): String { return "" } -fun Context.getConversations(threadId: Long? = null): ArrayList { +fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList = ArrayList()): ArrayList { val uri = Uri.parse("${Threads.CONTENT_URI}?simple=true") val projection = arrayOf( Threads._ID, @@ -226,7 +226,7 @@ fun Context.getConversations(threadId: Long? = null): ArrayList { return@queryCursor } - val names = getThreadContactNames(phoneNumbers) + val names = getThreadContactNames(phoneNumbers, privateContacts) val title = TextUtils.join(", ", names.toTypedArray()) val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else "" val isGroupConversation = phoneNumbers.size > 1 @@ -356,10 +356,20 @@ fun Context.getThreadPhoneNumbers(recipientIds: List): ArrayList { return numbers } -fun Context.getThreadContactNames(phoneNumbers: List): ArrayList { +fun Context.getThreadContactNames(phoneNumbers: List, privateContacts: ArrayList): ArrayList { val names = ArrayList() - phoneNumbers.forEach { - names.add(SimpleContactsHelper(this).getNameFromPhoneNumber(it)) + phoneNumbers.forEach { number -> + 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 }