diff --git a/app/src/main/java/org/linphone/contacts/AsyncContactPresence.java b/app/src/main/java/org/linphone/contacts/AsyncContactPresence.java index d95231894..c65473b99 100644 --- a/app/src/main/java/org/linphone/contacts/AsyncContactPresence.java +++ b/app/src/main/java/org/linphone/contacts/AsyncContactPresence.java @@ -24,9 +24,11 @@ import android.os.AsyncTask; public class AsyncContactPresence extends AsyncTask { private LinphoneContact mLinphoneContact; + private String mAlias; - public AsyncContactPresence(LinphoneContact linphoneContact) { + public AsyncContactPresence(LinphoneContact linphoneContact, String alias) { mLinphoneContact = linphoneContact; + mAlias = alias; } @Override @@ -36,7 +38,7 @@ public class AsyncContactPresence extends AsyncTask @Override protected Void doInBackground(Void... voids) { - mLinphoneContact.updateNativeContactWithPresenceInfo(); + mLinphoneContact.addPresenceInfoToNativeContact(mAlias); return null; } } diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.java b/app/src/main/java/org/linphone/contacts/ContactsManager.java index 2678c555f..2e95e3dca 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.java +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.java @@ -51,6 +51,8 @@ import org.linphone.core.Friend; import org.linphone.core.FriendList; import org.linphone.core.FriendListListener; import org.linphone.core.MagicSearch; +import org.linphone.core.PresenceBasicStatus; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.core.tools.Log; import org.linphone.settings.LinphonePreferences; @@ -485,12 +487,31 @@ public class ContactsManager extends ContentObserver .getApplicationContext() .getResources() .getBoolean(R.bool.use_linphone_tag)) { - // Inserting Linphone information in Android contact if the parameter is enabled if (LinphonePreferences.instance() .isPresenceStorageInNativeAndroidContactEnabled()) { - // add presence to native contact - AsyncContactPresence asyncContactPresence = new AsyncContactPresence(contact); - asyncContactPresence.execute(); + // Inserting information in Android contact if the parameter is enabled + for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) { + if (noa.isSIPAddress()) { + // We are only interested in phone numbers + continue; + } + String value = noa.getValue(); + if (value == null || value.isEmpty()) { + continue; + } + + // Test presence of the value + PresenceModel pm = contact.getFriend().getPresenceModelForUriOrTel(value); + // If presence is not null + if (pm != null + && pm.getBasicStatus() != null + && pm.getBasicStatus().equals(PresenceBasicStatus.Open)) { + // Add presence to native contact + AsyncContactPresence asyncContactPresence = + new AsyncContactPresence(contact, value); + asyncContactPresence.execute(); + } + } } } diff --git a/app/src/main/java/org/linphone/contacts/LinphoneContact.java b/app/src/main/java/org/linphone/contacts/LinphoneContact.java index 366028174..86a532487 100644 --- a/app/src/main/java/org/linphone/contacts/LinphoneContact.java +++ b/app/src/main/java/org/linphone/contacts/LinphoneContact.java @@ -618,34 +618,17 @@ public class LinphoneContact extends AndroidContact } } - public synchronized void updateNativeContactWithPresenceInfo() { - Log.d("[Contact] Trying to update native contact with presence information"); + public synchronized void addPresenceInfoToNativeContact(String value) { + Log.d( + "[Contact] Trying to update native contact with presence information for phone number ", + value); // Creation of the raw contact with the presence information (tablet) createRawLinphoneContactFromExistingAndroidContactIfNeeded(); - for (LinphoneNumberOrAddress noa : getNumbersOrAddresses()) { - if (noa.isSIPAddress()) { - // We are only interested in SIP addresses - continue; - } - String value = noa.getValue(); - if (value == null || value.isEmpty()) { - return; - } - - // Test presence of the value - PresenceModel pm = getFriend().getPresenceModelForUriOrTel(value); - // If presence is not null - if (pm != null - && pm.getBasicStatus() != null - && pm.getBasicStatus().equals(PresenceBasicStatus.Open)) { - Log.d("[Contact] Found presence information for phone number " + value); - if (!isLinphoneAddressMimeEntryAlreadyExisting(value)) { - // Do the action on the contact only once if it has not been done yet - updateNativeContactWithPresenceInfo(value); - } - } + if (!isLinphoneAddressMimeEntryAlreadyExisting(value)) { + // Do the action on the contact only once if it has not been done yet + updateNativeContactWithPresenceInfo(value); } saveChangesCommited(); }