From ba71b06f44e9398b2252d84d2551d1628f5d7229 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Tue, 19 Nov 2024 15:49:11 +0100 Subject: [PATCH] DROID-3044 Chats | Fix | Misc. fixes for space-level chats (#1818) --- .../feature/discussions/DiscussionFragment.kt | 3 + .../anytype/ui/home/HomeScreenFragment.kt | 4 + .../anytype/ui/home/HomeScreenToolbar.kt | 11 +- .../ui/DiscussionPreviews.kt | 3 +- .../ui/DiscussionScreen.kt | 110 ++++++++++++++++-- localization/src/main/res/values/strings.xml | 1 + 6 files changed, 120 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/discussions/DiscussionFragment.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/discussions/DiscussionFragment.kt index fb9a275b5a..c344454485 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/discussions/DiscussionFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/discussions/DiscussionFragment.kt @@ -75,6 +75,9 @@ class DiscussionFragment : BaseComposeFragment() { vm = vm, onAttachClicked = { showBottomSheet = true + }, + onBackButtonClicked = { + // TODO } ) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt index 509541fef3..53b94695c5 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt @@ -117,6 +117,7 @@ class HomeScreenFragment : BaseComposeFragment(), Modifier.fillMaxSize() ) { HomeScreenToolbar( + isChatActive = pagerState.targetPage == 1, onWidgetTabClicked = { coroutineScope.launch { pagerState.animateScrollToPage(0) @@ -178,6 +179,9 @@ class HomeScreenFragment : BaseComposeFragment(), vm = spaceLevelChatViewModel, onAttachClicked = { // TODO + }, + onBackButtonClicked = { + findNavController().popBackStack() } ) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt index d76e304570..55e9118fff 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenToolbar.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp @@ -20,6 +21,7 @@ import com.anytypeio.anytype.feature_discussions.R @Composable fun HomeScreenToolbar( + isChatActive: Boolean, onWidgetTabClicked: () -> Unit, onChatTabClicked: () -> Unit ) { @@ -35,6 +37,9 @@ fun HomeScreenToolbar( modifier = Modifier .size(32.dp) .align(Alignment.CenterStart) + .alpha( + if (isChatActive) 0.5f else 1f + ) .noRippleClickable { onWidgetTabClicked() }, @@ -46,6 +51,9 @@ fun HomeScreenToolbar( modifier = Modifier .size(32.dp) .align(Alignment.CenterEnd) + .alpha( + if (isChatActive) 1f else 0.5f + ) .noRippleClickable { onChatTabClicked() }, @@ -59,6 +67,7 @@ fun HomeScreenToolbar( fun HomeScreenToolbarPreview() { HomeScreenToolbar( onWidgetTabClicked = {}, - onChatTabClicked = {} + onChatTabClicked = {}, + isChatActive = false ) } diff --git a/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionPreviews.kt b/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionPreviews.kt index ea4ce60c93..951b8a0708 100644 --- a/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionPreviews.kt +++ b/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionPreviews.kt @@ -81,7 +81,8 @@ fun DiscussionScreenPreview() { onAttachmentClicked = {}, onEditMessage = {}, onExitEditMessageMode = {}, - isSpaceLevelChat = true + isSpaceLevelChat = true, + onBackButtonClicked = {} ) } diff --git a/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionScreen.kt b/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionScreen.kt index 48096ef25d..62577d832a 100644 --- a/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionScreen.kt +++ b/feature-discussions/src/main/java/com/anytypeio/anytype/feature_discussions/ui/DiscussionScreen.kt @@ -124,7 +124,8 @@ fun DiscussionScreenWrapper( isSpaceLevelChat: Boolean = false, vm: DiscussionViewModel, // TODO move to view model - onAttachClicked: () -> Unit + onAttachClicked: () -> Unit, + onBackButtonClicked: () -> Unit ) { NavHost( navController = rememberNavController(), @@ -168,7 +169,8 @@ fun DiscussionScreenWrapper( onEditMessage = vm::onRequestEditMessageClicked, onAttachmentClicked = vm::onAttachmentClicked, isInEditMessageMode = vm.chatBoxMode.collectAsState().value is ChatBoxMode.EditMessage, - onExitEditMessageMode = vm::onExitEditMessageMode + onExitEditMessageMode = vm::onExitEditMessageMode, + onBackButtonClicked = onBackButtonClicked ) LaunchedEffect(Unit) { vm.commands.collect { command -> @@ -201,6 +203,7 @@ fun DiscussionScreen( onMessageSent: (String) -> Unit, onTitleChanged: (String) -> Unit, onAttachClicked: () -> Unit, + onBackButtonClicked: () -> Unit, onClearAttachmentClicked: () -> Unit, onReacted: (Id, String) -> Unit, onDeleteMessage: (DiscussionView.Message) -> Unit, @@ -294,10 +297,6 @@ fun DiscussionScreen( enabled = jumpToBottomButtonEnabled ) } - Divider( - paddingStart = 0.dp, - paddingEnd = 0.dp - ) attachments.forEach { Box { Attachment( @@ -357,7 +356,8 @@ fun DiscussionScreen( }, clearText = { textState = TextFieldValue() - } + }, + onBackButtonClicked = onBackButtonClicked ) } } @@ -406,7 +406,7 @@ private fun DiscussionTitle( } @Composable -private fun ChatBox( +private fun OldChatBox( chatBoxFocusRequester: FocusRequester, textState: TextFieldValue, onMessageSent: (String) -> Unit = {}, @@ -488,6 +488,96 @@ private fun ChatBox( } } +@Composable +private fun ChatBox( + onBackButtonClicked: () -> Unit, + chatBoxFocusRequester: FocusRequester, + textState: TextFieldValue, + onMessageSent: (String) -> Unit = {}, + onAttachClicked: () -> Unit = {}, + resetScroll: () -> Unit = {}, + isTitleFocused: Boolean, + attachments: List, + clearText: () -> Unit, + updateValue: (TextFieldValue) -> Unit +) { + + val scope = rememberCoroutineScope() + + val focus = LocalFocusManager.current + + Row( + modifier = Modifier + .fillMaxWidth() + .defaultMinSize(minHeight = 56.dp) + .padding( + start = 12.dp, + end = 12.dp, + bottom = 20.dp + ) + .background( + color = colorResource(R.color.navigation_panel), + shape = RoundedCornerShape(16.dp) + ) + ) { + Box( + modifier = Modifier + .padding(horizontal = 4.dp, vertical = 8.dp) + .clip(CircleShape) + .align(Alignment.Bottom) + .clickable { + scope.launch { + focus.clearFocus(force = true) + onBackButtonClicked() + } + } + ) { + Image( + painter = painterResource(id = R.drawable.ic_nav_panel_back), + contentDescription = "Back button", + modifier = Modifier + .align(Alignment.Center) + .padding(horizontal = 4.dp, vertical = 4.dp) + ) + } + ChatBoxUserInput( + textState = textState, + onMessageSent = { + onMessageSent(it) + clearText() + resetScroll() + }, + onTextChanged = { value -> + updateValue(value) + }, + modifier = Modifier + .weight(1f) + .align(Alignment.Bottom) + .focusRequester(chatBoxFocusRequester) + ) + Box( + modifier = Modifier + .padding(horizontal = 4.dp, vertical = 8.dp) + .clip(CircleShape) + .align(Alignment.Bottom) + .clickable { + scope.launch { + focus.clearFocus(force = true) + onAttachClicked() + } + } + ) { + Image( + painter = painterResource(id = R.drawable.ic_nav_panel_plus), + contentDescription = "Plus button", + modifier = Modifier + .align(Alignment.Center) + .padding(horizontal = 4.dp, vertical = 4.dp) + ) + } + } +} + @Composable fun EditMessageToolbar( onExitClicked: () -> Unit @@ -564,9 +654,9 @@ private fun ChatBoxUserInput( decorationBox = @Composable { innerTextField -> DefaultHintDecorationBox( text = textState.text, - hint = "Write a message", + hint = stringResource(R.string.write_a_message), innerTextField = innerTextField, - textStyle = BodyRegular + textStyle = BodyRegular.copy(color = colorResource(R.color.text_tertiary)) ) } ) diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml index 3fcff2baee..f8588da1e8 100644 --- a/localization/src/main/res/values/strings.xml +++ b/localization/src/main/res/values/strings.xml @@ -1821,5 +1821,6 @@ Please provide specific details of your needs here. Edit message edited There is no messages yet.\nBe the first to start a discussion. + Write a message... \ No newline at end of file