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 5a39243773ea8d6719fb3ed2850c4020eda53892..f716f77b6c1c5ca2634ae46b38e8e15cfec673bb 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 0826283aa4b79519d97e93bf63d1f80c1d697cbe..52cc79a1c819b76abaa0f890f5bdfa119c6838d9 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 42065c51fbebd05694032f75d8096e7f85b9de06..4e088e4d2b9e18fa65788245c71c804ad43ab833 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 223e98e9ab737db652fe8dd3a5f615267411fa33..7586506cc0fc6bb2a74ae364fcaf5ea822a99bf0 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 4dcdf9c52c98192b165f3c78641c0b546f2fb592..94b53bf2d6961ae83a54b1c8c8f962a7f89509ab 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()