From a54df29542588c352ee08bac39dff5e8ceb49ac7 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 28 Jul 2023 16:09:26 -0400 Subject: [PATCH] Protected against crash with unread counter that exceeds thread size. --- .../securesms/conversation/v2/ConversationItemDecorations.kt | 5 +++-- .../java/org/thoughtcrime/securesms/database/MessageTable.kt | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations.kt index 7c29afdf81..5c8db86ec4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations.kt @@ -109,10 +109,11 @@ class ConversationItemDecorations(hasWallpaper: Boolean = false, private val sch * which causes the unread divider to be removed. */ private fun updateUnreadState(items: List) { - val state = unreadState + val state: UnreadState = unreadState if (state is UnreadState.InitialUnreadState) { - val timestamp = (items[state.unreadCount - 1] as? ConversationMessageElement)?.timestamp() + val firstUnread = items[(state.unreadCount - 1).coerceIn(items.indices)] + val timestamp = (firstUnread as? ConversationMessageElement)?.timestamp() if (timestamp != null) { unreadState = UnreadState.CompleteUnreadState(unreadCount = state.unreadCount, firstUnreadTimestamp = timestamp) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 4f74b43ea8..f555cabf93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -3285,6 +3285,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } threadIds.forEach { + threads.updateReadState(it) threads.update( threadId = it, unarchive = false,