From 07b9c854916ee11ccd0d7cb21d4765c962af1734 Mon Sep 17 00:00:00 2001 From: Boris Safonov Date: Fri, 29 Nov 2024 15:52:42 +0200 Subject: [PATCH 1/3] feat: Add Mentions to draft messages --- .../ui/home/conversations/ConversationScreen.kt | 10 ++++++++++ .../messagecomposer/state/MessageCompositionHolder.kt | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt index 0087bc2f6eb..9bf426c81cb 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt @@ -298,6 +298,16 @@ fun ConversationScreen( messageComposerStateHolder.messageCompositionHolder.value.updateQuote(compositionState.quotedMessage) } } + // add mentions when selectedMentions is not empty in MessageDraft + LaunchedEffect(messageDraftViewModel.state.value.selectedMentions) { + val compositionState = messageDraftViewModel.state.value + if (compositionState.selectedMentions.isNotEmpty()) { + messageComposerStateHolder.messageCompositionHolder.value.setMentions( + compositionState.draftText, + compositionState.selectedMentions.map { it.intoMessageMention() } + ) + } + } conversationMigrationViewModel.migratedConversationId?.let { migratedConversationId -> navigator.navigate( diff --git a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt index 18059202bb4..c973daabbec 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt @@ -239,13 +239,20 @@ class MessageCompositionHolder( ) messageComposition.update { it.copy( - selectedMentions = mentions.mapNotNull { it.toUiMention(editMessageText) }, + selectedMentions = mentions.mapNotNull { mention -> mention.toUiMention(editMessageText) }, editMessageId = messageId ) } onSaveDraft(messageComposition.value.toDraft(editMessageText)) } + fun setMentions(editMessageText: String, mentions: List) { + messageComposition.update { + it.copy(selectedMentions = mentions.mapNotNull { mention -> mention.toUiMention(editMessageText) }) + } + onSaveDraft(messageComposition.value.toDraft(editMessageText)) + } + fun addOrRemoveMessageMarkdown( markdown: RichTextMarkdown, ) { From 4dc2fc8684ef2a76c2c9710cd6f6a968643f0b38 Mon Sep 17 00:00:00 2001 From: Boris Safonov Date: Fri, 29 Nov 2024 22:50:35 +0200 Subject: [PATCH 2/3] Review fix --- .../home/conversations/ConversationScreen.kt | 10 ------- .../state/MessageComposerStateHolder.kt | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt b/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt index 828b5613c0c..8b6cf4c8afc 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/conversations/ConversationScreen.kt @@ -298,16 +298,6 @@ fun ConversationScreen( messageComposerStateHolder.messageCompositionHolder.value.updateQuote(compositionState.quotedMessage) } } - // add mentions when selectedMentions is not empty in MessageDraft - LaunchedEffect(messageDraftViewModel.state.value.selectedMentions) { - val compositionState = messageDraftViewModel.state.value - if (compositionState.selectedMentions.isNotEmpty()) { - messageComposerStateHolder.messageCompositionHolder.value.setMentions( - compositionState.draftText, - compositionState.selectedMentions.map { it.intoMessageMention() } - ) - } - } conversationMigrationViewModel.migratedConversationId?.let { migratedConversationId -> navigator.navigate( diff --git a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageComposerStateHolder.kt b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageComposerStateHolder.kt index 0ea6534dc7d..02b0152216f 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageComposerStateHolder.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageComposerStateHolder.kt @@ -55,15 +55,6 @@ fun rememberMessageComposerStateHolder( val messageTextFieldValue = remember { mutableStateOf(TextFieldValue()) } - LaunchedEffect(draftMessageComposition.draftText) { - if (draftMessageComposition.draftText.isNotBlank()) { - messageTextFieldValue.value = messageTextFieldValue.value.copy( - text = draftMessageComposition.draftText, - selection = TextRange(draftMessageComposition.draftText.length) // Place cursor at the end of the new text - ) - } - } - val messageCompositionHolder = remember { mutableStateOf( MessageCompositionHolder( @@ -77,6 +68,23 @@ fun rememberMessageComposerStateHolder( ) ) } + + LaunchedEffect(draftMessageComposition.draftText) { + if (draftMessageComposition.draftText.isNotBlank()) { + messageTextFieldValue.value = messageTextFieldValue.value.copy( + text = draftMessageComposition.draftText, + selection = TextRange(draftMessageComposition.draftText.length) // Place cursor at the end of the new text + ) + } + + if (draftMessageComposition.selectedMentions.isNotEmpty()) { + messageCompositionHolder.value.setMentions( + draftMessageComposition.draftText, + draftMessageComposition.selectedMentions.map { it.intoMessageMention() } + ) + } + } + LaunchedEffect(Unit) { messageCompositionHolder.value.handleMessageTextUpdates() } From 97cc24f4e1cffda026a2c8f6f89a50768f4c3605 Mon Sep 17 00:00:00 2001 From: Boris Safonov Date: Mon, 9 Dec 2024 12:58:23 +0200 Subject: [PATCH 3/3] Fixed crash after sending message with draft --- .../ui/home/messagecomposer/state/MessageCompositionHolder.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt index 19cc01abe9d..9b5590244c3 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/messagecomposer/state/MessageCompositionHolder.kt @@ -307,7 +307,8 @@ class MessageCompositionHolder( it.copy( quotedMessageId = null, quotedMessage = null, - editMessageId = null + editMessageId = null, + selectedMentions = emptyList() ) } onSaveDraft(messageComposition.value.toDraft(String.EMPTY))