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 9fcbc10dd..862942403 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2049,8 +2049,8 @@ class ChatController(args: Bundle) : var countGroupedMessages = 0 if (!isFromTheFuture) { - - for (i in chatMessageList.indices) { + var previousMessageId = NO_PREVIOUS_MESSAGE_ID + for (i in chatMessageList.indices.reversed()) { if (chatMessageList.size > i + 1) { if (TextUtils.isEmpty(chatMessageList[i].systemMessage) && TextUtils.isEmpty(chatMessageList[i + 1].systemMessage) && @@ -2069,6 +2069,12 @@ class ChatController(args: Bundle) : chatMessage.isOneToOneConversation = currentConversation?.type == Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL chatMessage.activeUser = conversationUser + + if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) { + chatMessage.previousMessageId = previousMessageId + } + + previousMessageId = chatMessage.jsonMessageId } if (adapter != null) { @@ -2092,9 +2098,16 @@ class ChatController(args: Bundle) : val isThereANewNotice = shouldAddNewMessagesNotice || adapter?.getMessagePositionByIdInReverse("-1") != -1 - for (i in chatMessageList.indices) { + var previousMessageId = -1 + for (i in chatMessageList.indices.reversed()) { chatMessage = chatMessageList[i] + if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) { + chatMessage.previousMessageId = previousMessageId + } + + previousMessageId = chatMessage.jsonMessageId + chatMessage.activeUser = conversationUser val shouldScroll = @@ -2321,34 +2334,36 @@ class ChatController(args: Bundle) : } R.id.action_mark_as_unread -> { val chatMessage = message as ChatMessage? - ncApi!!.setChatReadMarker( - credentials, - ApiUtils.getUrlForSetChatReadMarker( - ApiUtils.getChatApiVersion(conversationUser, intArrayOf(ApiUtils.APIv1)), - conversationUser?.baseUrl, - roomToken - ), - chatMessage!!.jsonMessageId.minus(1) - ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Observer { - override fun onSubscribe(d: Disposable) { - // unused atm - } + if (chatMessage!!.previousMessageId > 0) { + ncApi!!.setChatReadMarker( + credentials, + ApiUtils.getUrlForSetChatReadMarker( + ApiUtils.getChatApiVersion(conversationUser, intArrayOf(ApiUtils.APIv1)), + conversationUser?.baseUrl, + roomToken + ), + chatMessage.previousMessageId + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Observer { + override fun onSubscribe(d: Disposable) { + // unused atm + } - override fun onNext(t: GenericOverall) { - // unused atm - } + override fun onNext(t: GenericOverall) { + // unused atm + } - override fun onError(e: Throwable) { - Log.e(TAG, e.message, e) - } + override fun onError(e: Throwable) { + Log.e(TAG, e.message, e) + } - override fun onComplete() { - // unused atm - } - }) + override fun onComplete() { + // unused atm + } + }) + } true } R.id.action_forward_message -> { @@ -2503,8 +2518,10 @@ class ChatController(args: Bundle) : menu.findItem(R.id.action_delete_message).isVisible = isShowMessageDeletionButton(message) menu.findItem(R.id.action_forward_message).isVisible = ChatMessage.MessageType.REGULAR_TEXT_MESSAGE == message.getMessageType() + menu.findItem(R.id.action_mark_as_unread).isVisible = message.previousMessageId > -1 && + ChatMessage.MessageType.SYSTEM_MESSAGE != message.getMessageType() if (menu.hasVisibleItems()) { - if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { setForceShowIcon(true) } show() @@ -2755,5 +2772,6 @@ class ChatController(args: Bundle) : private const val SEMI_TRANSPARENT_INT: Int = 99 private const val VOICE_MESSAGE_SEEKBAR_BASE: Int = 1000 private const val SECOND: Long = 1000 + private const val NO_PREVIOUS_MESSAGE_ID: Int = -1 } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java index ce3451ad4..247ea33b9 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java @@ -62,6 +62,8 @@ public class ChatMessage implements MessageContentType, MessageContentType.Image public boolean isDeleted; @JsonField(name = "id") public int jsonMessageId; + @JsonIgnore + public int previousMessageId = -1; @JsonField(name = "token") public String token; // guests or users