diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt index 2ac199acf78194d66dd3a23dd60c9b52efa298ca..a09a6189205c4da4b2f4a9a05e38dfac52e82e9d 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactCard.kt @@ -51,7 +51,7 @@ fun main() = preview( ) { ContactCard( RealContactItem( - contactId = ContactId(0), + idWrapper = RealContactIdWrapper(ContactId(0)), authorId = AuthorId(getRandomId()), name = getStringParameter("name"), alias = getStringParameter("alias"), diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactIdWrapper.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactIdWrapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..bdca777412419b1f6c6cbb45413d1c3c97b01677 --- /dev/null +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactIdWrapper.kt @@ -0,0 +1,3 @@ +package org.briarproject.briar.desktop.contact + +sealed interface ContactIdWrapper diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt index 7509758e922afb0c223f5222b3a2dfe2fadfc080..ddf63cf950d93fd9365404b053a1eca8c1ea8091 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactItem.kt @@ -2,7 +2,7 @@ package org.briarproject.briar.desktop.contact sealed interface ContactItem { - val contactId: Any + val idWrapper: ContactIdWrapper val displayName: String val isConnected: Boolean val isEmpty: Boolean diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt index 66b96b6a6d2bc078e3775f5a325bae90b73084fb..f8aca611b53ed9193b190eeda855cb30d4a7eca0 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactList.kt @@ -24,8 +24,8 @@ import org.briarproject.briar.desktop.ui.Constants.HEADER_SIZE @Composable fun ContactList( contactList: List<ContactItem>, - isSelected: (Any) -> Boolean, - selectContact: (Any) -> Unit, + isSelected: (ContactItem) -> Boolean, + selectContact: (ContactItem) -> Unit, filterBy: String, setFilterBy: (String) -> Unit, ) { @@ -50,8 +50,8 @@ fun ContactList( items(contactList) { contactItem -> ContactCard( contactItem, - { selectContact(contactItem.contactId) }, - isSelected(contactItem.contactId) + { selectContact(contactItem) }, + isSelected(contactItem) ) } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt index 0e671a526743ca1bc5a6453facd1eab50667e481..f10329afe1b4af4865516fd34cd569356b60bd7c 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactListViewModel.kt @@ -40,16 +40,16 @@ constructor( } private val _filterBy = mutableStateOf("") - private val _selectedContactId = mutableStateOf<Any?>(null) + private val _selectedContactId = mutableStateOf<ContactIdWrapper?>(null) val filterBy = _filterBy.asState() val selectedContactId = _selectedContactId.asState() - fun selectContact(contactId: Any) { - _selectedContactId.value = contactId + fun selectContact(contactItem: ContactItem) { + _selectedContactId.value = contactItem.idWrapper } - fun isSelected(contactId: Any) = _selectedContactId.value == contactId + fun isSelected(contactItem: ContactItem) = _selectedContactId.value == contactItem.idWrapper override fun filterContactItem(contactItem: ContactItem) = contactItem.displayName.contains(_filterBy.value, ignoreCase = true) @@ -64,7 +64,7 @@ constructor( // reset selected contact to null if not available after filtering val id = _selectedContactId.value - if (id != null && !contactList.map { it.contactId }.contains(id)) { + if (id != null && !contactList.map { it.idWrapper }.contains(id)) { _selectedContactId.value = null } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactsViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactsViewModel.kt index 4fc4251f4d8a10f93c92fd05a7f5862739c5ab13..92c3fcc22ecd04e99b1208fa13be176afdb088e7 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactsViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/ContactsViewModel.kt @@ -106,7 +106,7 @@ abstract class ContactsViewModel( _fullContactList.replaceFirst( { if (it is RealContactItem) - it.contactId == contactId + it.idWrapper.contactId == contactId else false }, update @@ -117,7 +117,7 @@ abstract class ContactsViewModel( protected open fun removeItem(contactId: ContactId) { _fullContactList.removeFirst { if (it is RealContactItem) - it.contactId == contactId + it.idWrapper.contactId == contactId else false } updateFilteredList() diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactIdWrapper.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactIdWrapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..dd1b013a7ae01a75e3a0a1d0c61391e38f85484b --- /dev/null +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactIdWrapper.kt @@ -0,0 +1,5 @@ +package org.briarproject.briar.desktop.contact + +import org.briarproject.bramble.api.contact.PendingContactId + +class PendingContactIdWrapper(val pendingContactId: PendingContactId) : ContactIdWrapper diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactItem.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactItem.kt index 1472c4c23d50c0ad0ba1b85624f73f404737b7b1..5610e7a1b0c6ed391920f6654dd18fcd656f2679 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactItem.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactItem.kt @@ -1,10 +1,9 @@ package org.briarproject.briar.desktop.contact import org.briarproject.bramble.api.contact.PendingContact -import org.briarproject.bramble.api.contact.PendingContactId data class PendingContactItem( - override val contactId: PendingContactId, + override val idWrapper: PendingContactIdWrapper, val name: String, val alias: String?, override val isConnected: Boolean, @@ -16,7 +15,7 @@ data class PendingContactItem( override val displayName = if (alias == null) name else "$alias ($name)" constructor(contact: PendingContact) : this( - contactId = contact.id, + idWrapper = PendingContactIdWrapper(contact.id), name = contact.alias, alias = contact.alias, isConnected = false, diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactIdWrapper.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactIdWrapper.kt new file mode 100644 index 0000000000000000000000000000000000000000..9810426dfd6b29b03eeb09b56cddaa08bab52629 --- /dev/null +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactIdWrapper.kt @@ -0,0 +1,5 @@ +package org.briarproject.briar.desktop.contact + +import org.briarproject.bramble.api.contact.ContactId + +class RealContactIdWrapper(val contactId: ContactId) : ContactIdWrapper diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactItem.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactItem.kt index 100bc579750a1f7b8fc0f10ac9b09dfc26ca9426..05296b805ff99ac08f94847a8ece93b51f129b2f 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactItem.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactItem.kt @@ -1,13 +1,12 @@ package org.briarproject.briar.desktop.contact import org.briarproject.bramble.api.contact.Contact -import org.briarproject.bramble.api.contact.ContactId import org.briarproject.bramble.api.identity.AuthorId import org.briarproject.briar.api.client.MessageTracker import kotlin.math.max data class RealContactItem( - override val contactId: ContactId, + override val idWrapper: RealContactIdWrapper, val authorId: AuthorId, val name: String, val alias: String?, @@ -20,7 +19,7 @@ data class RealContactItem( override val displayName = if (alias == null) name else "$alias ($name)" constructor(contact: Contact, isConnected: Boolean, groupCount: MessageTracker.GroupCount) : this( - contactId = contact.id, + idWrapper = RealContactIdWrapper(contact.id), authorId = contact.author.id, name = contact.author.name, alias = contact.alias, diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt index 0637a7a5b2128ee650536498cad17d9b012c303a..fe336200cc5ca5027d7887f4e1cf56af675ebb1e 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/PrivateMessageScreen.kt @@ -6,9 +6,9 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.briarproject.bramble.api.contact.ContactId import org.briarproject.briar.desktop.contact.ContactList import org.briarproject.briar.desktop.contact.ContactListViewModel +import org.briarproject.briar.desktop.contact.RealContactIdWrapper import org.briarproject.briar.desktop.ui.UiPlaceholder import org.briarproject.briar.desktop.ui.VerticalDivider import org.briarproject.briar.desktop.viewmodel.viewModel @@ -28,8 +28,8 @@ fun PrivateMessageScreen( VerticalDivider() Column(modifier = Modifier.weight(1f).fillMaxHeight()) { val id = viewModel.selectedContactId.value - if (id != null && id is ContactId) { - ConversationScreen(id) + if (id != null && id is RealContactIdWrapper) { + ConversationScreen(id.contactId) } else { UiPlaceholder() } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/introduction/IntroductionViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/introduction/IntroductionViewModel.kt index 1d7e290db1c29592944581822368f54beddfe164..9887b78aaf3144da8960679f5a08da8be968dd1a 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/introduction/IntroductionViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/introduction/IntroductionViewModel.kt @@ -60,7 +60,7 @@ constructor( override fun filterContactItem(contactItem: ContactItem): Boolean { return if (contactItem is RealContactItem) { - _firstContact.value?.contactId != contactItem.contactId + _firstContact.value?.idWrapper != contactItem.idWrapper } else false } }