From 1431002829a16ed03c89ea25be6c14afaa3562de Mon Sep 17 00:00:00 2001 From: IanRDavies Date: Tue, 12 Apr 2022 20:38:38 +0100 Subject: [PATCH] add status icons to messages (#524) * add status icons to messages * prettier spacing * tighten status icons Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- .../simplex/app/views/chat/item/CIMetaView.kt | 105 ++++++++++++++++-- .../app/views/chat/item/TextItemView.kt | 2 +- 2 files changed, 96 insertions(+), 11 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt index ec00538bce..be21371f30 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIMetaView.kt @@ -4,43 +4,62 @@ import androidx.compose.foundation.layout.* import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Edit +import androidx.compose.material.icons.filled.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import chat.simplex.app.model.CIDirection -import chat.simplex.app.model.ChatItem +import chat.simplex.app.model.* import chat.simplex.app.ui.theme.HighOrLowlight +import chat.simplex.app.ui.theme.SimplexBlue import kotlinx.datetime.Clock @Composable fun CIMetaView(chatItem: ChatItem) { - Row( - horizontalArrangement = Arrangement.spacedBy(4.dp), - verticalAlignment = Alignment.CenterVertically - ) { + Row(verticalAlignment = Alignment.CenterVertically) { if (!chatItem.isDeletedContent) { if (chatItem.meta.itemEdited) { Icon( Icons.Filled.Edit, - modifier = Modifier.height(12.dp), + modifier = Modifier.height(12.dp).padding(end = 1.dp), contentDescription = "Edited", tint = HighOrLowlight, ) } - // TODO status + CIStatusView(chatItem.meta.itemStatus) } Text( chatItem.timestampText, color = HighOrLowlight, - fontSize = 14.sp + fontSize = 14.sp, + modifier = Modifier.padding(start = 3.dp) ) } } + +@Composable +fun CIStatusView(status: CIStatus) { + when (status) { + is CIStatus.SndSent -> { + Icon(Icons.Filled.Check, "sent", Modifier.height(12.dp), tint = HighOrLowlight) + } + is CIStatus.SndErrorAuth -> { + Icon(Icons.Filled.Close, "unauthorized send", Modifier.height(12.dp), tint = Color.Red) + } + is CIStatus.SndError -> { + Icon(Icons.Filled.WarningAmber, "send failed", Modifier.height(12.dp), tint = Color.Yellow) + } + is CIStatus.RcvNew -> { + Icon(Icons.Filled.Circle, "unread", Modifier.height(12.dp), tint = SimplexBlue) + } + else -> {} + } +} + @Preview @Composable fun PreviewCIMetaView() { @@ -51,6 +70,48 @@ fun PreviewCIMetaView() { ) } +@Preview +@Composable +fun PreviewCIMetaViewUnread() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectSnd(), Clock.System.now(), "hello", + status = CIStatus.RcvNew() + ) + ) +} + +@Preview +@Composable +fun PreviewCIMetaViewSendFailed() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectSnd(), Clock.System.now(), "hello", + status = CIStatus.SndError(AgentErrorType.CMD(CommandErrorType.SYNTAX())) + ) + ) +} + +@Preview +@Composable +fun PreviewCIMetaViewSendNoAuth() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectSnd(), Clock.System.now(), "hello", status = CIStatus.SndErrorAuth() + ) + ) +} + +@Preview +@Composable +fun PreviewCIMetaViewSendSent() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectSnd(), Clock.System.now(), "hello", status = CIStatus.SndSent() + ) + ) +} + @Preview @Composable fun PreviewCIMetaViewEdited() { @@ -62,6 +123,30 @@ fun PreviewCIMetaViewEdited() { ) } +@Preview +@Composable +fun PreviewCIMetaViewEditedUnread() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectRcv(), Clock.System.now(), "hello", + itemEdited = true, + status=CIStatus.RcvNew() + ) + ) +} + +@Preview +@Composable +fun PreviewCIMetaViewEditedSent() { + CIMetaView( + chatItem = ChatItem.getSampleData( + 1, CIDirection.DirectSnd(), Clock.System.now(), "hello", + itemEdited = true, + status=CIStatus.SndSent() + ) + ) +} + @Preview @Composable fun PreviewCIMetaViewDeletedContent() { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/TextItemView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/TextItemView.kt index 8d25881786..6f971eaaa9 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/TextItemView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/TextItemView.kt @@ -47,7 +47,7 @@ fun MarkdownText ( senderBold: Boolean = false, modifier: Modifier = Modifier ) { - val reserve = if (edited) " " else " " + val reserve = if (edited) " " else " " if (formattedText == null) { val annotatedText = buildAnnotatedString { appendSender(this, sender, senderBold)