diff --git a/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt b/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt index c531b2d6e..5d0f16990 100644 --- a/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt +++ b/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt @@ -79,9 +79,6 @@ class AsyncContactsLoader(private val context: Context) : nativeIds.add(contact.nativeId) } else { data.contacts.add(contact) - if (contact.sipAddresses.isNotEmpty()) { - data.sipContacts.add(contact) - } } } else { if (friend.refKey != null) { @@ -95,9 +92,6 @@ class AsyncContactsLoader(private val context: Context) : contact.syncValuesFromFriend() friend.userData = contact data.contacts.add(contact) - if (contact.sipAddresses.isNotEmpty()) { - data.sipContacts.add(contact) - } } } } @@ -209,11 +203,6 @@ class AsyncContactsLoader(private val context: Context) : } } - if (!corePreferences.hideContactsWithoutPresence) { - if (contact.sipAddresses.isNotEmpty() && !data.sipContacts.contains(contact)) { - data.sipContacts.add(contact) - } - } data.contacts.add(contact) } androidContactsCache.clear() @@ -226,19 +215,13 @@ class AsyncContactsLoader(private val context: Context) : override fun onPostExecute(data: AsyncContactsData) { if (isCancelled) return - Log.i("[Contacts Loader] ${data.contacts.size} contacts found in which ${data.sipContacts.size} are SIP") + Log.i("[Contacts Loader] ${data.contacts.size} contacts") for (contact in data.contacts) { if (contact is NativeContact) { contact.createOrUpdateFriendFromNativeContact() - - if (contact.friend?.presenceModel?.basicStatus == PresenceBasicStatus.Open && !data.sipContacts.contains(contact)) { - Log.i("[Contacts Loader] Friend $contact has presence information, adding it to SIP list") - data.sipContacts.add(contact) - } } } - data.sipContacts.sort() // Now that contact fetching is asynchronous, this is required to ensure // presence subscription event will be sent with all friends @@ -266,13 +249,12 @@ class AsyncContactsLoader(private val context: Context) : } } - coreContext.contactsManager.updateContacts(data.contacts, data.sipContacts) + coreContext.contactsManager.updateContacts(data.contacts) Log.i("[Contacts Loader] Synchronization finished") } class AsyncContactsData { val contacts = arrayListOf() - val sipContacts = arrayListOf() } } diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index 16837e676..52c1265fa 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -73,11 +73,6 @@ class ContactsManager(private val context: Context) { get @Synchronized private set - var sipContacts = ArrayList() - @Synchronized - get - @Synchronized - private set val magicSearch: MagicSearch by lazy { val magicSearch = coreContext.core.createMagicSearch() @@ -93,7 +88,7 @@ class ContactsManager(private val context: Context) { @Synchronized private set - private val friendsMap: HashMap = HashMap() + private val friendsMap: HashMap = HashMap() private val contactsUpdatedListeners = ArrayList() @@ -103,18 +98,10 @@ class ContactsManager(private val context: Context) { @Synchronized override fun onPresenceReceived(list: FriendList, friends: Array) { Log.i("[Contacts Manager] Presence received") - var sipContactsListUpdated = false for (friend in friends) { - if (refreshContactOnPresenceReceived(friend)) { - sipContactsListUpdated = true - } - } - - if (sipContactsListUpdated) { - sipContacts.sort() - Log.i("[Contacts Manager] Notifying observers that list has changed") - notifyListeners() + refreshContactOnPresenceReceived(friend) } + notifyListeners() } } @@ -185,12 +172,9 @@ class ContactsManager(private val context: Context) { } @Synchronized - fun updateContacts(all: ArrayList, sip: ArrayList) { + fun updateContacts(all: ArrayList) { contacts.clear() - sipContacts.clear() - contacts.addAll(all) - sipContacts.addAll(sip) updateLocalContacts() @@ -231,10 +215,13 @@ class ContactsManager(private val context: Context) { @Synchronized fun findContactByPhoneNumber(number: String): Contact? { - val cacheFriend = friendsMap[number] - val friend: Friend? = cacheFriend ?: coreContext.core.findFriendByPhoneNumber(number) - if (cacheFriend == null && friend != null) friendsMap[number] = friend - return friend?.userData as? Contact + val contact = friendsMap[number] + if (contact != null) return contact + + val friend = coreContext.core.findFriendByPhoneNumber(number) + val udContact = friend?.userData as? Contact + if (udContact != null) friendsMap[number] = udContact + return udContact } @Synchronized @@ -277,21 +264,16 @@ class ContactsManager(private val context: Context) { cleanAddress.clean() // To remove gruu if any val cleanStringAddress = cleanAddress.asStringUriOnly() - val cacheFriend = friendsMap[cleanStringAddress] - if (cacheFriend != null) { - val contact: Contact? = cacheFriend.userData as? Contact - if (contact != null) { - Log.i("[Contacts Manager] Found contact $contact from friend in cache: $cacheFriend") - return contact - } + val cacheContact = friendsMap[cleanStringAddress] + if (cacheContact != null) { + return cacheContact } val friends = coreContext.core.findFriends(address) for (friend in friends) { val contact: Contact? = friend?.userData as? Contact if (contact != null) { - Log.i("[Contacts Manager] Found contact $contact from friend in Core: $friend") - friendsMap[cleanStringAddress] = friend + friendsMap[cleanStringAddress] = contact return contact } } @@ -343,11 +325,6 @@ class ContactsManager(private val context: Context) { } contacts.clear() - for (contact in sipContacts) { - contact.friend = null - } - sipContacts.clear() - val core = coreContext.core for (list in core.friendsLists) list.removeListener(friendListListener) } @@ -405,8 +382,8 @@ class ContactsManager(private val context: Context) { } @Synchronized - private fun refreshContactOnPresenceReceived(friend: Friend): Boolean { - if (friend.userData == null) return false + private fun refreshContactOnPresenceReceived(friend: Friend) { + if (friend.userData == null) return val contact: Contact = friend.userData as Contact Log.d("[Contacts Manager] Received presence information for contact $contact") @@ -420,13 +397,6 @@ class ContactsManager(private val context: Context) { } else { notifyListeners(contact) } - - if (!sipContacts.contains(contact)) { - sipContacts.add(contact) - return true - } - - return false } @Synchronized diff --git a/app/src/main/java/org/linphone/contact/NativeContact.kt b/app/src/main/java/org/linphone/contact/NativeContact.kt index ff7a38c7e..4d918e1e7 100644 --- a/app/src/main/java/org/linphone/contact/NativeContact.kt +++ b/app/src/main/java/org/linphone/contact/NativeContact.kt @@ -223,7 +223,9 @@ class NativeContact(val nativeId: String, private val lookupKey: String? = null) for (number in rawPhoneNumbers) friend.addPhoneNumber(number) friend.done() - if (created) coreContext.core.defaultFriendList?.addFriend(friend) + if (created) { + coreContext.core.defaultFriendList?.addFriend(friend) + } } }