From a3558f70bebc5a67457adfd8751ba2c1cdf85748 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 27 Aug 2018 11:14:28 +0200 Subject: [PATCH] Using new callback for presence notification --- src/android/org/linphone/LinphoneManager.java | 8 ++-- .../linphone/contacts/ContactsManager.java | 45 ++++++++++++++++--- submodules/linphone | 2 +- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index 4046e3ecb..acc843bbd 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -1012,9 +1012,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou private Vibrator mVibrator; public void onNewSubscriptionRequested(Core lc, Friend lf, String url) {} - public void onNotifyPresenceReceived(Core lc, Friend lf) { - ContactsManager.getInstance().refreshSipContact(lf); - } + public void onNotifyPresenceReceived(Core lc, Friend lf) {} @Override public void onEcCalibrationAudioInit(Core lc) { @@ -1659,12 +1657,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou @Override public void onFriendListCreated(Core lc, FriendList list) { - // TODO Auto-generated method stub + list.setListener(ContactsManager.getInstance()); } @Override public void onFriendListRemoved(Core lc, FriendList list) { - // TODO Auto-generated method stub + list.setListener(null); } @Override diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index dd493f25b..c86ad3e05 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -45,6 +45,7 @@ import org.linphone.core.Core; import org.linphone.core.Factory; import org.linphone.core.Friend; import org.linphone.core.FriendList; +import org.linphone.core.FriendListListener; import org.linphone.core.MagicSearch; import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; @@ -59,7 +60,7 @@ import java.util.Locale; import java.util.Set; import java.util.concurrent.TimeUnit; -public class ContactsManager extends ContentObserver { +public class ContactsManager extends ContentObserver implements FriendListListener { private static ContactsManager instance; private List contacts, sipContacts; @@ -93,6 +94,12 @@ public class ContactsManager extends ContentObserver { } public void destroy() { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc != null) { + for (FriendList list : lc.getFriendsLists()) { + list.setListener(null); + } + } defaultAvatar.recycle(); instance = null; } @@ -293,10 +300,6 @@ public class ContactsManager extends ContentObserver { LinphoneContact contact = (LinphoneContact)lf.getUserData(); if (contact != null && !sipContacts.contains(contact)) { sipContacts.add(contact); - Collections.sort(sipContacts); - for (ContactsUpdatedListener listener : contactsUpdatedListeners) { - listener.onContactsUpdated(); - } } } @@ -590,4 +593,36 @@ public class ContactsManager extends ContentObserver { Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, select, new String[]{ ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE }, null); return c; } + + @Override + public void onContactCreated(FriendList list, Friend lf) { + + } + + @Override + public void onContactDeleted(FriendList list, Friend lf) { + + } + + @Override + public void onContactUpdated(FriendList list, Friend newFriend, Friend oldFriend) { + + } + + @Override + public void onSyncStatusChanged(FriendList list, FriendList.SyncStatus status, String msg) { + + } + + @Override + public void onPresenceReceived(FriendList list, Friend[] friends) { + for (Friend lf : friends) { + ContactsManager.getInstance().refreshSipContact(lf); + } + + Collections.sort(sipContacts); + for (ContactsUpdatedListener listener : contactsUpdatedListeners) { + listener.onContactsUpdated(); + } + } } diff --git a/submodules/linphone b/submodules/linphone index d5006fc6e..bf8735e40 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d5006fc6ea570cfd5efac51d86e2bd442ac1d055 +Subproject commit bf8735e40194cc04e1fae2f1d555cca361719137