diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index a6b9ec1c9..8fbd1d6d4 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2087,7 +2087,7 @@ class ChatController(args: Bundle) : if (response.code() == HTTP_CODE_OK) { val chatOverall = response.body() as ChatOverall? - val chatMessageList = setDeletionFlagsAndRemoveInfomessages(chatOverall?.ocs!!.data) + val chatMessageList = handleSystemMessages(chatOverall?.ocs!!.data) if (chatMessageList.isNotEmpty() && ChatMessage.SystemMessageType.CLEARED_CHAT == chatMessageList[0].systemMessageType @@ -2336,11 +2336,13 @@ class ChatController(args: Bundle) : } } - private fun setDeletionFlagsAndRemoveInfomessages(chatMessageList: List): List { + private fun handleSystemMessages(chatMessageList: List): List { val chatMessageMap = chatMessageList.map { it.id to it }.toMap().toMutableMap() val chatMessageIterator = chatMessageMap.iterator() while (chatMessageIterator.hasNext()) { val currentMessage = chatMessageIterator.next() + + // setDeletionFlagsAndRemoveInfomessages if (isInfoMessageAboutDeletion(currentMessage)) { if (!chatMessageMap.containsKey(currentMessage.value.parentMessage.id)) { // if chatMessageMap doesnt't contain message to delete (this happens when lookingIntoFuture), @@ -2351,6 +2353,11 @@ class ChatController(args: Bundle) : } chatMessageIterator.remove() } + + // delete reactions system messages + else if (isReactionsMessage(currentMessage)) { + chatMessageIterator.remove() + } } return chatMessageMap.values.toList() } @@ -2360,6 +2367,12 @@ class ChatController(args: Bundle) : .SystemMessageType.MESSAGE_DELETED } + private fun isReactionsMessage(currentMessage: MutableMap.MutableEntry): Boolean { + return currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.REACTION || + currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.REACTION_DELETED || + currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.REACTION_REVOKED + } + private fun startACall(isVoiceOnlyCall: Boolean) { if (currentConversation?.canStartCall == false && currentConversation?.hasCall == false) { Toast.makeText(context, R.string.startCallForbidden, Toast.LENGTH_LONG).show()