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 b4002c162..4b8e396a2 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, @@ -56,6 +57,11 @@ class ChatRoomsListAdapter( (holder as ViewHolder).bind(getItem(position)) } + override fun getItemId(position: Int): Long { + val room = getItem(position) + return LinphoneUtils.getChatRoomId(room).hashCode().toLong() + } + fun forwardPending(pending: Boolean) { isForwardPending = pending notifyItemRangeChanged(0, itemCount) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 3ddf12b51..b7d749e9e 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -156,7 +156,9 @@ class MasterChatRoomsFragment : MasterFragment id == room.creationTime.toInt() } + val previousNotificationId = previousChatNotifications.find { id -> id == getNotificationIdForChat(room) } if (previousNotificationId != null) { if (chatBubbleNotifications.contains(previousNotificationId)) { Log.i("[Notifications Manager] Found previous notification with same ID [$previousNotificationId] but not cancelling it as it's ID is in chat bubbles list") @@ -799,7 +799,7 @@ class NotificationsManager(private val context: Context) { } fun changeDismissNotificationUponReadForChatRoom(chatRoom: ChatRoom, dismiss: Boolean) { - val notificationId = chatRoom.creationTime.toInt() + val notificationId = getNotificationIdForChat(chatRoom) if (dismiss) { Log.i("[Notifications Manager] Allow notification with id [$notificationId] to be dismissed when chat room will be marked as read, used for chat bubble") chatBubbleNotifications.add(notificationId) diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 0ae380dd0..a6a1b7244 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -229,6 +229,10 @@ class LinphoneUtils { chatRoom1.peerAddress.weakEqual(chatRoom2.peerAddress) } + fun getChatRoomId(room: ChatRoom): String { + return getChatRoomId(room.localAddress, room.peerAddress) + } + fun getChatRoomId(localAddress: Address, remoteAddress: Address): String { val localSipUri = localAddress.clone() localSipUri.clean()