From 8f1f22fd54b2d3100530e1c6d35a8351da2e15e6 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 3 Jan 2025 17:39:00 +0100 Subject: [PATCH] Fix duplicate "Today"-bug If user sent a message as a first message in today's chat, the temp message will be deleted when messages are retrieved from server, but also the date has to be deleted as it will be added again when the chat messages are added from server. Otherwise date "Today" would be shown twice. Signed-off-by: Marcel Hibbe --- .../com/nextcloud/talk/chat/ChatActivity.kt | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index b34481076..a3be754ee 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -65,10 +65,8 @@ import androidx.core.text.bold import androidx.emoji2.text.EmojiCompat import androidx.fragment.app.DialogFragment import androidx.fragment.app.commit -import androidx.lifecycle.Lifecycle import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -1140,11 +1138,22 @@ class ChatActivity : } // do not use adapter.deleteById() as it seems to contain a bug! Use this method instead! + @Suppress("MagicNumber") private fun removeMessageById(idToDelete: String) { - val index = adapter?.getMessagePositionById(idToDelete) - if (index != null && index != -1) { - adapter?.items?.removeAt(index) - adapter?.notifyItemRemoved(index) + val indexToDelete = adapter?.getMessagePositionById(idToDelete) + if (indexToDelete != null && indexToDelete != UNREAD_MESSAGES_MARKER_ID) { + + // If user sent a message as a first message in todays chat, the temp message will be deleted when + // messages are retrieved from server, but also the date has to be deleted as it will be added again + // when the chat messages are added from server. Otherwise date "Today" would be shown twice. + if (indexToDelete == 0 && (adapter?.items?.get(1))?.item is Date) { + adapter?.items?.removeAt(0) + adapter?.items?.removeAt(0) + adapter?.notifyItemRangeRemoved(indexToDelete,1) + } else { + adapter?.items?.removeAt(indexToDelete) + adapter?.notifyItemRemoved(indexToDelete) + } } }