From 5fac97b55d7004a67190ac3ec149b64aaed5491b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 9 Jun 2022 14:54:59 +0200 Subject: [PATCH] Improved a bit chat room diff callback --- .../activities/main/chat/adapters/ChatRoomsListAdapter.kt | 5 +++-- app/src/main/java/org/linphone/utils/LinphoneUtils.kt | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt index 03afb4da8..cbdaf3f38 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatRoomsListAdapter.kt @@ -33,6 +33,7 @@ import org.linphone.activities.main.viewmodels.ListTopBarViewModel import org.linphone.core.ChatRoom import org.linphone.databinding.ChatRoomListCellBinding import org.linphone.utils.Event +import org.linphone.utils.LinphoneUtils class ChatRoomsListAdapter( selectionVM: ListTopBarViewModel, @@ -108,13 +109,13 @@ private class ChatRoomDiffCallback : DiffUtil.ItemCallback() oldItem: ChatRoomViewModel, newItem: ChatRoomViewModel ): Boolean { - return oldItem.chatRoom == newItem.chatRoom + return LinphoneUtils.areChatRoomsTheSame(oldItem.chatRoom, newItem.chatRoom) } override fun areContentsTheSame( oldItem: ChatRoomViewModel, newItem: ChatRoomViewModel ): Boolean { - return false // To force redraw when contacts are updated + return true } } diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index c1cfc2ef3..ab603751a 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -210,6 +210,11 @@ class LinphoneUtils { ) } + fun areChatRoomsTheSame(chatRoom1: ChatRoom, chatRoom2: ChatRoom): Boolean { + return chatRoom1.localAddress.weakEqual(chatRoom2.localAddress) && + chatRoom1.peerAddress.weakEqual(chatRoom2.peerAddress) + } + fun getChatRoomId(localAddress: Address, remoteAddress: Address): String { val localSipUri = localAddress.clone() localSipUri.clean()