🐛 Fixed new contact SIP adress being duplicated

This commit is contained in:
Sylvain Berfini 2018-09-12 11:18:37 +02:00
parent d8aecc5990
commit 339d58e51f
6 changed files with 109 additions and 109 deletions

View file

@ -43,6 +43,8 @@ import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core; import org.linphone.core.Core;
import org.linphone.core.Factory; import org.linphone.core.Factory;
import org.linphone.core.PresenceBasicStatus;
import org.linphone.core.PresenceModel;
import org.linphone.core.ProxyConfig; import org.linphone.core.ProxyConfig;
import org.linphone.fragments.FragmentsAvailable; import org.linphone.fragments.FragmentsAvailable;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
@ -205,11 +207,15 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
} }
} }
String contactAddress = contact.getPresenceModelForUriOrTel(noa.getValue()); v.findViewById(R.id.friendLinphone).setVisibility(View.GONE);
if (contactAddress != null) { if (contact.getFriend() != null) {
PresenceModel pm = contact.getFriend().getPresenceModelForUriOrTel(noa.getValue());
if (pm != null && pm.getBasicStatus().equals(PresenceBasicStatus.Open)) {
v.findViewById(R.id.friendLinphone).setVisibility(View.VISIBLE); v.findViewById(R.id.friendLinphone).setVisibility(View.VISIBLE);
} }
}
String contactAddress = contact.getPresenceModelForUriOrTel(noa.getValue());
if (!displayChatAddressOnly) { if (!displayChatAddressOnly) {
v.findViewById(R.id.contact_call).setOnClickListener(dialListener); v.findViewById(R.id.contact_call).setOnClickListener(dialListener);
if (contactAddress != null) { if (contactAddress != null) {

View file

@ -109,20 +109,20 @@ public class ContactEditorFragment extends Fragment {
view = inflater.inflate(R.layout.contact_edit, container, false); view = inflater.inflate(R.layout.contact_edit, container, false);
phoneNumbersSection = (LinearLayout) view.findViewById(R.id.phone_numbers); phoneNumbersSection = view.findViewById(R.id.phone_numbers);
if (getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) || !ContactsManager.getInstance().hasContactsAccess()) { if (getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) || !ContactsManager.getInstance().hasContactsAccess()) {
//Currently linphone friends don't support phone numbers, so hide them //Currently linphone friends don't support phone numbers, so hide them
phoneNumbersSection.setVisibility(View.GONE); phoneNumbersSection.setVisibility(View.GONE);
} }
sipAddressesSection = (LinearLayout) view.findViewById(R.id.sip_addresses); sipAddressesSection = view.findViewById(R.id.sip_addresses);
if (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor)) { if (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor)) {
sipAddressesSection.setVisibility(View.GONE); sipAddressesSection.setVisibility(View.GONE);
} }
deleteContact = (ImageView) view.findViewById(R.id.delete_contact); deleteContact = view.findViewById(R.id.delete_contact);
cancel = (ImageView) view.findViewById(R.id.cancel); cancel = view.findViewById(R.id.cancel);
cancel.setOnClickListener(new OnClickListener() { cancel.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -130,7 +130,7 @@ public class ContactEditorFragment extends Fragment {
} }
}); });
ok = (ImageView) view.findViewById(R.id.ok); ok = view.findViewById(R.id.ok);
ok.setOnClickListener(new OnClickListener() { ok.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -164,7 +164,7 @@ public class ContactEditorFragment extends Fragment {
} }
}); });
lastName = (EditText) view.findViewById(R.id.contactLastName); lastName = view.findViewById(R.id.contactLastName);
// Hack to display keyboard when touching focused edittext on Nexus One // Hack to display keyboard when touching focused edittext on Nexus One
if (Version.sdkStrictlyBelow(Version.API11_HONEYCOMB_30)) { if (Version.sdkStrictlyBelow(Version.API11_HONEYCOMB_30)) {
lastName.setOnClickListener(new OnClickListener() { lastName.setOnClickListener(new OnClickListener() {
@ -194,7 +194,7 @@ public class ContactEditorFragment extends Fragment {
} }
}); });
firstName = (EditText) view.findViewById(R.id.contactFirstName); firstName = view.findViewById(R.id.contactFirstName);
firstName.addTextChangedListener(new TextWatcher() { firstName.addTextChangedListener(new TextWatcher() {
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
@ -215,7 +215,7 @@ public class ContactEditorFragment extends Fragment {
}); });
organization = (EditText) view.findViewById(R.id.contactOrganization); organization = view.findViewById(R.id.contactOrganization);
boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization); boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization);
if (!isOrgVisible) { if (!isOrgVisible) {
organization.setVisibility(View.GONE); organization.setVisibility(View.GONE);
@ -241,8 +241,8 @@ public class ContactEditorFragment extends Fragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text)); final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = (Button) dialog.findViewById(R.id.delete_button); Button delete = dialog.findViewById(R.id.delete_button);
Button cancel = (Button) dialog.findViewById(R.id.cancel); Button cancel = dialog.findViewById(R.id.cancel);
delete.setOnClickListener(new OnClickListener() { delete.setOnClickListener(new OnClickListener() {
@Override @Override
@ -267,7 +267,7 @@ public class ContactEditorFragment extends Fragment {
deleteContact.setVisibility(View.INVISIBLE); deleteContact.setVisibility(View.INVISIBLE);
} }
contactPicture = (ImageView) view.findViewById(R.id.contact_picture); contactPicture = view.findViewById(R.id.contact_picture);
if (contact != null) { if (contact != null) {
LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
} else { } else {
@ -286,7 +286,7 @@ public class ContactEditorFragment extends Fragment {
sipAddresses = initSipAddressFields(contact); sipAddresses = initSipAddressFields(contact);
numbers = initNumbersFields(contact); numbers = initNumbersFields(contact);
addSipAddress = (ImageView) view.findViewById(R.id.add_address_field); addSipAddress = view.findViewById(R.id.add_address_field);
if (getResources().getBoolean(R.bool.allow_only_one_sip_address)) { if (getResources().getBoolean(R.bool.allow_only_one_sip_address)) {
addSipAddress.setVisibility(View.GONE); addSipAddress.setVisibility(View.GONE);
} }
@ -297,7 +297,7 @@ public class ContactEditorFragment extends Fragment {
} }
}); });
addNumber = (ImageView) view.findViewById(R.id.add_number_field); addNumber = view.findViewById(R.id.add_number_field);
if (getResources().getBoolean(R.bool.allow_only_one_phone_number)) { if (getResources().getBoolean(R.bool.allow_only_one_phone_number)) {
addNumber.setVisibility(View.GONE); addNumber.setVisibility(View.GONE);
} }
@ -426,7 +426,7 @@ public class ContactEditorFragment extends Fragment {
} }
private LinearLayout initNumbersFields(final LinphoneContact contact) { private LinearLayout initNumbersFields(final LinphoneContact contact) {
LinearLayout controls = (LinearLayout) view.findViewById(R.id.controls_numbers); LinearLayout controls = view.findViewById(R.id.controls_numbers);
controls.removeAllViews(); controls.removeAllViews();
if (contact != null) { if (contact != null) {
@ -449,7 +449,7 @@ public class ContactEditorFragment extends Fragment {
} }
if (newDisplayName != null) { if (newDisplayName != null) {
EditText lastNameEditText = (EditText) view.findViewById(R.id.contactLastName); EditText lastNameEditText = view.findViewById(R.id.contactLastName);
if (view != null) if (view != null)
lastNameEditText.setText(newDisplayName); lastNameEditText.setText(newDisplayName);
} }
@ -462,7 +462,7 @@ public class ContactEditorFragment extends Fragment {
} }
private LinearLayout initSipAddressFields(final LinphoneContact contact) { private LinearLayout initSipAddressFields(final LinphoneContact contact) {
LinearLayout controls = (LinearLayout) view.findViewById(R.id.controls_sip_address); LinearLayout controls = view.findViewById(R.id.controls_sip_address);
controls.removeAllViews(); controls.removeAllViews();
if (contact != null) { if (contact != null) {
@ -526,7 +526,7 @@ public class ContactEditorFragment extends Fragment {
final View view = inflater.inflate(R.layout.contact_edit_row, null); final View view = inflater.inflate(R.layout.contact_edit_row, null);
final EditText noa = (EditText) view.findViewById(R.id.numoraddr); final EditText noa = view.findViewById(R.id.numoraddr);
if (!isSIP) { if (!isSIP) {
noa.setInputType(InputType.TYPE_CLASS_PHONE); noa.setInputType(InputType.TYPE_CLASS_PHONE);
} }
@ -549,7 +549,7 @@ public class ContactEditorFragment extends Fragment {
nounoa.setValue(noa.getText().toString()); nounoa.setValue(noa.getText().toString());
} }
ImageView delete = (ImageView) view.findViewById(R.id.delete_field); ImageView delete = view.findViewById(R.id.delete_field);
if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSIP) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSIP)) { if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSIP) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSIP)) {
delete.setVisibility(View.GONE); delete.setVisibility(View.GONE);
} }
@ -572,7 +572,7 @@ public class ContactEditorFragment extends Fragment {
final View view = inflater.inflate(R.layout.contact_edit_row, null); final View view = inflater.inflate(R.layout.contact_edit_row, null);
final LinphoneNumberOrAddress nounoa = new LinphoneNumberOrAddress(null, isSip); final LinphoneNumberOrAddress nounoa = new LinphoneNumberOrAddress(null, isSip);
final EditText noa = (EditText) view.findViewById(R.id.numoraddr); final EditText noa = view.findViewById(R.id.numoraddr);
numbersAndAddresses.add(nounoa); numbersAndAddresses.add(nounoa);
noa.setHint(isSip ? getString(R.string.sip_address) : getString(R.string.phone_number)); noa.setHint(isSip ? getString(R.string.sip_address) : getString(R.string.phone_number));
if (!isSip) { if (!isSip) {
@ -594,7 +594,7 @@ public class ContactEditorFragment extends Fragment {
} }
}); });
final ImageView delete = (ImageView) view.findViewById(R.id.delete_field); final ImageView delete = view.findViewById(R.id.delete_field);
if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSip) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSip)) { if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSip) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSip)) {
delete.setVisibility(View.GONE); delete.setVisibility(View.GONE);
} }

