Merge pull request #604 from Naveen3Singh/rename_conv_fix

Avoid resetting conversation name when new messages are received
This commit is contained in:
Tibor Kaputa
2023-03-03 12:33:15 +01:00
committed by GitHub
6 changed files with 41 additions and 13 deletions

View File

@ -34,7 +34,12 @@ class ConversationDetailsActivity : SimpleActivity() {
threadId = intent.getLongExtra(THREAD_ID, 0L) threadId = intent.getLongExtra(THREAD_ID, 0L)
ensureBackgroundThread { ensureBackgroundThread {
conversation = conversationsDB.getConversationWithThreadId(threadId) conversation = conversationsDB.getConversationWithThreadId(threadId)
participants = getThreadParticipants(threadId, null) participants = if (conversation != null && conversation!!.isScheduled) {
val message = messagesDB.getThreadMessages(conversation!!.threadId).firstOrNull()
message?.participants ?: arrayListOf()
} else {
getThreadParticipants(threadId, null)
}
runOnUiThread { runOnUiThread {
setupTextViews() setupTextViews()
setupParticipants() setupParticipants()

View File

@ -298,6 +298,7 @@ class MainActivity : SimpleActivity() {
.forEach { message -> .forEach { message ->
messagesDB.insertOrUpdate(message.copy(threadId = newConversation.threadId)) messagesDB.insertOrUpdate(message.copy(threadId = newConversation.threadId))
} }
insertOrUpdateConversation(newConversation, cachedConversation)
} }
} }
@ -307,10 +308,8 @@ class MainActivity : SimpleActivity() {
} }
if (conv != null) { if (conv != null) {
val lastModified = maxOf(cachedConv.date, conv.date) val lastModified = maxOf(cachedConv.date, conv.date)
val usesCustomTitle = cachedConv.usesCustomTitle val conversation = conv.copy(date = lastModified)
val title = if (usesCustomTitle) cachedConv.title else conv.title insertOrUpdateConversation(conversation)
val conversation = conv.copy(date = lastModified, title = title, usesCustomTitle = usesCustomTitle)
conversationsDB.insertOrUpdate(conversation)
} }
} }

View File

@ -494,7 +494,7 @@ class ThreadActivity : SimpleActivity() {
if (messages.isNotEmpty() && messages.all { it.isScheduled }) { if (messages.isNotEmpty() && messages.all { it.isScheduled }) {
val scheduledMessage = messages.last() val scheduledMessage = messages.last()
val fakeThreadId = generateRandomId() val fakeThreadId = generateRandomId()
createTemporaryThread(scheduledMessage, fakeThreadId) createTemporaryThread(scheduledMessage, fakeThreadId, conversation)
updateScheduledMessagesThreadId(messages, fakeThreadId) updateScheduledMessagesThreadId(messages, fakeThreadId)
threadId = fakeThreadId threadId = fakeThreadId
} }
@ -1198,7 +1198,7 @@ class ThreadActivity : SimpleActivity() {
if (messages.isEmpty()) { if (messages.isEmpty()) {
// create a temporary thread until a real message is sent // create a temporary thread until a real message is sent
threadId = message.threadId threadId = message.threadId
createTemporaryThread(message, message.threadId) createTemporaryThread(message, message.threadId, conversation)
} }
val conversation = conversationsDB.getConversationWithThreadId(threadId) val conversation = conversationsDB.getConversationWithThreadId(threadId)
if (conversation != null) { if (conversation != null) {

View File

@ -824,7 +824,7 @@ fun Context.updateLastConversationMessage(threadId: Long) {
try { try {
contentResolver.delete(uri, selection, selectionArgs) contentResolver.delete(uri, selection, selectionArgs)
val newConversation = getConversations(threadId)[0] val newConversation = getConversations(threadId)[0]
conversationsDB.insertOrUpdate(newConversation) insertOrUpdateConversation(newConversation)
} catch (e: Exception) { } catch (e: Exception) {
} }
} }
@ -878,6 +878,24 @@ fun Context.subscriptionManagerCompat(): SubscriptionManager {
return getSystemService(SubscriptionManager::class.java) return getSystemService(SubscriptionManager::class.java)
} }
fun Context.insertOrUpdateConversation(
conversation: Conversation,
cachedConv: Conversation? = conversationsDB.getConversationWithThreadId(conversation.threadId)
) {
val updatedConv = if (cachedConv != null) {
val usesCustomTitle = cachedConv.usesCustomTitle
val title = if (usesCustomTitle) {
cachedConv.title
} else {
conversation.title
}
conversation.copy(title = title, usesCustomTitle = usesCustomTitle)
} else {
conversation
}
conversationsDB.insertOrUpdate(updatedConv)
}
fun Context.renameConversation(conversation: Conversation, newTitle: String): Conversation { fun Context.renameConversation(conversation: Conversation, newTitle: String): Conversation {
val updatedConv = conversation.copy(title = newTitle, usesCustomTitle = true) val updatedConv = conversation.copy(title = newTitle, usesCustomTitle = true)
try { try {
@ -888,21 +906,27 @@ fun Context.renameConversation(conversation: Conversation, newTitle: String): Co
return updatedConv return updatedConv
} }
fun Context.createTemporaryThread(message: Message, threadId: Long = generateRandomId()) { fun Context.createTemporaryThread(message: Message, threadId: Long = generateRandomId(), cachedConv: Conversation?) {
val simpleContactHelper = SimpleContactsHelper(this) val simpleContactHelper = SimpleContactsHelper(this)
val addresses = message.participants.getAddresses() val addresses = message.participants.getAddresses()
val photoUri = if (addresses.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(addresses.first()) else "" val photoUri = if (addresses.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(addresses.first()) else ""
val title = if (cachedConv != null && cachedConv.usesCustomTitle) {
cachedConv.title
} else {
message.participants.getThreadTitle()
}
val conversation = Conversation( val conversation = Conversation(
threadId = threadId, threadId = threadId,
snippet = message.body, snippet = message.body,
date = message.date, date = message.date,
read = true, read = true,
title = message.participants.getThreadTitle(), title = title,
photoUri = photoUri, photoUri = photoUri,
isGroupConversation = addresses.size > 1, isGroupConversation = addresses.size > 1,
phoneNumber = addresses.first(), phoneNumber = addresses.first(),
isScheduled = true isScheduled = true,
usesCustomTitle = cachedConv?.usesCustomTitle == true
) )
try { try {
conversationsDB.insertOrUpdate(conversation) conversationsDB.insertOrUpdate(conversation)

View File

@ -41,7 +41,7 @@ class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() {
context.showReceivedMessageNotification(address, mms.body, mms.threadId, glideBitmap) context.showReceivedMessageNotification(address, mms.body, mms.threadId, glideBitmap)
val conversation = context.getConversations(mms.threadId).firstOrNull() ?: return@post val conversation = context.getConversations(mms.threadId).firstOrNull() ?: return@post
ensureBackgroundThread { ensureBackgroundThread {
context.conversationsDB.insertOrUpdate(conversation) context.insertOrUpdateConversation(conversation)
context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations())
refreshMessages() refreshMessages()
} }

View File

@ -67,7 +67,7 @@ class SmsReceiver : BroadcastReceiver() {
val conversation = context.getConversations(threadId).firstOrNull() ?: return@ensureBackgroundThread val conversation = context.getConversations(threadId).firstOrNull() ?: return@ensureBackgroundThread
try { try {
context.conversationsDB.insertOrUpdate(conversation) context.insertOrUpdateConversation(conversation)
} catch (ignored: Exception) { } catch (ignored: Exception) {
} }