Skip to content
Snippets Groups Projects
Commit 83264b46 authored by Sebastian's avatar Sebastian
Browse files

Add ContactIdWrapper interface and implementations

parent 6c704a65
No related branches found
No related tags found
1 merge request!51Show pending contacts in contact list
Showing
with 34 additions and 23 deletions
......@@ -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"),
......
package org.briarproject.briar.desktop.contact
sealed interface ContactIdWrapper
......@@ -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
......
......@@ -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)
)
}
}
......
......@@ -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
}
}
......
......@@ -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()
......
package org.briarproject.briar.desktop.contact
import org.briarproject.bramble.api.contact.PendingContactId
class PendingContactIdWrapper(val pendingContactId: PendingContactId) : ContactIdWrapper
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,
......
package org.briarproject.briar.desktop.contact
import org.briarproject.bramble.api.contact.ContactId
class RealContactIdWrapper(val contactId: ContactId) : ContactIdWrapper
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,
......
......@@ -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()
}
......
......@@ -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
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment