diff --git a/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkComponents.kt b/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkComponents.kt index fd0cf47..df5a928 100644 --- a/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkComponents.kt +++ b/feature/talk/src/main/java/ru/forbion/f7cloud/feature/talk/TalkComponents.kt @@ -911,12 +911,26 @@ fun TalkMessageBody( ) } if (!message.attachmentFileName.isNullOrBlank() && !message.hasImageAttachment) { - Text( - "πŸ“„ ${message.attachmentFileName}", - style = MaterialTheme.typography.bodyMedium, - color = F7Colors.Primary, - fontWeight = FontWeight.Medium, - ) + // Живая Ρ‚Π΅ΠΌΠ°: ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° Ρ„Π°ΠΉΠ»Π° β€” круглая ΠΈΠΊΠΎΠ½ΠΊΠ° Ρ‚ΠΈΠΏΠ° 49dp + имя 14/500 + // (ΠΈΠΊΠΎΠ½ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠ±Ρ‰ΠΈΠ΅ assets/filetypes ΠΈΠ· модуля files, мСрТатся Π² APK) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(10.dp), + ) { + AsyncImage( + model = "file:///android_asset/filetypes/${talkFileTypeIcon(message.attachmentFileName!!)}.svg", + contentDescription = null, + modifier = Modifier.size(49.dp), + ) + Text( + message.attachmentFileName!!, + style = MaterialTheme.typography.bodyMedium, + color = F7Colors.ChatText, + fontWeight = FontWeight.Medium, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } } val display = buildMessageDisplayText(message.text) if (display.text.isNotBlank()) { @@ -966,18 +980,10 @@ fun TalkMessageGroupRow( group.messages.forEachIndexed { index, message -> val showAuthor = group.showAuthor && index == 0 && group.outgoing.not() Column( - modifier = Modifier.padding(vertical = 1.dp), + // Живая Ρ‚Π΅ΠΌΠ°: Π·Π°Π·ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ сообщСниями 4px (--f7-msg-gap) + modifier = Modifier.padding(vertical = 2.dp), horizontalAlignment = if (group.outgoing) Alignment.End else Alignment.Start, ) { - if (showAuthor) { - Text( - message.actorDisplayName, - fontSize = 12.sp, - color = F7Colors.Primary, - fontWeight = FontWeight.Medium, - modifier = Modifier.padding(start = 4.dp, bottom = 2.dp), - ) - } Box( modifier = Modifier .shadow( @@ -1004,9 +1010,22 @@ fun TalkMessageGroupRow( onClick = {}, onLongClick = { onLongPress?.invoke(message) }, ) - .padding(horizontal = 12.dp, vertical = 8.dp), + // Живая Ρ‚Π΅ΠΌΠ°: ΠΏΠ°Π΄Π΄ΠΈΠ½Π³ пузыря 8px 10px + .padding(horizontal = 10.dp, vertical = 8.dp), ) { - TalkMessageBody(session = session, message = message) + Column { + if (showAuthor) { + // Живая Ρ‚Π΅ΠΌΠ°: Π°Π²Ρ‚ΠΎΡ€ Π’ΠΠ£Π’Π Π˜ пузыря, 12/600 Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ + Text( + message.actorDisplayName, + fontSize = 12.sp, + color = F7Colors.TextPrimary, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(bottom = 2.dp), + ) + } + TalkMessageBody(session = session, message = message) + } } if (message.reactions.isNotEmpty()) { Row( @@ -1592,3 +1611,18 @@ fun TalkCreateRoomSheet( } } } + +/** Иконка Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° для Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π°Ρ‚Π° (Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ assets/filetypes, Ρ‡Ρ‚ΠΎ Π² Π€Π°ΠΉΠ»Π°Ρ…). */ +internal fun talkFileTypeIcon(name: String): String = + when (name.substringAfterLast('.', "").lowercase()) { + "doc", "docx", "dot", "dotx", "odt", "rtf" -> "word" + "xls", "xlsx", "xlsm", "ods", "csv" -> "spreadsheet" + "ppt", "pptx", "odp" -> "presentation" + "pdf" -> "pdf" + "jpg", "jpeg", "png", "gif", "webp", "bmp", "svg", "heic" -> "image" + "mp3", "wav", "ogg", "flac", "aac" -> "audio" + "mp4", "mkv", "avi", "mov", "webm" -> "video" + "zip", "rar", "7z", "tar", "gz" -> "archive" + "txt", "md", "log" -> "text" + else -> "file" + }