View file

@ -146,7 +146,6 @@ public class ContactsListAdapter extends SelectableAdapter<ContactsListAdapter.V
holder.delete.setVisibility(isEditionEnabled() ? View.VISIBLE : View.INVISIBLE); holder.delete.setVisibility(isEditionEnabled() ? View.VISIBLE : View.INVISIBLE);
holder.delete.setChecked(isSelected(position)); holder.delete.setChecked(isSelected(position));
} }
@Override @Override

View file

@ -342,14 +342,9 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene
public void onContactsUpdated() { public void onContactsUpdated() {
if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != FragmentsAvailable.CONTACTS_LIST) if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != FragmentsAvailable.CONTACTS_LIST)
return; return;
ContactsListAdapter adapter = (ContactsListAdapter) contactsList.getAdapter(); if (mContactAdapter != null) {
if (adapter != null) { mContactAdapter.updateDataSet(onlyDisplayLinphoneContacts ? ContactsManager.getInstance().getSIPContacts() : ContactsManager.getInstance().getContacts());
if (onlyDisplayLinphoneContacts) { mContactAdapter.notifyDataSetChanged();
adapter.updateDataSet(ContactsManager.getInstance().getSIPContacts());
} else {
adapter.updateDataSet(ContactsManager.getInstance().getContacts());
}
contactsFetchInProgress.setVisibility(View.GONE);
} }
} }

