android: refine message bubble shapes and parity checklist
Some checks failed
CI / test (push) Failing after 2m11s

This commit is contained in:
Codex
2026-03-09 14:30:56 +03:00
parent 1d37f8eb0b
commit 542af1d4c1
3 changed files with 14 additions and 3 deletions

View File

@@ -264,3 +264,8 @@
- Added floating rounded bottom navigation container on chat list screen. - Added floating rounded bottom navigation container on chat list screen.
- Added active tab visual state (Chats selected) with pill styling. - Added active tab visual state (Chats selected) with pill styling.
- Updated Telegram UI checklists for bottom-nav shell parity (batch 1 and batch 2). - Updated Telegram UI checklists for bottom-nav shell parity (batch 1 and batch 2).
### Step 44 - Chat UI / bubble density pass
- Updated message bubble shapes for incoming/outgoing messages to denser rounded Telegram-like contours.
- Kept bottom-right time + delivery state rendering in bubble footer after time formatting update.
- Updated Telegram UI batch-2 checklist item for message bubble parity.

View File

@@ -553,6 +553,11 @@ private fun MessageBubble(
onLongPress: () -> Unit, onLongPress: () -> Unit,
) { ) {
val isOutgoing = message.isOutgoing val isOutgoing = message.isOutgoing
val bubbleShape = if (isOutgoing) {
RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp, bottomStart = 16.dp, bottomEnd = 6.dp)
} else {
RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp, bottomStart = 6.dp, bottomEnd = 16.dp)
}
val bubbleColor = if (isOutgoing) { val bubbleColor = if (isOutgoing) {
MaterialTheme.colorScheme.primaryContainer MaterialTheme.colorScheme.primaryContainer
} else { } else {
@@ -564,13 +569,14 @@ private fun MessageBubble(
modifier = Modifier modifier = Modifier
.fillMaxWidth(0.86f) .fillMaxWidth(0.86f)
.background( .background(
if (isSelected) MaterialTheme.colorScheme.tertiaryContainer else bubbleColor color = if (isSelected) MaterialTheme.colorScheme.tertiaryContainer else bubbleColor,
shape = bubbleShape,
) )
.combinedClickable( .combinedClickable(
onClick = onClick, onClick = onClick,
onLongClick = onLongPress, onLongClick = onLongPress,
) )
.padding(horizontal = 10.dp, vertical = 8.dp), .padding(horizontal = 10.dp, vertical = 7.dp),
) { ) {
if (isSelected) { if (isSelected) {
Text( Text(

View File

@@ -10,7 +10,7 @@
- [x] Полупрозрачный rounded input контейнер. - [x] Полупрозрачный rounded input контейнер.
- [x] Иконка emoji слева, поле ввода, скрепка, кнопка отправки/голосового. - [x] Иконка emoji слева, поле ввода, скрепка, кнопка отправки/голосового.
- [x] Корректные отступы от nav bar + IME. - [x] Корректные отступы от nav bar + IME.
- [ ] Сообщения вход/выход: плотные пузыри, время и delivery статус внизу справа. - [x] Сообщения вход/выход: плотные пузыри, время и delivery статус внизу справа.
- [x] Reply-preview внутри outgoing bubble (вертикальная полоска, автор, snippet). - [x] Reply-preview внутри outgoing bubble (вертикальная полоска, автор, snippet).
- [x] Forwarded header в сообщении ("Переслано от ...") + мини-аватар. - [x] Forwarded header в сообщении ("Переслано от ...") + мини-аватар.
- [x] Поддержка chat wallpaper (обои в фоне, читабельный контраст поверх). - [x] Поддержка chat wallpaper (обои в фоне, читабельный контраст поверх).