Link preview (#286)

* link preview

* link previews
This commit is contained in:
callebtc
2025-08-23 00:38:33 +02:00
committed by GitHub
parent 49c42ba169
commit 65afdfb92e
2 changed files with 225 additions and 18 deletions
@@ -102,27 +102,54 @@ fun MessageItem(
val colorScheme = MaterialTheme.colorScheme
val timeFormatter = remember { SimpleDateFormat("HH:mm:ss", Locale.getDefault()) }
Row(
Column(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.Top
verticalArrangement = Arrangement.spacedBy(0.dp)
) {
// Create a custom layout that combines selectable text with clickable nickname areas
MessageTextWithClickableNicknames(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
colorScheme = colorScheme,
timeFormatter = timeFormatter,
onNicknameClick = onNicknameClick,
onNicknameLongPress = onNicknameLongPress,
modifier = Modifier.weight(1f)
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.Top
) {
// Create a custom layout that combines selectable text with clickable nickname areas
MessageTextWithClickableNicknames(
message = message,
currentUserNickname = currentUserNickname,
meshService = meshService,
colorScheme = colorScheme,
timeFormatter = timeFormatter,
onNicknameClick = onNicknameClick,
onNicknameLongPress = onNicknameLongPress,
modifier = Modifier.weight(1f)
)
// Delivery status for private messages
if (message.isPrivate && message.sender == currentUserNickname) {
message.deliveryStatus?.let { status ->
DeliveryStatusIcon(status = status)
}
}
}
// Delivery status for private messages
if (message.isPrivate && message.sender == currentUserNickname) {
message.deliveryStatus?.let { status ->
DeliveryStatusIcon(status = status)
// Link preview pills for URLs in message content
if (message.sender != "system") {
val urls = URLDetector.extractUrls(message.content)
if (urls.isNotEmpty()) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(top = 3.dp, start = 1.dp, end = 1.dp),
verticalArrangement = Arrangement.spacedBy(3.dp)
) {
// Show up to 3 URL previews (matches iOS behavior)
urls.take(3).forEach { urlMatch ->
LinkPreviewPill(
url = urlMatch.url,
title = null,
modifier = Modifier.fillMaxWidth()
)
}
}
}
}
}