View file

@ -97,13 +97,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
magicSearch = LinphoneManager.getLcIfManagerNotDestroyedOrNull().createMagicSearch(); magicSearch = LinphoneManager.getLcIfManagerNotDestroyedOrNull().createMagicSearch();
} }
Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (lc != null) {
for (FriendList list : lc.getFriendsLists()) {
list.setListener(this);
}
}
} }
public void destroy() { public void destroy() {
@ -267,11 +260,14 @@ public class ContactsManager extends ContentObserver implements FriendListListen
return null; return null;
} }
public synchronized void refreshSipContact(Friend lf) { public synchronized boolean refreshSipContact(Friend lf) {
LinphoneContact contact = (LinphoneContact) lf.getUserData(); LinphoneContact contact = (LinphoneContact) lf.getUserData();
if (contact != null && !mSipContacts.contains(contact)) { if (contact != null && !mSipContacts.contains(contact)) {
mSipContacts.add(contact); mSipContacts.add(contact);
Collections.sort(mSipContacts);
return true;
} }
return false;
} }
public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) { public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) {
@ -352,14 +348,14 @@ public class ContactsManager extends ContentObserver implements FriendListListen
@Override @Override
public void onPresenceReceived(FriendList list, Friend[] friends) { public void onPresenceReceived(FriendList list, Friend[] friends) {
for (Friend lf : friends) { for (Friend lf : friends) {
ContactsManager.getInstance().refreshSipContact(lf); boolean newContact = ContactsManager.getInstance().refreshSipContact(lf);
} if (newContact) {
Collections.sort(mSipContacts);
for (ContactsUpdatedListener listener : contactsUpdatedListeners) { for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
listener.onContactsUpdated(); listener.onContactsUpdated();
} }
} }
}
}
public void fetchContactsSync() { public void fetchContactsSync() {
mActivity.getLoaderManager().initLoader(CONTACTS_LOADER, null, this); mActivity.getLoaderManager().initLoader(CONTACTS_LOADER, null, this);
@ -504,10 +500,14 @@ public class ContactsManager extends ContentObserver implements FriendListListen
setSipContacts(sipContacts); setSipContacts(sipContacts);
if (LinphonePreferences.instance() != null && LinphonePreferences.instance().isFriendlistsubscriptionEnabled()) { if (LinphonePreferences.instance() != null && LinphonePreferences.instance().isFriendlistsubscriptionEnabled()) {
if (mActivity.getString(R.string.rls_uri) != null) { String rls = mActivity.getString(R.string.rls_uri);
LinphoneManager.getLc().getFriendsLists()[0].setRlsUri(mActivity.getString(R.string.rls_uri)); for (FriendList list : LinphoneManager.getLc().getFriendsLists()) {
if (rls != null && rls.equals(list.getRlsAddress().asStringUriOnly())) {
list.setRlsUri(mActivity.getString(R.string.rls_uri));
}
list.setListener(this);
list.updateSubscriptions();
} }
LinphoneManager.getLc().getFriendsLists()[0].updateSubscriptions();
} }
long timeElapsed = (new Date()).getTime() - contactsTime.getTime(); long timeElapsed = (new Date()).getTime() - contactsTime.getTime();
@ -516,6 +516,10 @@ public class ContactsManager extends ContentObserver implements FriendListListen
TimeUnit.MILLISECONDS.toSeconds(timeElapsed) - TimeUnit.MILLISECONDS.toSeconds(timeElapsed) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeElapsed))); TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeElapsed)));
Log.i("[ContactsManager] For " + contacts.size() + " contacts: " + time + " elapsed since starting"); Log.i("[ContactsManager] For " + contacts.size() + " contacts: " + time + " elapsed since starting");
for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
listener.onContactsUpdated();
}
} }
@Override @Override

