diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt index 3888c516a8d1d22f94ca8b5b5d4d61737ec6b988..afbfcbf6dad2a8c744bbca395b963e781b200c85 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt @@ -45,10 +45,7 @@ data class ContactItem( override val timestamp: Long, val avatar: ImageBitmap?, ) : ContactListItem { - - data class Id(val id: ContactId) : ContactListItemId - - override val wrapperId = Id(id) + override val uniqueId: ByteArray = ByteArray(4) { i -> (id.int shr (i * 8)).toByte() } override val displayName = getContactDisplayName(name, alias) constructor( @@ -56,7 +53,7 @@ data class ContactItem( authorInfo: AuthorInfo, isConnected: Boolean, groupCount: MessageTracker.GroupCount, - avatar: ImageBitmap? + avatar: ImageBitmap?, ) : this( id = contact.id, authorId = contact.author.id, @@ -96,7 +93,7 @@ fun loadContactItem( authorManager: AuthorManager, connectionRegistry: ConnectionRegistry, conversationManager: ConversationManager, - attachmentReader: AttachmentReader + attachmentReader: AttachmentReader, ): ContactItem { val authorInfo = authorManager.getAuthorInfo(txn, contact) return ContactItem( diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt index 61ecfb57f6234659881a1d8cfce989035ec14dfb..759db1864af83c247c9ac92e16cf68a17eede07e 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt @@ -157,7 +157,7 @@ fun ContactList( ) { items( items = contactList, - key = { item -> item.wrapperId }, + key = { item -> item.uniqueId }, contentType = { item -> item::class } ) { item -> ListItemView( diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt index 76a3a924115239f4f99224bb868a7f57bf28af10..e9aab94218c17718266a84d563d7595999c3d92e 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListItem.kt @@ -21,7 +21,5 @@ package org.briarproject.briar.desktop.contact interface ContactListItem { val displayName: String val timestamp: Long - val wrapperId: ContactListItemId + val uniqueId: ByteArray } - -interface ContactListItemId diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt index 78a1934d843c807825e2acd350bee9a7e787f445..85ef4586a7b0249305085d3bc415535bff24f793 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt @@ -81,7 +81,7 @@ constructor( private val _pendingContactList = mutableStateListOf<PendingContactItem>() private val _filterBy = mutableStateOf("") - private val _selectedContactId = mutableStateOf<ContactListItemId?>(null) + private val _selectedContactListItem = mutableStateOf<ContactListItem?>(null) private val _contactIdToBeRemoved = mutableStateOf<PendingContactId?>(null) // todo: check impact on performance due to reconstructing whole list on every change @@ -97,13 +97,13 @@ constructor( } val filterBy = _filterBy.asState() - val selectedContactId = derivedStateOf { + val selectedContactListItem = derivedStateOf { // reset selected contact to null if not part of list after filtering - val wrapperId = _selectedContactId.value - if (wrapperId == null || combinedContactList.value.find { it.wrapperId == wrapperId } != null) { - wrapperId + val item = _selectedContactListItem.value + if (item == null || combinedContactList.value.find { it.uniqueId.contentEquals(item.uniqueId) } != null) { + item } else { - _selectedContactId.value = null + _selectedContactListItem.value = null null } } @@ -123,10 +123,11 @@ constructor( } fun selectContact(contactItem: ContactListItem) { - _selectedContactId.value = contactItem.wrapperId + _selectedContactListItem.value = contactItem } - fun isSelected(contactItem: ContactListItem) = _selectedContactId.value == contactItem.wrapperId + fun isSelected(contactItem: ContactListItem) = + _selectedContactListItem.value?.uniqueId.contentEquals(contactItem.uniqueId) fun removePendingContact(contactItem: PendingContactItem) { if (contactItem.state == PendingContactState.FAILED) { diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt index 5f7965c6eed87410477c01a060e178b11c30b742..97015cb8968ae756f99732384c5b8046e9cee8b8 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/PendingContactItem.kt @@ -22,7 +22,6 @@ import org.briarproject.bramble.api.contact.PendingContact import org.briarproject.bramble.api.contact.PendingContactId import org.briarproject.bramble.api.contact.PendingContactState import org.briarproject.briar.desktop.contact.ContactListItem -import org.briarproject.briar.desktop.contact.ContactListItemId data class PendingContactItem( val id: PendingContactId, @@ -30,9 +29,8 @@ data class PendingContactItem( override val timestamp: Long, val state: PendingContactState, ) : ContactListItem { - data class Id(val id: PendingContactId) : ContactListItemId - override val wrapperId = Id(id) + override val uniqueId: ByteArray = id.bytes override val displayName = alias constructor(contact: PendingContact, state: PendingContactState) : this( diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt index 5f4b2bd7984d9307fdfd702be7129c4ffdc736fc..cafa8ef3eb0e6381dbfff46023eba7cca4212a0c 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt @@ -80,14 +80,14 @@ fun PrivateMessageScreen( ) VerticalDivider() Column(modifier = Modifier.weight(1f).fillMaxHeight()) { - val wrapperId = viewModel.selectedContactId.value - if (wrapperId == null) { + val item = viewModel.selectedContactListItem.value + if (item == null) { NoContactSelected() - } else when (wrapperId) { - is ContactItem.Id -> { - ConversationScreen(wrapperId.id) + } else when (item) { + is ContactItem -> { + ConversationScreen(item.id) } - is PendingContactItem.Id -> { + is PendingContactItem -> { PendingContactSelected() } }