From 317984919f83c5feef2f41b5eab83027d2081295 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 1 Jul 2025 13:34:31 +0200 Subject: [PATCH] avoid crash if messageParameters is null Signed-off-by: sowjanyakch --- .../talk/chat/MessageInputFragment.kt | 42 ++++++++++--------- .../talk/utils/message/MessageUtils.kt | 30 +++++++------ 2 files changed, 36 insertions(+), 36 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 0d68d17db..8dd9d568f 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -445,12 +445,16 @@ class MessageInputFragment : Fragment() { val message = chatActivity.messageInputViewModel.getEditChatMessage.value as ChatMessage if (message.message!!.trim() != inputEditText.trim()) { - val editedMessage = messageUtils.processEditMessageParameters( - message.messageParameters!!, - message, - inputEditText.toString() - ) - editMessageAPI(message, editedMessage.toString()) + if (message.messageParameters != null) { + val editedMessage = messageUtils.processEditMessageParameters( + message.messageParameters!!, + message, + inputEditText.toString() + ) + editMessageAPI(message, editedMessage.toString()) + } else { + editMessageAPI(message, inputEditText.toString()) + } } clearEditUI() } @@ -967,21 +971,19 @@ class MessageInputFragment : Fragment() { } private fun setEditUI(message: ChatMessage) { - if (message.message != null) { - val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters) - binding.fragmentEditView.editMessage.text = editedMessage - binding.fragmentMessageInputView.inputEditText.setText(editedMessage) - if (mentionAutocomplete != null && mentionAutocomplete!!.isPopupShowing) { - mentionAutocomplete?.dismissPopup() - } - val end = binding.fragmentMessageInputView.inputEditText.text.length - binding.fragmentMessageInputView.inputEditText.setSelection(end) - binding.fragmentMessageInputView.messageSendButton.visibility = View.GONE - binding.fragmentMessageInputView.recordAudioButton.visibility = View.GONE - binding.fragmentMessageInputView.editMessageButton.visibility = View.VISIBLE - binding.fragmentEditView.editMessageView.visibility = View.VISIBLE - binding.fragmentMessageInputView.attachmentButton.visibility = View.GONE + val editedMessage = ChatUtils.getParsedMessage(message.message, message.messageParameters) + binding.fragmentEditView.editMessage.text = editedMessage + binding.fragmentMessageInputView.inputEditText.setText(editedMessage) + if (mentionAutocomplete != null && mentionAutocomplete!!.isPopupShowing) { + mentionAutocomplete?.dismissPopup() } + val end = binding.fragmentMessageInputView.inputEditText.text.length + binding.fragmentMessageInputView.inputEditText.setSelection(end) + binding.fragmentMessageInputView.messageSendButton.visibility = View.GONE + binding.fragmentMessageInputView.recordAudioButton.visibility = View.GONE + binding.fragmentMessageInputView.editMessageButton.visibility = View.VISIBLE + binding.fragmentEditView.editMessageView.visibility = View.VISIBLE + binding.fragmentMessageInputView.attachmentButton.visibility = View.GONE } private fun clearEditUI() { 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 3782abb75..acfb8d91a 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 @@ -160,25 +160,23 @@ class MessageUtils(val context: Context) { } fun processEditMessageParameters( - messageParameters: HashMap>?, + 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" - result = when (type) { - "user", "guest", "email" -> result.replace(placeholder, "@$mentionId", ignoreCase = false) - "user-group", "circle" -> result.replace(placeholder, "@\"$mentionId\"", ignoreCase = false) - "call" -> result.replace(placeholder, "@all", ignoreCase = false) - else -> result - } + var result = inputEditText + for (key in messageParameters.keys) { + val individualHashMap = message?.messageParameters?.get(key) + if (individualHashMap != null) { + val mentionId = individualHashMap["mention-id"] + val type = individualHashMap["type"] + val name = individualHashMap["name"] + val placeholder = "@$name" + result = when (type) { + "user", "guest", "email" -> result.replace(placeholder, "@$mentionId", ignoreCase = false) + "user-group", "circle" -> result.replace(placeholder, "@\"$mentionId\"", ignoreCase = false) + "call" -> result.replace(placeholder, "@all", ignoreCase = false) + else -> result } } }