diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java index 8d208787b..a3a70e1c5 100644 --- a/src/org/linphone/ContactsListFragment.java +++ b/src/org/linphone/ContactsListFragment.java @@ -275,8 +275,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O private void removeContacts(){ int size = contactsList.getAdapter().getCount(); - for(int i=0; i= 0; i--) { + if (contactsList.isItemChecked(i)) { LinphoneContact contact = (LinphoneContact) contactsList.getAdapter().getItem(i); contact.delete(); } @@ -412,6 +412,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O } public Object getItem(int position) { + if (position >= getCount()) return null; return contacts.get(position); } diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index 0f665f99c..83e657d5b 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -156,35 +156,17 @@ public class ContactsManager extends ContentObserver { } return null; } + + public synchronized void removeContact(LinphoneContact linphoneContact) { + contacts.remove(linphoneContact); + } public synchronized void setContacts(List c) { contacts = c; } public synchronized void fetchContacts() { - contacts = new ArrayList(); - - for (LinphoneFriend friend : LinphoneManager.getLc().getFriendList()) { - LinphoneContact contact = new LinphoneContact(); - LinphoneAddress addr = friend.getAddress(); - contact.setFullName(addr.getDisplayName()); - contact.addNumberOrAddress(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true)); - contacts.add(contact); - } - - if (mAccount == null || !hasContactAccess) return; - - Cursor c = Compatibility.getContactsCursor(contentResolver, null); - if (c != null) { - while (c.moveToNext()) { - String id = c.getString(c.getColumnIndex(Data.CONTACT_ID)); - LinphoneContact contact = new LinphoneContact(); - contact.setAndroidId(id); - contact.refresh(); - contacts.add(contact); - } - c.close(); - } + setContacts(fetchContactsAsync()); } public List fetchContactsAsync() { diff --git a/src/org/linphone/LinphoneContact.java b/src/org/linphone/LinphoneContact.java index cfe54e739..ce6a49aaa 100644 --- a/src/org/linphone/LinphoneContact.java +++ b/src/org/linphone/LinphoneContact.java @@ -25,7 +25,9 @@ import java.util.List; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCoreFactory; import org.linphone.core.LinphoneFriend; +import org.linphone.mediastream.Log; +import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentUris; import android.database.Cursor; @@ -123,23 +125,19 @@ public class LinphoneContact implements Serializable { public void delete() { if (isAndroidContact()) { - // TODO - /*String select = ContactsContract.Data.CONTACT_ID + " = ?"; - String[] args = new String[] { contact.getID() }; + String select = ContactsContract.Data.CONTACT_ID + " = ?"; + String[] args = new String[] { getAndroidId() }; ArrayList ops = new ArrayList(); - ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI) - .withSelection(select, args) - .build() - ); + ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).withSelection(select, args).build()); + ContentResolver cr = ContactsManager.getInstance().getContentResolver(); try { - getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); - ContactsManager.getInstance().removeAllFriends(contact); + cr.applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { - Log.w(e.getMessage() + ":" + e.getStackTrace()); + Log.e(e); } - ContactsManager.getInstance().removeContactFromLists(getActivity().getContentResolver(), contact);*/ + ContactsManager.getInstance().removeContact(this); } if (friend != null) { LinphoneManager.getLcIfManagerNotDestroyedOrNull().removeFriend(friend);