feat: Enhance account handling and message delivery status updates; improve UI feedback for saved messages

This commit is contained in:
2026-01-18 18:12:45 +05:00
parent 61995e9286
commit b8aba7714c
4 changed files with 87 additions and 81 deletions

View File

@@ -1648,47 +1648,62 @@ fun DialogItemContent(
) {
// Показываем статус только для исходящих сообщений
if (dialog.lastMessageFromMe == 1) {
when (dialog.lastMessageDelivered) {
2 -> {
// ERROR - показываем иконку ошибки
Icon(
imageVector = Icons.Outlined.ErrorOutline,
contentDescription = "Sending failed",
tint = Color(0xFFFF3B30), // iOS красный
modifier = Modifier.size(16.dp)
)
Spacer(modifier = Modifier.width(4.dp))
}
1 -> {
// DELIVERED - две галочки
val checkmarkColor = if (dialog.lastMessageRead == 1) {
PrimaryBlue // прочитано - синие
} else {
secondaryTextColor.copy(alpha = 0.6f) // доставлено - серые
// 📁 Для Saved Messages всегда синие двойные галочки (прочитано)
if (dialog.isSavedMessages) {
Icon(
imageVector = Icons.Default.DoneAll,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(16.dp)
)
Spacer(modifier = Modifier.width(4.dp))
} else {
// 🔥 ЛОГИКА КАК В ДЕСКТОПЕ:
// Если delivered == DELIVERED:
// - unreadCount > 0 → одна галочка (есть непрочитанные входящие, собеседник не ответил)
// - unreadCount == 0 → две галочки (нет непрочитанных, собеседник видел/ответил)
when {
dialog.lastMessageDelivered == 2 -> {
// ERROR - показываем иконку ошибки
Icon(
imageVector = Icons.Outlined.ErrorOutline,
contentDescription = "Sending failed",
tint = Color(0xFFFF3B30), // iOS красный
modifier = Modifier.size(16.dp)
)
Spacer(modifier = Modifier.width(4.dp))
}
dialog.lastMessageDelivered == 1 -> {
// DELIVERED - смотрим на unreadCount
if (dialog.unreadCount > 0) {
// Есть непрочитанные входящие → одна серая галочка
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
tint = secondaryTextColor.copy(alpha = 0.6f),
modifier = Modifier.size(16.dp)
)
} else {
// Нет непрочитанных → две синие галочки (прочитано)
Icon(
imageVector = Icons.Default.DoneAll,
contentDescription = null,
tint = PrimaryBlue,
modifier = Modifier.size(16.dp)
)
}
Spacer(modifier = Modifier.width(4.dp))
}
else -> {
// SENT/WAITING - одна серая галочка
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
tint = secondaryTextColor.copy(alpha = 0.6f),
modifier = Modifier.size(16.dp)
)
Spacer(modifier = Modifier.width(4.dp))
}
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
tint = checkmarkColor,
modifier = Modifier.size(14.dp)
)
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
tint = checkmarkColor,
modifier = Modifier.size(14.dp).offset(x = (-6).dp)
)
Spacer(modifier = Modifier.width(2.dp))
}
0 -> {
// WAITING - одна серая галочка (отправлено, ждём доставку)
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
tint = secondaryTextColor.copy(alpha = 0.6f),
modifier = Modifier.size(14.dp)
)
Spacer(modifier = Modifier.width(4.dp))
}
}
}