From c1f67c08f71a674e0b0c6b3a4e86ed49ca071775 Mon Sep 17 00:00:00 2001 From: JRoberts <8711996+jr-simplex@users.noreply.github.com> Date: Fri, 20 May 2022 20:40:41 +0400 Subject: [PATCH] android: close chat link dropdown menu when chat becomes unread and "mark read" menu item becomes available (#678) --- .../app/views/chatlist/ChatListNavLinkView.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt index 8527b5ac51..47ab21d004 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListNavLinkView.kt @@ -18,27 +18,34 @@ import chat.simplex.app.model.* import chat.simplex.app.ui.theme.SimpleXTheme import chat.simplex.app.views.chat.item.ItemAction import chat.simplex.app.views.helpers.* +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import kotlinx.datetime.Clock @Composable fun ChatListNavLinkView(chat: Chat, chatModel: ChatModel) { val showMenu = remember { mutableStateOf(false) } - LaunchedEffect(chat.id) { + var showMarkRead by remember { mutableStateOf(false) } + LaunchedEffect(chat.id, chat.chatStats.unreadCount > 0) { showMenu.value = false + launch { + delay(500L) + showMarkRead = chat.chatStats.unreadCount > 0 + } } when (chat.chatInfo) { is ChatInfo.Direct -> ChatListNavLinkLayout( chatLinkPreview = { ChatPreviewView(chat) }, click = { openOrPendingChat(chat.chatInfo, chatModel) }, - dropdownMenuItems = { ContactMenuItems(chat, chatModel, showMenu) }, + dropdownMenuItems = { ContactMenuItems(chat, chatModel, showMenu, showMarkRead) }, showMenu ) is ChatInfo.Group -> ChatListNavLinkLayout( chatLinkPreview = { ChatPreviewView(chat) }, click = { openOrPendingChat(chat.chatInfo, chatModel) }, - dropdownMenuItems = { GroupMenuItems(chat, chatModel, showMenu) }, + dropdownMenuItems = { GroupMenuItems(chat, chatModel, showMenu, showMarkRead) }, showMenu ) is ChatInfo.ContactRequest -> @@ -76,8 +83,8 @@ suspend fun openChat(chatInfo: ChatInfo, chatModel: ChatModel) { } @Composable -fun ContactMenuItems(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { - if (chat.chatStats.unreadCount > 0) { +fun ContactMenuItems(chat: Chat, chatModel: ChatModel, showMenu: MutableState, showMarkRead: Boolean) { + if (showMarkRead) { ItemAction( stringResource(R.string.mark_read), Icons.Outlined.Check, @@ -107,8 +114,8 @@ fun ContactMenuItems(chat: Chat, chatModel: ChatModel, showMenu: MutableState) { - if (chat.chatStats.unreadCount > 0) { +fun GroupMenuItems(chat: Chat, chatModel: ChatModel, showMenu: MutableState, showMarkRead: Boolean) { + if (showMarkRead) { ItemAction( stringResource(R.string.mark_read), Icons.Outlined.Check,