From 3b7ed375f99ba781e476876e440ce1edac94a6a8 Mon Sep 17 00:00:00 2001 From: ialokim <ialokim@mailbox.org> Date: Thu, 12 Jan 2023 20:04:14 +0100 Subject: [PATCH] WIP: first try without proper navigation results in a lot of callbacks --- .../desktop/conversation/ConversationList.kt | 5 ++++- .../conversation/ConversationScreen.kt | 4 +++- .../conversation/PrivateMessageScreen.kt | 3 ++- .../desktop/navigation/SidebarViewModel.kt | 20 +++++++++++++++++-- .../briar/desktop/ui/MainScreen.kt | 4 +++- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationList.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationList.kt index 5a39243773..f716f77b6c 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationList.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationList.kt @@ -155,7 +155,8 @@ fun main() = preview( { _, it -> it.markRead() } ) }, - respondToRequest = { _, _ -> }, + respondToRequest = { _,_ -> }, + openRequestedShareable = {}, deleteMessage = {}, ) } @@ -170,6 +171,7 @@ fun ConversationList( onMessageAddedToBottom: SingleStateEvent<ConversationViewModel.MessageAddedType>, markMessagesRead: (List<Int>) -> Unit, respondToRequest: (ConversationRequestItem, Boolean) -> Unit, + openRequestedShareable: (ConversationRequestItem) -> Unit, deleteMessage: (MessageId) -> Unit, ) { // we need to make sure the ConversationList is out of composition before showing new messages @@ -201,6 +203,7 @@ fun ConversationList( ConversationRequestItemView( m, onResponse = { accept -> respondToRequest(m, accept) }, + onOpenRequestedShareable = { openRequestedShareable(m) }, onDelete = deleteMessage ) } diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt index 0826283aa4..52cc79a1c8 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt @@ -29,16 +29,17 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import org.briarproject.bramble.api.contact.ContactId +import org.briarproject.briar.api.sharing.Shareable import org.briarproject.briar.desktop.contact.ContactInfoDrawer import org.briarproject.briar.desktop.contact.ContactInfoDrawerState import org.briarproject.briar.desktop.ui.Loader import org.briarproject.briar.desktop.ui.getInfoDrawerHandler import org.briarproject.briar.desktop.viewmodel.viewModel -@OptIn(ExperimentalMaterialApi::class) @Composable fun ConversationScreen( contactId: ContactId, + openRequestedShareable: (ConversationRequestItem) -> Unit, viewModel: ConversationViewModel = viewModel(), ) { LaunchedEffect(contactId) { @@ -103,6 +104,7 @@ fun ConversationScreen( viewModel.onMessageAddedToBottom, viewModel::markMessagesRead, viewModel::respondToRequest, + openRequestedShareable, viewModel::deleteMessage, ) }, 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 42065c51fb..4e088e4d2b 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 @@ -52,6 +52,7 @@ import org.briarproject.briar.desktop.viewmodel.viewModel @Composable fun PrivateMessageScreen( + openRequestedShareable: (ConversationRequestItem) -> Unit, viewModel: ContactListViewModel = viewModel(), addContactViewModel: AddContactViewModel = viewModel(), ) { @@ -85,7 +86,7 @@ fun PrivateMessageScreen( NoContactSelected() } else when (id) { is RealContactIdWrapper -> { - ConversationScreen(id.contactId) + ConversationScreen(id.contactId, openRequestedShareable) } is PendingContactIdWrapper -> { PendingContactSelected() diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/navigation/SidebarViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/navigation/SidebarViewModel.kt index 223e98e9ab..7586506cc0 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/navigation/SidebarViewModel.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/navigation/SidebarViewModel.kt @@ -20,10 +20,15 @@ package org.briarproject.briar.desktop.navigation import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf +import mu.KotlinLogging import org.briarproject.bramble.api.identity.IdentityManager import org.briarproject.bramble.api.identity.LocalAuthor +import org.briarproject.briar.desktop.conversation.ConversationRequestItem +import org.briarproject.briar.desktop.conversation.ConversationRequestItem.RequestType.FORUM import org.briarproject.briar.desktop.ui.UiMode +import org.briarproject.briar.desktop.utils.KLoggerUtils.w import org.briarproject.briar.desktop.viewmodel.ViewModel +import org.briarproject.briar.desktop.viewmodel.asState import javax.inject.Inject class SidebarViewModel @@ -32,6 +37,10 @@ constructor( private val identityManager: IdentityManager, ) : ViewModel() { + companion object { + private val LOG = KotlinLogging.logger {} + } + override fun onInit() { loadAccountInfo() } @@ -39,8 +48,8 @@ constructor( private var _uiMode = mutableStateOf(UiMode.CONTACTS) private var _account = mutableStateOf<LocalAuthor?>(null) - val uiMode: State<UiMode> = _uiMode - val account: State<LocalAuthor?> = _account + val uiMode = _uiMode.asState() + val account = _account.asState() fun setUiMode(uiMode: UiMode) { _uiMode.value = uiMode @@ -49,4 +58,11 @@ constructor( fun loadAccountInfo() { _account.value = identityManager.localAuthor } + + fun openRequestedShareable(m: ConversationRequestItem) { + when (m.requestType) { + FORUM -> setUiMode(UiMode.FORUMS) + else -> LOG.w { "Currently only forums are supported." } + } + } } diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt index 4dcdf9c52c..94b53bf2d6 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt @@ -27,6 +27,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.staticCompositionLocalOf +import org.briarproject.briar.desktop.conversation.ConversationRequestItem +import org.briarproject.briar.desktop.conversation.ConversationRequestItem.RequestType.FORUM import org.briarproject.briar.desktop.conversation.PrivateMessageScreen import org.briarproject.briar.desktop.forums.ForumScreen import org.briarproject.briar.desktop.navigation.BriarSidebar @@ -58,7 +60,7 @@ fun MainScreen(viewModel: SidebarViewModel = viewModel()) { ) VerticalDivider() when (viewModel.uiMode.value) { - UiMode.CONTACTS -> PrivateMessageScreen() + UiMode.CONTACTS -> PrivateMessageScreen(viewModel::openRequestedShareable) UiMode.GROUPS -> PrivateGroupScreen() UiMode.FORUMS -> ForumScreen() UiMode.SETTINGS -> SettingsScreen() -- GitLab