feat: Enhance MessageBubble for media-only messages with adjusted padding and border
This commit is contained in:
@@ -292,17 +292,6 @@ fun ImageAttachment(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Тонкий бордер как в Telegram (просто через border modifier)
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.border(
|
|
||||||
width = 1.dp,
|
|
||||||
color = borderColor,
|
|
||||||
shape = RoundedCornerShape(12.dp)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
// Время в правом нижнем углу (только если изображение загружено)
|
// Время в правом нижнем углу (только если изображение загружено)
|
||||||
if (downloadStatus == DownloadStatus.DOWNLOADED) {
|
if (downloadStatus == DownloadStatus.DOWNLOADED) {
|
||||||
Box(
|
Box(
|
||||||
|
|||||||
@@ -306,6 +306,16 @@ fun MessageBubble(
|
|||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверяем - есть ли только фотки без текста
|
||||||
|
val hasOnlyMedia = message.attachments.isNotEmpty() &&
|
||||||
|
message.text.isEmpty() &&
|
||||||
|
message.replyData == null &&
|
||||||
|
message.attachments.all { it.type == com.rosetta.messenger.network.AttachmentType.IMAGE }
|
||||||
|
|
||||||
|
// Для сообщений только с фото - минимальный padding и тонкий border
|
||||||
|
val bubblePadding = if (hasOnlyMedia) PaddingValues(0.dp) else PaddingValues(horizontal = 10.dp, vertical = 8.dp)
|
||||||
|
val bubbleBorderWidth = if (hasOnlyMedia) 1.dp else 0.dp
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(end = 12.dp)
|
.padding(end = 12.dp)
|
||||||
@@ -323,8 +333,22 @@ fun MessageBubble(
|
|||||||
onLongClick = onLongClick
|
onLongClick = onLongClick
|
||||||
)
|
)
|
||||||
.clip(bubbleShape)
|
.clip(bubbleShape)
|
||||||
.background(bubbleColor)
|
.then(
|
||||||
.padding(horizontal = 10.dp, vertical = 8.dp)
|
if (hasOnlyMedia) {
|
||||||
|
Modifier.border(
|
||||||
|
width = bubbleBorderWidth,
|
||||||
|
color = if (message.isOutgoing) {
|
||||||
|
Color.White.copy(alpha = 0.15f)
|
||||||
|
} else {
|
||||||
|
if (isDarkTheme) Color.White.copy(alpha = 0.1f) else Color.Black.copy(alpha = 0.08f)
|
||||||
|
},
|
||||||
|
shape = bubbleShape
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Modifier.background(bubbleColor)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.padding(bubblePadding)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column {
|
||||||
message.replyData?.let { reply ->
|
message.replyData?.let { reply ->
|
||||||
@@ -355,7 +379,7 @@ fun MessageBubble(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Если есть reply - текст слева, время справа на одной строке
|
// Если есть reply - текст слева, время справа на одной строке
|
||||||
if (message.replyData != null) {
|
if (message.replyData != null && message.text.isNotEmpty()) {
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.Bottom,
|
verticalAlignment = Alignment.Bottom,
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
@@ -392,8 +416,8 @@ fun MessageBubble(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!hasOnlyMedia && message.text.isNotEmpty()) {
|
||||||
// Без reply - компактно в одну строку
|
// Без reply и не только фото - компактно в одну строку
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.Bottom,
|
verticalAlignment = Alignment.Bottom,
|
||||||
horizontalArrangement = Arrangement.spacedBy(10.dp),
|
horizontalArrangement = Arrangement.spacedBy(10.dp),
|
||||||
|
|||||||
Reference in New Issue
Block a user