mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-3044 Chats | Fix | Misc. fixes for space-level chats (#1818)
This commit is contained in:
parent
d0f171a9d2
commit
ba71b06f44
6 changed files with 120 additions and 12 deletions
|
@ -75,6 +75,9 @@ class DiscussionFragment : BaseComposeFragment() {
|
|||
vm = vm,
|
||||
onAttachClicked = {
|
||||
showBottomSheet = true
|
||||
},
|
||||
onBackButtonClicked = {
|
||||
// TODO
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
|
|
@ -81,7 +81,8 @@ fun DiscussionScreenPreview() {
|
|||
onAttachmentClicked = {},
|
||||
onEditMessage = {},
|
||||
onExitEditMessageMode = {},
|
||||
isSpaceLevelChat = true
|
||||
isSpaceLevelChat = true,
|
||||
onBackButtonClicked = {}
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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<GlobalSearchItemView>,
|
||||
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))
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1821,5 +1821,6 @@ Please provide specific details of your needs here.</string>
|
|||
<string name="chats_edit_message">Edit message</string>
|
||||
<string name="chats_message_edited">edited</string>
|
||||
<string name="chat_empty_state_message">There is no messages yet.\nBe the first to start a discussion.</string>
|
||||
<string name="write_a_message">Write a message...</string>
|
||||
|
||||
</resources>
|
Loading…
Add table
Add a link
Reference in a new issue