From 83264b46f5e9e36489da4184de9658fcacbb9642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de> Date: Tue, 14 Dec 2021 11:12:44 +0100 Subject: [PATCH] Add ContactIdWrapper interface and implementations --- .../briarproject/briar/desktop/contact/ContactCard.kt | 2 +- .../briar/desktop/contact/ContactIdWrapper.kt | 3 +++ .../briarproject/briar/desktop/contact/ContactItem.kt | 2 +- .../briarproject/briar/desktop/contact/ContactList.kt | 8 ++++---- .../briar/desktop/contact/ContactListViewModel.kt | 10 +++++----- .../briar/desktop/contact/ContactsViewModel.kt | 4 ++-- .../briar/desktop/contact/PendingContactIdWrapper.kt | 5 +++++ .../briar/desktop/contact/PendingContactItem.kt | 5 ++--- .../briar/desktop/contact/RealContactIdWrapper.kt | 5 +++++ .../briar/desktop/contact/RealContactItem.kt | 5 ++--- .../briar/desktop/conversation/PrivateMessageScreen.kt | 6 +++--- .../desktop/introduction/IntroductionViewModel.kt | 2 +- 12 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/contact/ContactIdWrapper.kt create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/contact/PendingContactIdWrapper.kt create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/contact/RealContactIdWrapper.kt 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 2ac199acf7..a09a618920 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 0000000000..bdca777412 --- /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 7509758e92..ddf63cf950 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 66b96b6a6d..f8aca611b5 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 0e671a5267..f10329afe1 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 4fc4251f4d..92c3fcc22e 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 0000000000..dd1b013a7a --- /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 1472c4c23d..5610e7a1b0 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 0000000000..9810426dfd --- /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 100bc57975..05296b805f 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 0637a7a5b2..fe336200cc 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 1d7e290db1..9887b78aaf 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 } } -- GitLab