From b2248869df82637af31525f30d5da81ef116bc49 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Mon, 19 May 2025 16:32:41 +0200 Subject: [PATCH] DROID-2966 Chats | Fix | Fix add-attachment button behavior when keyboard is focused (#2412) --- .../anytype/feature_chats/ui/ChatBox.kt | 114 ++++++++++++++++-- 1 file changed, 101 insertions(+), 13 deletions(-) diff --git a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/ui/ChatBox.kt b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/ui/ChatBox.kt index ed2f7b7794..6778ad3357 100644 --- a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/ui/ChatBox.kt +++ b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/ui/ChatBox.kt @@ -201,9 +201,9 @@ fun ChatBox( if (!isFocused) { Box( modifier = Modifier + .align(Alignment.Bottom) .padding(horizontal = 4.dp, vertical = 8.dp) .clip(CircleShape) - .align(Alignment.Bottom) .clickable { scope.launch { focus.clearFocus(force = true) @@ -449,9 +449,7 @@ fun ChatBox( ) } else { ChatBoxEditPanel( - onPlusClicked = { - showDropdownMenu = true - }, + onAttachObjectClicked = onAttachObjectClicked, onMentionClicked = { val selection = text.selection val cursorPosition = selection.start @@ -470,6 +468,16 @@ fun ChatBox( }, onStyleClicked = { showMarkup = true + }, + onUploadFileClicked = { + uploadFileLauncher.launch( + arrayOf("*/*") + ) + }, + onUploadMediaClicked = { + uploadMediaLauncher.launch( + PickVisualMediaRequest(mediaType = ActivityResultContracts.PickVisualMedia.ImageOnly) + ) } ) } @@ -755,23 +763,101 @@ private fun MarkupIcon( @Composable fun ChatBoxEditPanel( - onPlusClicked: () -> Unit, + onAttachObjectClicked: () -> Unit, onStyleClicked: () -> Unit, - onMentionClicked: () -> Unit + onMentionClicked: () -> Unit, + onUploadMediaClicked: () -> Unit, + onUploadFileClicked: () -> Unit ) { + + var showDropdownMenu by remember { mutableStateOf(false) } + Row( modifier = Modifier.fillMaxWidth().height(52.dp), verticalAlignment = Alignment.CenterVertically ) { - Image( - painter = painterResource(id = R.drawable.ic_chat_box_add_attachment), - contentDescription = "Plus button", + + Box( modifier = Modifier .padding(start = 12.dp) - .noRippleClickable { - onPlusClicked() + .clip(CircleShape) + .clickable { + showDropdownMenu = true } - ) + ) { + Image( + painter = painterResource(id = R.drawable.ic_chat_box_add_attachment), + contentDescription = "Plus button" + ) + MaterialTheme( + shapes = MaterialTheme.shapes.copy( + medium = RoundedCornerShape( + 12.dp + ) + ), + colors = MaterialTheme.colors.copy( + surface = colorResource(id = R.color.background_secondary) + ) + ) { + DropdownMenu( + offset = DpOffset(8.dp, 40.dp), + expanded = showDropdownMenu, + onDismissRequest = { + showDropdownMenu = false + }, + modifier = Modifier + .align(Alignment.BottomEnd) + .defaultMinSize( + minWidth = 252.dp + ) + ) { + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.chat_attachment_object), + color = colorResource(id = R.color.text_primary) + ) + }, + onClick = { + showDropdownMenu = false + onAttachObjectClicked() + } + ) + Divider( + paddingStart = 0.dp, + paddingEnd = 0.dp + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.chat_attachment_media), + color = colorResource(id = R.color.text_primary) + ) + }, + onClick = { + showDropdownMenu = false + onUploadMediaClicked() + } + ) + Divider( + paddingStart = 0.dp, + paddingEnd = 0.dp + ) + DropdownMenuItem( + text = { + Text( + text = stringResource(R.string.chat_attachment_file), + color = colorResource(id = R.color.text_primary) + ) + }, + onClick = { + showDropdownMenu = false + onUploadFileClicked() + } + ) + } + } + } Spacer(modifier = Modifier.width(20.dp)) @@ -822,6 +908,8 @@ fun ChatBoxEditPanelPreview() { ChatBoxEditPanel( onMentionClicked = {}, onStyleClicked = {}, - onPlusClicked = {} + onAttachObjectClicked = {}, + onUploadFileClicked = {}, + onUploadMediaClicked = {} ) } \ No newline at end of file