Fix duplicate key crash in contact search lists.

This commit is contained in:
Cody Henthorne
2026-05-24 13:29:41 -04:00
parent c1b3fb6d1b
commit 6a2ec01c52
2 changed files with 14 additions and 6 deletions
@@ -148,7 +148,7 @@ object ContactSearchModels {
): MappingEntryProvider<Any> {
return MappingEntryProviderBuilder<Any>().apply {
viewHolder<StoryModel>(
key = { model -> "StoryModel${model.story.recipient.id}" }
key = { model -> "StoryModel:${model.story.recipient.id}:${model.story.privacyMode}" }
) { ctx ->
LayoutFactory(
{ view -> StoryViewHolder(view, displayOptions.displayCheckBox, callbacks::onStoryClicked, storyContextMenuCallbacks, displayOptions.displayStoryRing) },
@@ -156,7 +156,7 @@ object ContactSearchModels {
).createViewHolder(FrameLayout(ctx))
}
entry<RecipientModel>(
key = { model -> model.knownRecipient.recipient.id }
key = { model -> "${model.knownRecipient.sectionKey}:${model.knownRecipient.recipient.id}" }
) { model ->
Column(modifier = Modifier.fillMaxWidth()) {
val letter = model.knownRecipient.headerLetter
@@ -193,7 +193,9 @@ object ContactSearchModels {
)
}
}
viewHolder<UnknownRecipientModel> { ctx ->
viewHolder<UnknownRecipientModel>(
key = { model -> "Unknown:${model.data.sectionKey}:${model.data.mode}:${model.data.query}" }
) { ctx ->
LayoutFactory(
{ view -> UnknownRecipientViewHolder(view, callbacks::onUnknownRecipientClicked, displayOptions.displayCheckBox) },
R.layout.contact_search_unknown_item
@@ -105,19 +105,25 @@ object ConversationListSearchModels {
requestManager: RequestManager
): MappingEntryProvider<Any> {
return MappingEntryProviderBuilder<Any>().apply {
viewHolder<ThreadModel> { ctx ->
viewHolder<ThreadModel>(
key = { model -> "Thread:${model.thread.contactSearchKey}" }
) { ctx ->
LayoutFactory(
{ view -> ThreadViewHolder(onThreadClicked, onThreadLongClicked, lifecycleOwner, requestManager, view) },
R.layout.conversation_list_item_view
).createViewHolder(FrameLayout(ctx))
}
viewHolder<MessageModel> { ctx ->
viewHolder<MessageModel>(
key = { model -> "Message:${model.message.contactSearchKey}" }
) { ctx ->
LayoutFactory(
{ view -> MessageViewHolder(onMessageClicked, lifecycleOwner, requestManager, view) },
R.layout.conversation_list_item_view
).createViewHolder(FrameLayout(ctx))
}
viewHolder<GroupWithMembersModel> { ctx ->
viewHolder<GroupWithMembersModel>(
key = { model -> "GroupWithMembers:${model.groupWithMembers.contactSearchKey}" }
) { ctx ->
LayoutFactory(
{ view -> GroupWithMembersViewHolder(onGroupWithMembersClicked, lifecycleOwner, requestManager, view) },
R.layout.conversation_list_item_view