From 0d020bbfc5b12b5c34072e006a16a00ca60df2c8 Mon Sep 17 00:00:00 2001 From: xtex Date: Sun, 5 Apr 2026 19:34:47 +0800 Subject: [PATCH] Add fast +1 button Signed-off-by: xtex --- .../features/chats/currentChat/ChatComponent.kt | 1 + .../features/chats/currentChat/ChatStore.kt | 1 + .../features/chats/currentChat/ChatStoreFactory.kt | 2 ++ .../chats/currentChat/DefaultChatComponent.kt | 2 ++ .../currentChat/chatContent/ChatMessageOptionsMenu.kt | 6 +++++- .../features/chats/currentChat/impl/MessageActions.kt | 6 ++++++ .../features/stickers/ui/menu/MessageOptionsMenu.kt | 11 ++++++++++- presentation/src/main/res/values-zh-rCN/string.xml | 1 + presentation/src/main/res/values/string.xml | 1 + 9 files changed, 29 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatComponent.kt b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatComponent.kt index ef86b211..554cdb8b 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatComponent.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatComponent.kt @@ -69,6 +69,7 @@ interface ChatComponent { fun onVideoRecorded(file: File) fun onForwardMessage(message: MessageModel) fun onForwardSelectedMessages() + fun onRepeatMessage(message: MessageModel) fun onDeleteMessage(message: MessageModel, revoke: Boolean = false) fun onEditMessage(message: MessageModel) fun onCancelEdit() diff --git a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatStore.kt b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatStore.kt index a97d076c..51aa7c0f 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatStore.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/ChatStore.kt @@ -65,6 +65,7 @@ interface ChatStore : Store component.handleRepeatMessage(intent.message) is Intent.DeleteMessage -> component.handleDeleteMessage(intent.message, intent.revoke) is Intent.EditMessage -> component._state.update { diff --git a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/DefaultChatComponent.kt b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/DefaultChatComponent.kt index 6a0e20d8..2a088029 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/DefaultChatComponent.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/DefaultChatComponent.kt @@ -357,6 +357,8 @@ class DefaultChatComponent( override fun onForwardSelectedMessages() = store.accept(ChatStore.Intent.ForwardSelectedMessages) + override fun onRepeatMessage(message: MessageModel) = store.accept(ChatStore.Intent.RepeatMessage(message)) + override fun onDeleteMessage(message: MessageModel, revoke: Boolean) = store.accept(ChatStore.Intent.DeleteMessage(message, revoke)) diff --git a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/chatContent/ChatMessageOptionsMenu.kt b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/chatContent/ChatMessageOptionsMenu.kt index 0912ee2b..3e24278e 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/chatContent/ChatMessageOptionsMenu.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/chatContent/ChatMessageOptionsMenu.kt @@ -420,7 +420,11 @@ fun ChatMessageOptionsMenu( } onDismiss() }, - onDismiss = onDismiss + onRepeat = { + component.onRepeatMessage(selectedMessage) + onDismiss() + }, + onDismiss = onDismiss, ) } diff --git a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/impl/MessageActions.kt b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/impl/MessageActions.kt index a5f98277..15e36f0a 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/impl/MessageActions.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/chats/currentChat/impl/MessageActions.kt @@ -345,3 +345,9 @@ internal fun DefaultChatComponent.handleCopyLink(localClipboard: Clipboard) { } } } + +internal fun DefaultChatComponent.handleRepeatMessage(message: MessageModel) { + scope.launch { + repositoryMessage.forwardMessage(chatId, chatId, message.id) + } +} diff --git a/presentation/src/main/java/org/monogram/presentation/features/stickers/ui/menu/MessageOptionsMenu.kt b/presentation/src/main/java/org/monogram/presentation/features/stickers/ui/menu/MessageOptionsMenu.kt index e42734d8..6c01c7d1 100644 --- a/presentation/src/main/java/org/monogram/presentation/features/stickers/ui/menu/MessageOptionsMenu.kt +++ b/presentation/src/main/java/org/monogram/presentation/features/stickers/ui/menu/MessageOptionsMenu.kt @@ -101,7 +101,8 @@ fun MessageOptionsMenu( onReport: () -> Unit = {}, onBlock: () -> Unit = {}, onRestrict: () -> Unit = {}, - onDismiss: () -> Unit + onRepeat: () -> Unit, + onDismiss: () -> Unit, ) { val density = LocalDensity.current val configuration = LocalConfiguration.current @@ -657,6 +658,14 @@ fun MessageOptionsMenu( ) } + if (sections.hasForwardAction) { + InternalMenuOptionItem( + icon = Icons.Rounded.PlusOne, + text = stringResource(R.string.menu_repeat), + onClick = { animateOutAndDismiss(onRepeat) } + ) + } + if (sections.hasDownloadAction) { InternalMenuOptionItem( icon = Icons.Rounded.Download, diff --git a/presentation/src/main/res/values-zh-rCN/string.xml b/presentation/src/main/res/values-zh-rCN/string.xml index 61a1e6da..17a91a05 100644 --- a/presentation/src/main/res/values-zh-rCN/string.xml +++ b/presentation/src/main/res/values-zh-rCN/string.xml @@ -228,6 +228,7 @@ 置顶 取消置顶 转发 + +1 选择 更多 删除 diff --git a/presentation/src/main/res/values/string.xml b/presentation/src/main/res/values/string.xml index cf71caef..780be7be 100644 --- a/presentation/src/main/res/values/string.xml +++ b/presentation/src/main/res/values/string.xml @@ -230,6 +230,7 @@ Pin Unpin Forward + +1 Select More Delete