From de5f44ba0451fa29814fbf113c3beabaacbcc76b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 27 Jan 2025 09:23:42 +0100 Subject: [PATCH] Updated contacts when CardDAV sync is done --- .../org/linphone/contacts/ContactsManager.kt | 72 +++++++++++++++++-- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt index 119ac98b8..aa179add7 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt @@ -172,12 +172,56 @@ class ContactsManager conferenceAvatarMap.values.forEach(ContactAvatarModel::destroy) conferenceAvatarMap.clear() - for (listener in listeners) { - listener.onContactsLoaded() - } + notifyContactsListChanged() } } } + + @WorkerThread + override fun onContactCreated(friendList: FriendList, linphoneFriend: Friend) { + for (address in linphoneFriend.addresses) { + removeUnknownAddressFromMap(address) + } + } + + @WorkerThread + override fun onContactDeleted(friendList: FriendList, linphoneFriend: Friend) { + for (address in linphoneFriend.addresses) { + removeKnownAddressFromMap(address) + } + } + + @WorkerThread + override fun onContactUpdated( + friendList: FriendList, + newFriend: Friend, + oldFriend: Friend + ) { + for (address in oldFriend.addresses) { + removeKnownAddressFromMap(address) + } + for (address in newFriend.addresses) { + removeUnknownAddressFromMap(address) + } + } + + @WorkerThread + override fun onSyncStatusChanged( + friendList: FriendList, + status: FriendList.SyncStatus?, + message: String? + ) { + Log.i("$TAG Friend list [${friendList.displayName}] sync status changed to [$status]") + when (status) { + FriendList.SyncStatus.Successful -> { + notifyContactsListChanged() + } + FriendList.SyncStatus.Failure -> { + Log.e("$TAG Friend list [${friendList.displayName}] sync failed: $message") + } + else -> {} + } + } } private val coreListener: CoreListenerStub = object : CoreListenerStub() { @@ -235,6 +279,24 @@ class ContactsManager } } + @WorkerThread + fun removeKnownAddressFromMap(address: Address) { + val key = address.asStringUriOnly() + val wasKnown = knownContactsAvatarsMap.remove(key) + if (wasKnown != null) { + Log.d("$TAG Removed address [$key] from knownContactsAvatarsMap") + } + } + + @WorkerThread + fun removeUnknownAddressFromMap(address: Address) { + val key = address.asStringUriOnly() + val wasUnknown = unknownContactsAvatarsMap.remove(key) + if (wasUnknown != null) { + Log.d("$TAG Removed address [$key] from unknownContactsAvatarsMap") + } + } + @WorkerThread private fun newContactAddedWithSipUri(friend: Friend, sipUri: String) { if (unknownContactsAvatarsMap.keys.contains(sipUri)) { @@ -266,7 +328,7 @@ class ContactsManager conferenceAvatarMap.values.forEach(ContactAvatarModel::destroy) conferenceAvatarMap.clear() - coreContext.contactsManager.notifyContactsListChanged() + notifyContactsListChanged() } @WorkerThread @@ -291,7 +353,7 @@ class ContactsManager conferenceAvatarMap.values.forEach(ContactAvatarModel::destroy) conferenceAvatarMap.clear() - coreContext.contactsManager.notifyContactsListChanged() + notifyContactsListChanged() } @WorkerThread