Skip to content

Commit f05ab31

Browse files
committed
feat(assistant): copy content
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 9a865b3 commit f05ab31

1 file changed

Lines changed: 27 additions & 47 deletions

File tree

app/src/main/java/com/nextcloud/client/assistant/chat/ChatContent.kt

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -352,11 +352,33 @@ private fun TypingAnimation() {
352352
}
353353

354354
@Composable
355-
private fun AssistantMessageItem(message: ChatMessage) {
355+
private fun CopyableMessageBubble(text: String, modifier: Modifier = Modifier, content: @Composable () -> Unit) {
356356
var showMenu by remember { mutableStateOf(false) }
357357
val clipboard = LocalClipboard.current
358358
val scope = rememberCoroutineScope()
359359

360+
Box(
361+
modifier = modifier
362+
.combinedClickable(onClick = {}, onLongClick = { showMenu = true })
363+
) {
364+
content()
365+
DropdownMenu(expanded = showMenu, onDismissRequest = { showMenu = false }) {
366+
DropdownMenuItem(
367+
text = { Text(stringResource(R.string.common_copy)) },
368+
onClick = {
369+
scope.launch {
370+
val plainText = ClipData.newPlainText(null, text).toClipEntry()
371+
clipboard.setClipEntry(plainText)
372+
}
373+
showMenu = false
374+
}
375+
)
376+
}
377+
}
378+
}
379+
380+
@Composable
381+
private fun AssistantMessageItem(message: ChatMessage) {
360382
Box(
361383
modifier = Modifier
362384
.padding(vertical = 12.dp)
@@ -378,7 +400,8 @@ private fun AssistantMessageItem(message: ChatMessage) {
378400
alignment = Alignment.Center
379401
)
380402
}
381-
Box(
403+
CopyableMessageBubble(
404+
text = message.content,
382405
modifier = Modifier
383406
.padding(start = 8.dp, end = 16.dp)
384407
.defaultMinSize(minHeight = MIN_CHAT_HEIGHT)
@@ -390,46 +413,23 @@ private fun AssistantMessageItem(message: ChatMessage) {
390413
)
391414
)
392415
.background(color = colorResource(R.color.bg_message_bubble))
393-
.combinedClickable(
394-
onClick = {},
395-
onLongClick = { showMenu = true }
396-
)
397416
) {
398417
MessageTextItem(message)
399-
DropdownMenu(
400-
expanded = showMenu,
401-
onDismissRequest = { showMenu = false }
402-
) {
403-
DropdownMenuItem(
404-
text = { Text(stringResource(R.string.common_copy)) },
405-
onClick = {
406-
scope.launch {
407-
clipboard.setClipEntry(
408-
ClipData.newPlainText(null, message.content).toClipEntry()
409-
)
410-
}
411-
showMenu = false
412-
}
413-
)
414-
}
415418
}
416419
}
417420
}
418421
}
419422

420423
@Composable
421424
private fun UserMessageItem(message: ChatMessage) {
422-
var showMenu by remember { mutableStateOf(false) }
423-
val clipboard = LocalClipboard.current
424-
val scope = rememberCoroutineScope()
425-
426425
Box(
427426
modifier = Modifier
428427
.padding(vertical = 12.dp)
429428
.fillMaxWidth(),
430429
contentAlignment = Alignment.CenterEnd
431430
) {
432-
Box(
431+
CopyableMessageBubble(
432+
text = message.content,
433433
modifier = Modifier
434434
.padding(start = 16.dp, end = 8.dp)
435435
.defaultMinSize(minHeight = MIN_CHAT_HEIGHT)
@@ -441,28 +441,8 @@ private fun UserMessageItem(message: ChatMessage) {
441441
)
442442
)
443443
.background(color = colorResource(R.color.bg_message_bubble))
444-
.combinedClickable(
445-
onClick = {},
446-
onLongClick = { showMenu = true }
447-
)
448444
) {
449445
MessageTextItem(message)
450-
DropdownMenu(
451-
expanded = showMenu,
452-
onDismissRequest = { showMenu = false }
453-
) {
454-
DropdownMenuItem(
455-
text = { Text(stringResource(R.string.common_copy)) },
456-
onClick = {
457-
scope.launch {
458-
clipboard.setClipEntry(
459-
ClipData.newPlainText(null, message.content).toClipEntry()
460-
)
461-
}
462-
showMenu = false
463-
}
464-
)
465-
}
466446
}
467447
}
468448
}

0 commit comments

Comments
 (0)