editing mentions work

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
sowjanyakch 2025-06-23 19:04:19 +02:00
parent 15f3240f98
commit e33e7fd0fb
No known key found for this signature in database
GPG Key ID: F7AA2A8B65B50220
2 changed files with 52 additions and 33 deletions

View File

@ -926,6 +926,7 @@ class MessageInputFragment : Fragment() {
} }
} }
private fun setEditUI(message: ChatMessage) { private fun setEditUI(message: ChatMessage) {
val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters) val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters)
binding.fragmentEditView.editMessage.text = editedMessage binding.fragmentEditView.editMessage.text = editedMessage
@ -937,32 +938,14 @@ class MessageInputFragment : Fragment() {
binding.fragmentMessageInputView.editMessageButton.visibility = View.VISIBLE binding.fragmentMessageInputView.editMessageButton.visibility = View.VISIBLE
binding.fragmentEditView.editMessageView.visibility = View.VISIBLE binding.fragmentEditView.editMessageView.visibility = View.VISIBLE
binding.fragmentMessageInputView.attachmentButton.visibility = View.GONE binding.fragmentMessageInputView.attachmentButton.visibility = View.GONE
binding.fragmentMessageInputView.editMessageButton.setOnClickListener { binding.fragmentMessageInputView.editMessageButton.setOnClickListener {
val editable = binding.fragmentMessageInputView.inputEditText!!.editableText
val mentionSpans = editable.getSpans( val inputEditText = binding.fragmentMessageInputView.inputEditText!!.text.toString()
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 val message = chatActivity.messageInputViewModel.getEditChatMessage.value as ChatMessage
if (message.message!!.trim() != editable?.trim()) { if (message.message!!.trim() != inputEditText.trim()) {
editMessageAPI(message, editable!!.toString()) val editedMessage = messageUtils.processEditMessageParameters(message.messageParameters!!, message,
inputEditText)
editMessageAPI(message, editedMessage.toString())
} }
clearEditUI() clearEditUI()
} }
@ -971,6 +954,7 @@ class MessageInputFragment : Fragment() {
} }
} }
private fun clearEditUI() { private fun clearEditUI() {
binding.fragmentMessageInputView.editMessageButton.visibility = View.GONE binding.fragmentMessageInputView.editMessageButton.visibility = View.GONE
binding.fragmentMessageInputView.inputEditText.setText("") binding.fragmentMessageInputView.inputEditText.setText("")

View File

@ -159,6 +159,41 @@ class MessageUtils(val context: Context) {
return messageStringInternal return messageStringInternal
} }
fun processEditMessageParameters(
messageParameters: HashMap<String?, HashMap<String?, String?>>?,
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( private fun defaultMessageParameters(
messageString: Spanned, messageString: Spanned,
individualHashMap: HashMap<String?, String?>, individualHashMap: HashMap<String?, String?>,