View file

@ -243,6 +243,14 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
public void removeNumberOrAddress(LinphoneNumberOrAddress noa) { public void removeNumberOrAddress(LinphoneNumberOrAddress noa) {
if (noa != null && noa.getOldValue() != null) { if (noa != null && noa.getOldValue() != null) {
if (isAndroidContact()) { if (isAndroidContact()) {
if (androidTagId != null && noa.isSIPAddress()) {
String select = ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.DATA1 + "=?";
String[] args = new String[]{androidTagId, noa.getOldValue()};
changesToCommit.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
.withSelection(select, args)
.build());
} else {
String select; String select;
if (noa.isSIPAddress()) { if (noa.isSIPAddress()) {
select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS + "=?"; select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS + "=?";
@ -251,14 +259,6 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
} }
String[] args = new String[]{getAndroidId(), noa.getOldValue()}; String[] args = new String[]{getAndroidId(), noa.getOldValue()};
changesToCommit.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
.withSelection(select, args)
.build());
if (androidTagId != null && noa.isSIPAddress()) {
select = ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.DATA1 + "=?";
args = new String[]{androidTagId, noa.getOldValue()};
changesToCommit.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI) changesToCommit.add(ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI)
.withSelection(select, args) .withSelection(select, args)
.build()); .build());
@ -289,6 +289,25 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
if (noa != null && noa.getValue() != null) { if (noa != null && noa.getValue() != null) {
if (isAndroidContact()) { if (isAndroidContact()) {
if (noa.getOldValue() == null) { if (noa.getOldValue() == null) {
if (noa.isSIPAddress() && LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) {
if (androidTagId != null) {
changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID, androidTagId)
.withValue(ContactsContract.Data.MIMETYPE, ContactsManager.getInstance().getString(R.string.sync_mimetype))
.withValue(ContactsContract.Data.DATA1, noa.getValue())
.withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, noa.getValue())
.build());
} else {
changesToCommit2.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsManager.getInstance().getString(R.string.sync_mimetype))
.withValue(ContactsContract.Data.DATA1, noa.getValue())
.withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, noa.getValue())
.build());
}
} else {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
if (noa.isSIPAddress()) { if (noa.isSIPAddress()) {
values.put(ContactsContract.Data.MIMETYPE, CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE); values.put(ContactsContract.Data.MIMETYPE, CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE);
@ -312,12 +331,12 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
.withValues(values) .withValues(values)
.build()); .build());
} }
}
} else {
if (noa.isSIPAddress() && LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) { if (noa.isSIPAddress() && LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) {
if (androidTagId != null) { if (androidTagId != null) {
changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) changesToCommit.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID, androidTagId) .withSelection(ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.DATA1 + "=? ", new String[]{androidTagId, noa.getOldValue()})
.withValue(ContactsContract.Data.MIMETYPE, ContactsManager.getInstance().getString(R.string.sync_mimetype))
.withValue(ContactsContract.Data.DATA1, noa.getValue()) .withValue(ContactsContract.Data.DATA1, noa.getValue())
.withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name)) .withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, noa.getValue()) .withValue(ContactsContract.Data.DATA3, noa.getValue())
@ -331,7 +350,6 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
.withValue(ContactsContract.Data.DATA3, noa.getValue()) .withValue(ContactsContract.Data.DATA3, noa.getValue())
.build()); .build());
} }
}
} else { } else {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
String select; String select;
@ -350,24 +368,6 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
.withSelection(select, args) .withSelection(select, args)
.withValues(values) .withValues(values)
.build()); .build());
if (noa.isSIPAddress() && LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) {
if (androidTagId != null) {
changesToCommit.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.DATA1 + "=? ", new String[]{androidTagId, noa.getOldValue()})
.withValue(ContactsContract.Data.DATA1, noa.getValue())
.withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, noa.getValue())
.build());
} else {
changesToCommit2.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsManager.getInstance().getString(R.string.sync_mimetype))
.withValue(ContactsContract.Data.DATA1, noa.getValue())
.withValue(ContactsContract.Data.DATA2, ContactsManager.getInstance().getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, noa.getValue())
.build());
}
} }
} }
} }
@ -483,10 +483,6 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
public void delete() { public void delete() {
if (isAndroidContact()) { if (isAndroidContact()) {
String select = ContactsContract.Data.CONTACT_ID + " = ?";
String[] args = new String[]{getAndroidId()};
changesToCommit.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).withSelection(select, args).build());
save();
ContactsManager.getInstance().delete(getAndroidId()); ContactsManager.getInstance().delete(getAndroidId());
} }
if (isFriend()) { if (isFriend()) {