From b766abea5e7df4469f41f8cb3e53644f26905988 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 13 Nov 2024 14:42:31 +0100 Subject: [PATCH] fix crash for unreadMarker When messages were sorted out in handleSystemMessages it can happen that the chatMessageList is empty. Because setUnreadMessageMarker accessed chatMessageList[0] this crashed. This can happen e.g. when only a reaction to a chat message was made before opening the chat. Exception java.lang.IndexOutOfBoundsException: Empty list doesn't contain element at index 0. at kotlin.collections.EmptyList.get (Collections.kt:37) at kotlin.collections.EmptyList.get (Collections.kt:25) at com.nextcloud.talk.chat.ChatActivity.setUnreadMessageMarker (ChatActivity.kt:2691) at com.nextcloud.talk.chat.ChatActivity.processMessagesFromTheFuture (ChatActivity.kt:2651) at com.nextcloud.talk.chat.ChatActivity.access$processMessagesFromTheFuture (ChatActivity.kt:209) at com.nextcloud.talk.chat.ChatActivity$initObservers$12$1.invokeSuspend (ChatActivity.kt:875) at com.nextcloud.talk.chat.ChatActivity$initObservers$12$1.invoke (Unknown Source:8) at com.nextcloud.talk.chat.ChatActivity$initObservers$12$1.invoke (Unknown Source:4) at kotlinx.coroutines.flow.FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2.emit (Emitters.kt:219) at kotlinx.coroutines.flow.FlowKt__ErrorsKt$catchImpl$2.emit (Errors.kt:154) at kotlinx.coroutines.flow.FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2.emit (Emitters.kt:220) at kotlinx.coroutines.flow.SharedFlowImpl.collect$suspendImpl (SharedFlow.kt:392) at kotlinx.coroutines.flow.SharedFlowImpl$collect$1.invokeSuspend (Unknown Source:15) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:104) at android.os.Handler.handleCallback (Handler.java:942) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loopOnce (Looper.java:226) at android.os.Looper.loop (Looper.java:313) at android.app.ActivityThread.main (ActivityThread.java:8762) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:604) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067) Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/chat/ChatActivity.kt | 14 ++++++++------ 1 file changed, 8 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 9cbec6884..31042b650 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2685,12 +2685,14 @@ class ChatActivity : private fun isScrolledToBottom() = layoutManager?.findFirstVisibleItemPosition() == 0 private fun setUnreadMessageMarker(chatMessageList: List) { - val unreadChatMessage = ChatMessage() - unreadChatMessage.jsonMessageId = UNREAD_MESSAGES_MARKER_ID - unreadChatMessage.actorId = "-1" - unreadChatMessage.timestamp = chatMessageList[0].timestamp - unreadChatMessage.message = context.getString(R.string.nc_new_messages) - adapter?.addToStart(unreadChatMessage, false) + if (chatMessageList.isNotEmpty()) { + val unreadChatMessage = ChatMessage() + unreadChatMessage.jsonMessageId = UNREAD_MESSAGES_MARKER_ID + unreadChatMessage.actorId = "-1" + unreadChatMessage.timestamp = chatMessageList[0].timestamp + unreadChatMessage.message = context.getString(R.string.nc_new_messages) + adapter?.addToStart(unreadChatMessage, false) + } } private fun processMessagesNotFromTheFuture(chatMessageList: List) {