From e33e7fd0fbf7ee76ab04a8716a94dd7c25259a8f Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 23 Jun 2025 19:04:19 +0200 Subject: [PATCH] editing mentions work Signed-off-by: sowjanyakch --- .../talk/chat/MessageInputFragment.kt | 50 +++++++------------ .../talk/utils/message/MessageUtils.kt | 35 +++++++++++++ 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt index ecb77cce3..43a2d31e3 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -926,8 +926,9 @@ class MessageInputFragment : Fragment() { } } - private fun setEditUI(message: ChatMessage) { - val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters) + + private fun setEditUI(message: ChatMessage) { + val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters) binding.fragmentEditView.editMessage.text = editedMessage binding.fragmentMessageInputView.inputEditText.setText(editedMessage) val end = binding.fragmentMessageInputView.inputEditText.text.length @@ -937,40 +938,23 @@ class MessageInputFragment : Fragment() { binding.fragmentMessageInputView.editMessageButton.visibility = View.VISIBLE binding.fragmentEditView.editMessageView.visibility = View.VISIBLE binding.fragmentMessageInputView.attachmentButton.visibility = View.GONE + binding.fragmentMessageInputView.editMessageButton.setOnClickListener { - binding.fragmentMessageInputView.editMessageButton.setOnClickListener { - val editable = binding.fragmentMessageInputView.inputEditText!!.editableText - val mentionSpans = editable.getSpans( - 0, - editable.length, - Spans.MentionChipSpan::class.java - ) - var mentionSpan: Spans.MentionChipSpan - for (i in mentionSpans.indices) { - mentionSpan = mentionSpans[i] - var mentionId = mentionSpan.id - val shouldQuote = mentionId.contains(" ") || - mentionId.contains("@") || - mentionId.startsWith("guest/") || - mentionId.startsWith("group/") || - mentionId.startsWith("email/") || - mentionId.startsWith("team/") - if (shouldQuote) { - mentionId = "\"" + mentionId + "\"" - } - editable.replace(editable.getSpanStart(mentionSpan), editable.getSpanEnd(mentionSpan), "@$mentionId") - } - val message = chatActivity.messageInputViewModel.getEditChatMessage.value as ChatMessage - if (message.message!!.trim() != editable?.trim()) { - editMessageAPI(message, editable!!.toString()) - } - clearEditUI() - } - binding.fragmentEditView.clearEdit.setOnClickListener { - clearEditUI() - } + val inputEditText = binding.fragmentMessageInputView.inputEditText!!.text.toString() + val message = chatActivity.messageInputViewModel.getEditChatMessage.value as ChatMessage + if (message.message!!.trim() != inputEditText.trim()) { + val editedMessage = messageUtils.processEditMessageParameters(message.messageParameters!!, message, + inputEditText) + editMessageAPI(message, editedMessage.toString()) + } + clearEditUI() + } + binding.fragmentEditView.clearEdit.setOnClickListener { + clearEditUI() + } } + private fun clearEditUI() { binding.fragmentMessageInputView.editMessageButton.visibility = View.GONE binding.fragmentMessageInputView.inputEditText.setText("") diff --git a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt index 985a0aa1e..828099149 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt @@ -159,6 +159,41 @@ class MessageUtils(val context: Context) { return messageStringInternal } + + fun processEditMessageParameters( + messageParameters: HashMap>?, + message: ChatMessage?, + inputEditText:String + ): Spanned { + + var result = inputEditText.toString() + for ((key, valueMap) in messageParameters!!) { + if (key != null) { + val mentionId = valueMap["mention-id"] + val type = valueMap["type"] + val name = valueMap["name"] + val user = message?.activeUser + if (user != null && mentionId != null && type != null) { + val placeholder = "@$name" + when (type) { + "user", "guest", "email" -> { + result = result.replace(placeholder, "@$mentionId", ignoreCase = false) + } + "user-group", "circle" ->{ + val mentionId = "\"" + mentionId + "\"" + result = result.replace(placeholder, "@$mentionId", ignoreCase = false) + } + "call" -> { + result = result.replace(placeholder,"@all", ignoreCase = false ) + } + } + } + } + } + return SpannableString(result) + } + + private fun defaultMessageParameters( messageString: Spanned, individualHashMap: HashMap,