From 9b8574caadd70093720e50be4da1039a080f9702 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 12 Sep 2018 15:49:48 +0200 Subject: [PATCH] Fixed duplicated phone numbers in contact details --- .../linphone/contacts/ContactsManager.java | 4 +- .../linphone/contacts/LinphoneContact.java | 45 ++++++++++--------- .../contacts/LinphoneNumberOrAddress.java | 11 +++++ 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index eed5ac736..95ae230d7 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -377,6 +377,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen "data1", //Company, Phone or SIP Address "data2", //ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME "data3", //ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME + "data4", //Normalized phone number }; private static final String SELECTION = ContactsContract.Data.DISPLAY_NAME_PRIMARY + " IS NOT NULL AND (" @@ -446,6 +447,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen String data1 = c.getString(c.getColumnIndex("data1")); String data2 = c.getString(c.getColumnIndex("data2")); String data3 = c.getString(c.getColumnIndex("data3")); + String data4 = c.getString(c.getColumnIndex("data4")); nativeIds.add(id); boolean created = false; @@ -459,7 +461,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen } if (ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals(mime)) { - contact.addNumberOrAddress(new LinphoneNumberOrAddress(data1, false)); + contact.addNumberOrAddress(new LinphoneNumberOrAddress(data1, data4)); } else if (ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE.equals(mime) || getInstance().getString(R.string.sync_mimetype).equals(mime)) { contact.addNumberOrAddress(new LinphoneNumberOrAddress(data1, true)); if (!sipContacts.contains(contact)) { diff --git a/src/android/org/linphone/contacts/LinphoneContact.java b/src/android/org/linphone/contacts/LinphoneContact.java index 353ec689f..4ebe9fa87 100644 --- a/src/android/org/linphone/contacts/LinphoneContact.java +++ b/src/android/org/linphone/contacts/LinphoneContact.java @@ -235,8 +235,20 @@ public class LinphoneContact implements Serializable, Comparable getNumbersOrAddresses() { @@ -680,32 +692,25 @@ public class LinphoneContact implements Serializable, Comparable 0) { - boolean found = false; - boolean isSIP = false; if (mime.equals(ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE) || mime.equals(ContactsManager.getInstance().getString(R.string.sync_mimetype))) { - found = true; - isSIP = true; - } else if (mime.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) { - found = true; - } - - if (found) { - String number = c.getString(c.getColumnIndex("data1")); // PHONE_NUMBER == SIP_ADDRESS == "data1"... - if (number != null && number.length() > 0) { - if (isSIP && !number.startsWith("sip:")) { - number = "sip:" + number; - } - if (isSIP && !number.contains("@")) { - number = number + "@" + ContactsManager.getInstance().getString(R.string.default_domain); - } - result.add(new LinphoneNumberOrAddress(number, isSIP)); + String number = c.getString(c.getColumnIndex("data1")); // SIP_ADDRESS + if (!number.startsWith("sip:")) { + number = "sip:" + number; } + if (!number.contains("@")) { + number = number + "@" + ContactsManager.getInstance().getString(R.string.default_domain); + } + result.add(new LinphoneNumberOrAddress(number, true)); + } else if (mime.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) { + String number = c.getString(c.getColumnIndex("data1")); // PHONE_NUMBER + String normalized_number = c.getString(c.getColumnIndex("data4")); // NORMALIZED_PHONE_NUMBER + result.add(new LinphoneNumberOrAddress(number, normalized_number)); } } } diff --git a/src/android/org/linphone/contacts/LinphoneNumberOrAddress.java b/src/android/org/linphone/contacts/LinphoneNumberOrAddress.java index 2de664e16..2d6215aad 100644 --- a/src/android/org/linphone/contacts/LinphoneNumberOrAddress.java +++ b/src/android/org/linphone/contacts/LinphoneNumberOrAddress.java @@ -26,11 +26,20 @@ public class LinphoneNumberOrAddress implements Serializable, Comparable