feat: Remove online indicator from ChatDetailScreen for cleaner UI
This commit is contained in:
@@ -513,16 +513,6 @@ fun ChatDetailScreen(
|
|||||||
color = avatarColors.textColor
|
color = avatarColors.textColor
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// 🟢 Online indicator
|
|
||||||
if (!isSavedMessages && isOnline) {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.size(12.dp)
|
|
||||||
.align(Alignment.BottomEnd)
|
|
||||||
.background(Color(0xFF38B24D), CircleShape)
|
|
||||||
.border(2.dp, headerBackground, CircleShape)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
@@ -776,6 +766,12 @@ fun ChatDetailScreen(
|
|||||||
itemsIndexed(messagesWithDates, key = { _, item -> item.first.id }) {
|
itemsIndexed(messagesWithDates, key = { _, item -> item.first.id }) {
|
||||||
index,
|
index,
|
||||||
(message, showDate) ->
|
(message, showDate) ->
|
||||||
|
// Определяем, показывать ли хвостик (последнее сообщение в группе)
|
||||||
|
val nextMessage = messagesWithDates.getOrNull(index + 1)?.first
|
||||||
|
val showTail = nextMessage == null ||
|
||||||
|
nextMessage.isOutgoing != message.isOutgoing ||
|
||||||
|
(message.timestamp.time - nextMessage.timestamp.time) > 60_000 // 1 минута
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
// В reversed layout: дата показывается ПОСЛЕ сообщения
|
// В reversed layout: дата показывается ПОСЛЕ сообщения
|
||||||
// (визуально СВЕРХУ группы сообщений)
|
// (визуально СВЕРХУ группы сообщений)
|
||||||
@@ -788,7 +784,7 @@ fun ChatDetailScreen(
|
|||||||
MessageBubble(
|
MessageBubble(
|
||||||
message = message,
|
message = message,
|
||||||
isDarkTheme = isDarkTheme,
|
isDarkTheme = isDarkTheme,
|
||||||
index = index,
|
showTail = showTail,
|
||||||
isSelected = selectedMessages.contains(message.id),
|
isSelected = selectedMessages.contains(message.id),
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
// Toggle selection on long press
|
// Toggle selection on long press
|
||||||
@@ -1297,7 +1293,7 @@ fun rememberMessageEnterAnimation(messageId: String): Pair<Float, Float> {
|
|||||||
private fun MessageBubble(
|
private fun MessageBubble(
|
||||||
message: ChatMessage,
|
message: ChatMessage,
|
||||||
isDarkTheme: Boolean,
|
isDarkTheme: Boolean,
|
||||||
index: Int = 0,
|
showTail: Boolean = true,
|
||||||
isSelected: Boolean = false,
|
isSelected: Boolean = false,
|
||||||
onLongClick: () -> Unit = {},
|
onLongClick: () -> Unit = {},
|
||||||
onClick: () -> Unit = {}
|
onClick: () -> Unit = {}
|
||||||
@@ -1335,13 +1331,13 @@ private fun MessageBubble(
|
|||||||
if (isDarkTheme) Color(0xFF8E8E93) else Color(0xFF666666)
|
if (isDarkTheme) Color(0xFF8E8E93) else Color(0xFF666666)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Telegram bubble shape - простая форма с разными радиусами углов
|
// Telegram bubble shape - хвостик только у последнего сообщения в группе
|
||||||
val bubbleShape =
|
val bubbleShape =
|
||||||
RoundedCornerShape(
|
RoundedCornerShape(
|
||||||
topStart = 18.dp,
|
topStart = 18.dp,
|
||||||
topEnd = 18.dp,
|
topEnd = 18.dp,
|
||||||
bottomStart = if (message.isOutgoing) 18.dp else 4.dp,
|
bottomStart = if (message.isOutgoing) 18.dp else (if (showTail) 4.dp else 18.dp),
|
||||||
bottomEnd = if (message.isOutgoing) 4.dp else 18.dp
|
bottomEnd = if (message.isOutgoing) (if (showTail) 4.dp else 18.dp) else 18.dp
|
||||||
)
|
)
|
||||||
|
|
||||||
val timeFormat = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) }
|
val timeFormat = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) }
|
||||||
|
|||||||
Reference in New Issue
Block a user