diff --git a/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt b/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt index 721c6fb7e49158766a86fd0f442556df458c60f2..96421379a9de135ad2c67e9f3af966a743e6c864 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/BriarService.kt @@ -2,6 +2,8 @@ package org.briarproject.briar.desktop import androidx.compose.desktop.Window import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -31,6 +33,9 @@ interface BriarService { fun stop() } +val CM = compositionLocalOf<ConversationManager> { error("Undefined ConversationManager") } +val MM = compositionLocalOf<MessagingManager> { error("Undefined MessagingManager") } + @Immutable @Singleton internal class BriarServiceImpl @@ -91,7 +96,12 @@ constructor( ) is Screen.Main -> - BriarUIStateManager(contacts, conversationManager, messagingManager) + CompositionLocalProvider( + CM provides conversationManager, + MM provides messagingManager + ) { + BriarUIStateManager(contacts) + } } } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt index fd973e48e1013a48f44c206c50948bc9ca7924a8..4088522fe3f5dae930e9574998b6d0bf6ff6e500 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/BriarUIStateManager.kt @@ -24,9 +24,7 @@ import org.briarproject.briar.desktop.paul.theme.briarBlack */ @Composable fun BriarUIStateManager( - contacts: List<Contact>, - conversationManager: ConversationManager, - messagingManager: MessagingManager + contacts: List<Contact> ) { // current selected mode, changed using the sidebar buttons val (uiMode, onModeChange) = remember { mutableStateOf("Contacts") } @@ -50,9 +48,7 @@ fun BriarUIStateManager( when (uiMode) { "Contacts" -> PrivateMessageView( contacts, - uiContact, - conversationManager, - messagingManager + uiContact ) else -> Box(modifier = Modifier.fillMaxSize().background(briarBlack)) { Text("TBD", modifier = Modifier.align(Alignment.Center), color = Color.White) diff --git a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt index a0626f2e578beda6fff1e4f2abb3318cdd12222a..1dedb69725c182cf674837c05347bc477f780ffb 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/paul/views/PrivateMessageView.kt @@ -55,9 +55,9 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.v1.DialogProperties import org.briarproject.bramble.api.contact.Contact import org.briarproject.bramble.api.contact.ContactId -import org.briarproject.briar.api.conversation.ConversationManager import org.briarproject.briar.api.conversation.ConversationMessageHeader -import org.briarproject.briar.api.messaging.MessagingManager +import org.briarproject.briar.desktop.CM +import org.briarproject.briar.desktop.MM import org.briarproject.briar.desktop.chat.Chat import org.briarproject.briar.desktop.chat.ChatHistoryConversationVisitor import org.briarproject.briar.desktop.chat.ConversationMessageHeaderComparator @@ -80,9 +80,7 @@ val HEADER_SIZE = 66.dp @Composable fun PrivateMessageView( contacts: List<Contact>, - uiContact: MutableState<Contact>, - conversationManager: ConversationManager, - messagingManager: MessagingManager + uiContact: MutableState<Contact> ) { // Local State for managing the Add Contact Popup val (AddContactDialog, onCancelAdd) = remember { mutableStateOf(false) } @@ -117,7 +115,7 @@ fun PrivateMessageView( } Divider(color = divider, modifier = Modifier.fillMaxHeight().width(1.dp)) Column(modifier = Modifier.weight(1f).fillMaxHeight().background(color = darkGray)) { - DrawMessageRow(uiContact.value, conversationManager, messagingManager) + DrawMessageRow(uiContact.value) } } } @@ -352,11 +350,7 @@ fun Loader() { } @Composable -fun DrawMessageRow( - uiContact: Contact, - conversationManager: ConversationManager, - messagingManager: MessagingManager -) { +fun DrawMessageRow(uiContact: Contact) { Box(Modifier.fillMaxHeight()) { Box(modifier = Modifier.fillMaxWidth().height(HEADER_SIZE + 1.dp)) { Row(modifier = Modifier.align(Alignment.Center)) { @@ -388,7 +382,7 @@ fun DrawMessageRow( ) } Box(Modifier.padding(top = HEADER_SIZE + 1.dp, bottom = HEADER_SIZE)) { - val chat = ChatState(uiContact.id, conversationManager, messagingManager) + val chat = ChatState(uiContact.id) DrawTextBubbles(chat.value) } var text by remember { mutableStateOf(TextFieldValue("")) } @@ -410,12 +404,10 @@ fun DrawMessageRow( } @Composable -fun ChatState( - id: ContactId, - conversationManager: ConversationManager, - messagingManager: MessagingManager -): MutableState<UiState<Chat>> { +fun ChatState(id: ContactId): MutableState<UiState<Chat>> { val state: MutableState<UiState<Chat>> = remember { mutableStateOf(UiState.Loading) } + val messagingManager = MM.current + val conversationManager = CM.current DisposableEffect(id) { state.value = UiState.Loading