Add bulk version of updateLastConversationMessage()

In situations where we want to update multiple conversations (e.g.
during import), we can make it faster by only calling
contentResolver.delete() once.

(We still make separate calls to getConversations() because it doesn't
support multiple IDs, and likewise insertOrUpdateConversation()
doesn't support bulk insert.)
This commit is contained in:
Tom Levy 2024-04-05 10:57:32 +00:00
parent 0294ada284
commit bfd5450435

View file

@ -1114,7 +1114,11 @@ fun Context.deleteSmsDraft(threadId: Long) {
}
fun Context.updateLastConversationMessage(threadId: Long) {
// update the date and the snippet of the thread, by triggering the
updateLastConversationMessage(setOf(threadId))
}
fun Context.updateLastConversationMessage(threadIds: Iterable<Long>) {
// update the date and the snippet of the threads, by triggering the
// following Android code (which runs even if no messages are deleted):
// https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/android14-release/src/com/android/providers/telephony/MmsSmsProvider.java#1409
val uri = Threads.CONTENT_URI
@ -1122,8 +1126,10 @@ fun Context.updateLastConversationMessage(threadId: Long) {
"1 = 0" // always-false condition, because we don't actually want to delete any messages
try {
contentResolver.delete(uri, selection, null)
val newConversation = getConversations(threadId)[0]
insertOrUpdateConversation(newConversation)
for (threadId in threadIds) {
val newConversation = getConversations(threadId)[0]
insertOrUpdateConversation(newConversation)
}
} catch (e: Exception) {
}
}