diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt index 1ad3cb8e6..60b6d323c 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt @@ -431,16 +431,20 @@ class ConversationModel } if (isGroup) { - val fakeFriend = coreContext.core.createFriend() - fakeFriend.name = chatRoom.subject - val model = ContactAvatarModel(fakeFriend) - model.defaultToConversationIcon.postValue(true) - model.updateSecurityLevelUsingConversation(chatRoom) - avatarModel.postValue(model) + if (avatarModel.value == null) { + val fakeFriend = coreContext.core.createFriend() + fakeFriend.name = chatRoom.subject + val model = ContactAvatarModel(fakeFriend) + model.defaultToConversationIcon.postValue(true) + model.updateSecurityLevelUsingConversation(chatRoom) + avatarModel.postValue(model) + } } else { - avatarModel.postValue( - coreContext.contactsManager.getContactAvatarModelForAddress(address) - ) + val model = coreContext.contactsManager.getContactAvatarModelForAddress(address) + val oldModel = avatarModel.value + if (!model.compare(oldModel)) { + avatarModel.postValue(model) + } } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt b/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt index b3572b43c..f27a6ae53 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/adapter/ContactsListAdapter.kt @@ -160,7 +160,7 @@ class ContactsListAdapter( } override fun areContentsTheSame(oldItem: ContactAvatarModel, newItem: ContactAvatarModel): Boolean { - return false // oldItem & newItem are always the same because fetched from cache, so return false to force refresh + return newItem.compare(oldItem) } } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/model/ContactAvatarModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactAvatarModel.kt index 065d9a29a..3282a25d8 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/model/ContactAvatarModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactAvatarModel.kt @@ -20,6 +20,7 @@ package org.linphone.ui.main.contacts.model import android.net.Uri +import androidx.annotation.AnyThread import androidx.annotation.WorkerThread import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext @@ -84,6 +85,27 @@ class ContactAvatarModel refreshSortingName() } + @AnyThread + fun compare(other: ContactAvatarModel?): Boolean { + if (other == null) return false + + val picture = picturePath.value + val otherPicture = other.picturePath.value + if (picture != null && otherPicture != null && picture != otherPicture) { + return false + } + + if (contactName != other.contactName) { + return false + } + + if (id != other.id) { + return false + } + + return true + } + @WorkerThread fun destroy() { if (friend.addresses.isNotEmpty()) { diff --git a/app/src/main/java/org/linphone/ui/main/history/adapter/HistoryListAdapter.kt b/app/src/main/java/org/linphone/ui/main/history/adapter/HistoryListAdapter.kt index 63af2740e..7b733e087 100644 --- a/app/src/main/java/org/linphone/ui/main/history/adapter/HistoryListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/history/adapter/HistoryListAdapter.kt @@ -107,7 +107,7 @@ class HistoryListAdapter : ListAdapter(Ca } override fun areContentsTheSame(oldItem: CallLogModel, newItem: CallLogModel): Boolean { - return false // ContactAvatarModel will be the same object but with an updated content + return newItem.avatarModel.compare(oldItem.avatarModel) } } }