From 036485e28d26f8180f81367e2a32298932ffb3ca Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 7 Oct 2024 09:04:57 +0200 Subject: [PATCH 1/7] group chat messages Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/chat/ChatActivity.kt | 59 ++++++++++++++----- .../com/nextcloud/talk/utils/DateUtils.kt | 6 ++ 2 files changed, 49 insertions(+), 16 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 9d3d24d27..1401404a0 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2666,11 +2666,10 @@ class ChatActivity : chatMessage.activeUser = conversationUser adapter?.let { - chatMessage.isGrouped = ( - it.isPreviousSameAuthor(chatMessage.actorId, -1) && - it.getSameAuthorLastMessagesCount(chatMessage.actorId) % - GROUPED_MESSAGES_SAME_AUTHOR_THRESHOLD > 0 - ) + val lastItemIndex = adapter!!.itemCount - 1 + val previousChatMessage = adapter!!.items[lastItemIndex].item as ChatMessage + chatMessage.isGrouped = groupMessages(chatMessage, previousChatMessage) + chatMessage.isOneToOneConversation = (currentConversation?.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) chatMessage.isFormerOneToOneConversation = @@ -2716,19 +2715,9 @@ class ChatActivity : } private fun processMessagesNotFromTheFuture(chatMessageList: List) { - var countGroupedMessages = 0 - for (i in chatMessageList.indices) { if (chatMessageList.size > i + 1) { - if (isSameDayNonSystemMessages(chatMessageList[i], chatMessageList[i + 1]) && - chatMessageList[i + 1].actorId == chatMessageList[i].actorId && - countGroupedMessages < GROUPED_MESSAGES_THRESHOLD - ) { - chatMessageList[i].isGrouped = true - countGroupedMessages++ - } else { - countGroupedMessages = 0 - } + chatMessageList[i].isGrouped = groupMessages(chatMessageList[i], chatMessageList[i + 1]) } val chatMessage = chatMessageList[i] @@ -2754,6 +2743,40 @@ class ChatActivity : } } + private fun groupMessages(message1: ChatMessage, message2: ChatMessage): Boolean { + val message1IsSystem = message1.systemMessage.isNotEmpty() + val message2IsSystem = message2.systemMessage.isNotEmpty() + if (message1IsSystem != message2IsSystem) { + return false + } + + if (message1.actorType == "bots" && message1.actorId != "changelog") { + return false + } + + if (!message1IsSystem && ( + (message1.actorType != message2.actorType) || + (message2.actorId != message1.actorId) + ) + ) { + return false + } + + val timeDifference = dateUtils.getTimeDifferenceInSeconds( + message2.timestamp, + message1.timestamp + ) + val isLessThan5Min = timeDifference > 300 + if (isSameDayMessages(message2, message1) && + (message2.actorId == message1.actorId) && + (!isLessThan5Min) && + (message2.lastEditTimestamp == 0L || message1.lastEditTimestamp == 0L) + ) { + return true + } + return false + } + private fun determinePreviousMessageIds(chatMessageList: List) { var previousMessageId = NO_PREVIOUS_MESSAGE_ID for (i in chatMessageList.indices.reversed()) { @@ -2840,6 +2863,10 @@ class ChatActivity : TextUtils.isEmpty(messageRight.systemMessage) && DateFormatter.isSameDay(messageLeft.createdAt, messageRight.createdAt) + private fun isSameDayMessages(message1: ChatMessage, message2: ChatMessage): Boolean { + return DateFormatter.isSameDay(message1.createdAt, message2.createdAt) + } + override fun onLoadMore(page: Int, totalItemsCount: Int) { val id = ( adapter?.items?.last { diff --git a/app/src/main/java/com/nextcloud/talk/utils/DateUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/DateUtils.kt index 29e1b8254..1d302d487 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DateUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/DateUtils.kt @@ -15,6 +15,7 @@ import com.nextcloud.talk.R import java.text.DateFormat import java.util.Calendar import java.util.Date +import kotlin.math.abs import kotlin.math.roundToInt class DateUtils(val context: Context) { @@ -50,6 +51,11 @@ class DateUtils(val context: Context) { return formatTime.format(Date(timestampSeconds * DateConstants.SECOND_DIVIDER)) } + fun getTimeDifferenceInSeconds(time2: Long, time1: Long): Long { + val difference = (time2 - time1) + return abs(difference) + } + fun relativeStartTimeForLobby(timestampMilliseconds: Long, resources: Resources): String { val fmt = RelativeDateTimeFormatter.getInstance() val timeLeftMillis = timestampMilliseconds - System.currentTimeMillis() From 9f8374e61c436e83ac75a834b43ae96cfc2de7de Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 7 Oct 2024 09:20:35 +0200 Subject: [PATCH 2/7] remove unused constants Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 2 -- 1 file changed, 2 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 1401404a0..44fa23635 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -3793,8 +3793,6 @@ class ChatActivity : private const val SEMI_TRANSPARENT_INT: Int = 99 private const val VOICE_MESSAGE_SEEKBAR_BASE = 1000 private const val NO_PREVIOUS_MESSAGE_ID: Int = -1 - private const val GROUPED_MESSAGES_THRESHOLD = 4 - private const val GROUPED_MESSAGES_SAME_AUTHOR_THRESHOLD = 5 private const val TOOLBAR_AVATAR_RATIO = 1.5 private const val STATUS_SIZE_IN_DP = 9f private const val HTTP_CODE_NOT_MODIFIED = 304 From aaa27ba0efcbc72cfd344a4fa07e742a8fec7fd0 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 8 Oct 2024 22:55:32 +0200 Subject: [PATCH 3/7] modify previousChatMessageIndex Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 3 +-- 1 file changed, 1 insertion(+), 2 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 44fa23635..ce65a71b8 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2666,8 +2666,7 @@ class ChatActivity : chatMessage.activeUser = conversationUser adapter?.let { - val lastItemIndex = adapter!!.itemCount - 1 - val previousChatMessage = adapter!!.items[lastItemIndex].item as ChatMessage + val previousChatMessage = adapter!!.items[1].item as ChatMessage chatMessage.isGrouped = groupMessages(chatMessage, previousChatMessage) chatMessage.isOneToOneConversation = From 112a2c28f0bd9d0a1820bdd4862b26a772b7141f Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 21 Oct 2024 14:49:23 +0200 Subject: [PATCH 4/7] Only group Chat messages Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 ce65a71b8..612fb0f32 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2666,9 +2666,10 @@ class ChatActivity : chatMessage.activeUser = conversationUser adapter?.let { - val previousChatMessage = adapter!!.items[1].item as ChatMessage - chatMessage.isGrouped = groupMessages(chatMessage, previousChatMessage) - + val previousChatMessage = adapter!!.items[1].item + if(previousChatMessage is ChatMessage){ + chatMessage.isGrouped = groupMessages(chatMessage, previousChatMessage) + } chatMessage.isOneToOneConversation = (currentConversation?.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) chatMessage.isFormerOneToOneConversation = From 808da8970acc37a9246c88e30b88d91969fcf508 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 21 Oct 2024 14:53:44 +0200 Subject: [PATCH 5/7] KtlintFormat Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 612fb0f32..55fe7c595 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2667,7 +2667,7 @@ class ChatActivity : adapter?.let { val previousChatMessage = adapter!!.items[1].item - if(previousChatMessage is ChatMessage){ + if (previousChatMessage is ChatMessage) { chatMessage.isGrouped = groupMessages(chatMessage, previousChatMessage) } chatMessage.isOneToOneConversation = From 3cd25f42486914f33ae5c1d15b7affde4bcd5810 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Thu, 24 Oct 2024 13:41:24 +0200 Subject: [PATCH 6/7] use const val for time Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 55fe7c595..a24765646 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2766,7 +2766,7 @@ class ChatActivity : message2.timestamp, message1.timestamp ) - val isLessThan5Min = timeDifference > 300 + val isLessThan5Min = timeDifference > FIVE_MINUTES_IN_SECONDS if (isSameDayMessages(message2, message1) && (message2.actorId == message1.actorId) && (!isLessThan5Min) && @@ -3834,5 +3834,6 @@ class ChatActivity : private const val CURRENT_AUDIO_WAS_PLAYING_KEY = "CURRENT_AUDIO_PLAYING" private const val RESUME_AUDIO_TAG = "RESUME_AUDIO_TAG" private const val DELAY_TO_SHOW_PROGRESS_BAR = 1000L + private const val FIVE_MINUTES_IN_SECONDS:Long = 300 } } From b2b64674c0d2dfa4eb0c58a0297d15002d1b3fbf Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Thu, 24 Oct 2024 13:51:06 +0200 Subject: [PATCH 7/7] ktlintFormat Signed-off-by: sowjanyakch --- app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a24765646..df0adc0ec 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -3834,6 +3834,6 @@ class ChatActivity : private const val CURRENT_AUDIO_WAS_PLAYING_KEY = "CURRENT_AUDIO_PLAYING" private const val RESUME_AUDIO_TAG = "RESUME_AUDIO_TAG" private const val DELAY_TO_SHOW_PROGRESS_BAR = 1000L - private const val FIVE_MINUTES_IN_SECONDS:Long = 300 + private const val FIVE_MINUTES_IN_SECONDS: Long = 300 } }