hide thread messages in normal chat

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-07-25 12:05:16 +02:00
parent a26d1c05bc
commit 172d2291cc
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
5 changed files with 33 additions and 15 deletions

View File

@ -168,7 +168,7 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
binding.messageQuote.quotedChatMessageView.visibility = binding.messageQuote.quotedChatMessageView.visibility =
if (!message.isDeleted && if (!message.isDeleted &&
message.parentMessageId != null && message.parentMessageId != null &&
message.parentMessageId != chatActivity.threadId message.parentMessageId != chatActivity.conversationThreadId
) { ) {
processParentMessage(message) processParentMessage(message)
View.VISIBLE View.VISIBLE

View File

@ -183,7 +183,7 @@ class OutcomingTextMessageViewHolder(itemView: View) :
binding.messageQuote.quotedChatMessageView.visibility = binding.messageQuote.quotedChatMessageView.visibility =
if (!message.isDeleted && if (!message.isDeleted &&
message.parentMessageId != null && message.parentMessageId != null &&
message.parentMessageId != chatActivity.threadId message.parentMessageId != chatActivity.conversationThreadId
) { ) {
processParentMessage(message) processParentMessage(message)
View.VISIBLE View.VISIBLE

View File

@ -353,8 +353,8 @@ class ChatActivity :
var sessionIdAfterRoomJoined: String? = null var sessionIdAfterRoomJoined: String? = null
lateinit var roomToken: String lateinit var roomToken: String
var threadId: Long? = null var conversationThreadId: Long? = null
var threadInfo: ThreadInfo? = null var conversationThreadInfo: ThreadInfo? = null
var conversationUser: User? = null var conversationUser: User? = null
lateinit var spreedCapabilities: SpreedCapability lateinit var spreedCapabilities: SpreedCapability
var chatApiVersion: Int = 1 var chatApiVersion: Int = 1
@ -506,10 +506,10 @@ class ChatActivity :
credentials!!, credentials!!,
urlForChatting, urlForChatting,
roomToken, roomToken,
threadId conversationThreadId
) )
threadId?.let { conversationThreadId?.let {
val threadUrl = ApiUtils.getUrlForThread( val threadUrl = ApiUtils.getUrlForThread(
version = 1, version = 1,
baseUrl = conversationUser!!.baseUrl, baseUrl = conversationUser!!.baseUrl,
@ -571,7 +571,7 @@ class ChatActivity :
roomToken = extras?.getString(KEY_ROOM_TOKEN).orEmpty() roomToken = extras?.getString(KEY_ROOM_TOKEN).orEmpty()
threadId = if (extras?.containsKey(KEY_THREAD_ID) == true) { conversationThreadId = if (extras?.containsKey(KEY_THREAD_ID) == true) {
extras.getLong(KEY_THREAD_ID) extras.getLong(KEY_THREAD_ID)
} else { } else {
null null
@ -966,6 +966,7 @@ class ChatActivity :
var chatMessageList = triple.third var chatMessageList = triple.third
chatMessageList = handleSystemMessages(chatMessageList) chatMessageList = handleSystemMessages(chatMessageList)
chatMessageList = handleThreadMessages(chatMessageList)
if (chatMessageList.isEmpty()) { if (chatMessageList.isEmpty()) {
return@onEach return@onEach
} }
@ -1296,7 +1297,7 @@ class ChatActivity :
} }
is ChatViewModel.ThreadRetrieveUiState.Success -> { is ChatViewModel.ThreadRetrieveUiState.Success -> {
threadInfo = uiState.thread conversationThreadInfo = uiState.thread
} }
} }
} }
@ -2668,7 +2669,7 @@ class ChatActivity :
title.text = title.text =
if (isChatThread()) { if (isChatThread()) {
threadInfo?.first?.message conversationThreadInfo?.first?.message
} else if (currentConversation?.displayName != null) { } else if (currentConversation?.displayName != null) {
try { try {
EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString() EmojiCompat.get().process(currentConversation?.displayName as CharSequence).toString()
@ -2683,7 +2684,7 @@ class ChatActivity :
if (isChatThread()) { if (isChatThread()) {
val repliesAmountTitle = String.format( val repliesAmountTitle = String.format(
resources.getString(R.string.thread_replies_amount), resources.getString(R.string.thread_replies_amount),
threadInfo?.thread?.numReplies conversationThreadInfo?.thread?.numReplies
) )
statusMessageViewContents(repliesAmountTitle) statusMessageViewContents(repliesAmountTitle)
} else if (currentConversation?.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) { } else if (currentConversation?.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) {
@ -3455,7 +3456,7 @@ class ChatActivity :
} }
private fun handleSystemMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> { private fun handleSystemMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> {
val chatMessageMap = chatMessageList.map { it.id to it }.toMap().toMutableMap() val chatMessageMap = chatMessageList.associateBy { it.id }.toMutableMap()
val chatMessageIterator = chatMessageMap.iterator() val chatMessageIterator = chatMessageMap.iterator()
while (chatMessageIterator.hasNext()) { while (chatMessageIterator.hasNext()) {
@ -3474,7 +3475,7 @@ class ChatActivity :
} }
private fun handleExpandableSystemMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> { private fun handleExpandableSystemMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> {
val chatMessageMap = chatMessageList.map { it.id to it }.toMap().toMutableMap() val chatMessageMap = chatMessageList.associateBy { it.id }.toMutableMap()
val chatMessageIterator = chatMessageMap.iterator() val chatMessageIterator = chatMessageMap.iterator()
while (chatMessageIterator.hasNext()) { while (chatMessageIterator.hasNext()) {
val currentMessage = chatMessageIterator.next() val currentMessage = chatMessageIterator.next()
@ -3497,6 +3498,23 @@ class ChatActivity :
return chatMessageMap.values.toList() return chatMessageMap.values.toList()
} }
private fun handleThreadMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> {
val chatMessageMap = chatMessageList.associateBy { it.id }.toMutableMap()
if (conversationThreadId == null) {
val chatMessageIterator = chatMessageMap.iterator()
while (chatMessageIterator.hasNext()) {
val currentMessage = chatMessageIterator.next()
if (currentMessage.value.isThread) {
chatMessageIterator.remove()
}
}
}
return chatMessageMap.values.toList()
}
private fun isInfoMessageAboutDeletion(currentMessage: MutableMap.MutableEntry<String, ChatMessage>): Boolean = private fun isInfoMessageAboutDeletion(currentMessage: MutableMap.MutableEntry<String, ChatMessage>): Boolean =
currentMessage.value.parentMessageId != null && currentMessage.value.parentMessageId != null &&
currentMessage.value.systemMessageType == ChatMessage currentMessage.value.systemMessageType == ChatMessage
@ -4206,7 +4224,7 @@ class ChatActivity :
} }
} }
private fun isChatThread(): Boolean = threadId != null && threadId!! > 0 private fun isChatThread(): Boolean = conversationThreadId != null && conversationThreadId!! > 0
fun openThread(messageId: Long) { fun openThread(messageId: Long) {
val bundle = Bundle() val bundle = Bundle()

View File

@ -862,7 +862,7 @@ class MessageInputFragment : Fragment() {
.findViewById<RelativeLayout>(R.id.quotedChatMessageView)?.tag as Int? ?: 0 .findViewById<RelativeLayout>(R.id.quotedChatMessageView)?.tag as Int? ?: 0
if (replyMessageId == 0) { if (replyMessageId == 0) {
replyMessageId = chatActivity.threadInfo?.thread?.id ?: 0 replyMessageId = chatActivity.conversationThreadInfo?.thread?.id ?: 0
} }
sendMessage( sendMessage(

View File

@ -152,7 +152,7 @@ class MessageActionsDialog(
isOnline isOnline
) )
initMenuStartThread(!message.isThread) initMenuStartThread(!message.isThread)
initMenuOpenThread(message.isThread && chatActivity.threadId == null) initMenuOpenThread(message.isThread && chatActivity.conversationThreadId == null)
initMenuEditMessage(isMessageEditable) initMenuEditMessage(isMessageEditable)
initMenuDeleteMessage(showMessageDeletionButton && isOnline) initMenuDeleteMessage(showMessageDeletionButton && isOnline)
initMenuForwardMessage( initMenuForwardMessage(