From 9ff8d854ae3714cb71d54124963edb4ac155da67 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 12 Sep 2018 12:37:56 +0200 Subject: [PATCH] Fixed presence issue in contacts list after contact has been added, removed or edited --- .../contacts/ContactsListAdapter.java | 1 + .../linphone/contacts/ContactsManager.java | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/android/org/linphone/contacts/ContactsListAdapter.java b/src/android/org/linphone/contacts/ContactsListAdapter.java index ac05ab0e7..225cb9e36 100644 --- a/src/android/org/linphone/contacts/ContactsListAdapter.java +++ b/src/android/org/linphone/contacts/ContactsListAdapter.java @@ -34,6 +34,7 @@ import android.widget.TextView; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; +import org.linphone.mediastream.Log; import org.linphone.ui.SelectableAdapter; import org.linphone.ui.SelectableHelper; diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index 125206172..3ffad6d57 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -414,8 +414,8 @@ public class ContactsManager extends ContentObserver implements FriendListListen LinphoneContact contact = (LinphoneContact) friend.getUserData(); if (contact != null) { contact.clearAddresses(); - contacts.add(contact); if (contact.getAndroidId() != null) { + contacts.add(contact); mAndroidContactsCache.put(contact.getAndroidId(), contact); } } else { @@ -428,11 +428,11 @@ public class ContactsManager extends ContentObserver implements FriendListListen contact.setFriend(friend); contact.refresh(); contacts.add(contact); + if (contact.hasAddress()) { + sipContacts.add(contact); + } } } - if (contact != null && contact.hasAddress()) { - sipContacts.add(contact); - } } } } @@ -447,14 +447,13 @@ public class ContactsManager extends ContentObserver implements FriendListListen String data2 = c.getString(c.getColumnIndex("data2")); String data3 = c.getString(c.getColumnIndex("data3")); - + nativeIds.add(id); boolean created = false; LinphoneContact contact = mAndroidContactsCache.get(id); if (contact == null) { created = true; contact = new LinphoneContact(); contact.setAndroidId(id); - nativeIds.add(id); contact.setFullName(displayName); mAndroidContactsCache.put(id, contact); } @@ -477,14 +476,16 @@ public class ContactsManager extends ContentObserver implements FriendListListen } } - for (LinphoneContact contact : mAndroidContactsCache.values()) { - String id = contact.getAndroidId(); - if (id != null && !nativeIds.contains(id)) { - // Has been removed since last fetch - for (FriendList list : lc.getFriendsLists()) { - list.removeFriend(contact.getFriend()); + for (FriendList list : lc.getFriendsLists()) { + for (Friend friend : list.getFriends()) { + LinphoneContact contact = (LinphoneContact) friend.getUserData(); + if (contact != null && contact.isAndroidContact()) { + String id = contact.getAndroidId(); + if (id != null && !nativeIds.contains(id)) { + // Has been removed since last fetch + contacts.remove(contact); + } } - contacts.remove(contact); } } nativeIds.clear();