diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt index 4dca517a0e..ffd9c74e0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt @@ -310,13 +310,20 @@ class ConversationAdapterV2( if (multiselectPart.getMessageRecord().isInMemoryMessageRecord) { return } if (multiselectPart is MultiselectPart.CollapsedHead) { + val headId = multiselectPart.conversationMessage.messageRecord.collapsedHeadId + val totalChildCount = multiselectPart.conversationMessage.collapsedSize - 1 val collapsedChildren: List = mutableListOf().apply { add(getConversationMessage(adapterPosition)!!.multiselectCollection.asDouble().bottomPart) - addAll( - (1 until multiselectPart.conversationMessage.collapsedSize).mapNotNull { i -> - getConversationMessage(adapterPosition - i)?.multiselectCollection?.asSingle()?.singlePart + var currentChildCount = 0 + var offset = 1 + while (currentChildCount < totalChildCount && adapterPosition - offset >= 0) { + val child = getConversationMessage(adapterPosition - offset) + if (child != null && child.messageRecord.collapsedHeadId == headId) { + add(child.multiselectCollection.asSingle().singlePart) + currentChildCount++ } - ) + offset++ + } } val isSelecting = collapsedChildren.any { it !in _selected } 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 4053da53f3..de6d09ce87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -3625,8 +3625,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat private fun getMessageDirectlyBefore(messageId: Long, threadId: Long, dateReceived: Long): PotentialCollapsibleMessage? { return readableDatabase .select(DATE_RECEIVED, TYPE, COLLAPSED_HEAD_ID, MESSAGE_EXTRAS) - .from(TABLE_NAME) - .where("$ID < ? AND $THREAD_ID = ?", messageId, threadId) + .from("$TABLE_NAME INDEXED BY $INDEX_THREAD_STORY_SCHEDULED_DATE_LATEST_REVISION_ID") + .where("$THREAD_ID = ? AND $DATE_RECEIVED < ?", threadId, dateReceived) .orderBy("$DATE_RECEIVED DESC") .limit(1) .run()