Explorar el Código

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 <dev@mhibbe.de>
Marcel Hibbe hace 6 meses
padre
commit
b766abea5e
Se han modificado 1 ficheros con 8 adiciones y 6 borrados
  1. 8 6
      app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

+ 8 - 6
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<ChatMessage>) {
-        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<ChatMessage>) {