[Issue 2165144] Fixing managed delete dialogs in ContactListActivity
Since these dialogs are managed, they are not actually destroyed after the first
use, but reused. These dialogs were initialized with the URI of the first
contact we were deleting. On subsequent calls, they were reused and tried to
delete the same contact.
Change-Id: I517b266a96fe72268c8dfbc7fe3f84fa366d7a23
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 4125d7a..c4ef60f 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -395,14 +395,8 @@
}
private class DeleteClickListener implements DialogInterface.OnClickListener {
- private Uri mUri;
-
- public DeleteClickListener(Uri uri) {
- mUri = uri;
- }
-
public void onClick(DialogInterface dialog, int which) {
- getContentResolver().delete(mUri, null, null);
+ getContentResolver().delete(mSelectedContactUri, null, null);
}
}
@@ -880,7 +874,7 @@
.setMessage(R.string.deleteConfirmation)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok,
- new DeleteClickListener(mSelectedContactUri)).create();
+ new DeleteClickListener()).create();
}
case R.id.dialog_readonly_contact_hide_confirmation: {
return new AlertDialog.Builder(this)
@@ -889,7 +883,7 @@
.setMessage(R.string.readOnlyContactWarning)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok,
- new DeleteClickListener(mSelectedContactUri)).create();
+ new DeleteClickListener()).create();
}
case R.id.dialog_readonly_contact_delete_confirmation: {
return new AlertDialog.Builder(this)
@@ -898,7 +892,7 @@
.setMessage(R.string.readOnlyContactDeleteConfirmation)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok,
- new DeleteClickListener(mSelectedContactUri)).create();
+ new DeleteClickListener()).create();
}
case R.id.dialog_multiple_contact_delete_confirmation: {
return new AlertDialog.Builder(this)
@@ -907,7 +901,7 @@
.setMessage(R.string.multipleContactDeleteConfirmation)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok,
- new DeleteClickListener(mSelectedContactUri)).create();
+ new DeleteClickListener()).create();
}
}
return super.onCreateDialog(id);
@@ -1148,39 +1142,39 @@
*/
protected void doContactDelete() {
mReadOnlySourcesCnt = 0;
- mWritableSourcesCnt = 0;
+ mWritableSourcesCnt = 0;
mWritableRawContactIds.clear();
- if (mSelectedContactUri != null) {
- Cursor c = getContentResolver().query(RawContacts.CONTENT_URI,
- RAW_CONTACTS_PROJECTION, RawContacts.CONTACT_ID + "="
- + ContentUris.parseId(mSelectedContactUri), null, null);
+ if (mSelectedContactUri != null) {
+ Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, RAW_CONTACTS_PROJECTION,
+ RawContacts.CONTACT_ID + "=" + ContentUris.parseId(mSelectedContactUri), null,
+ null);
Sources sources = Sources.getInstance(ContactsListActivity.this);
if (c != null) {
while (c.moveToNext()) {
final String accountType = c.getString(2);
- final long rawContactId = c.getLong(0);
+ final long rawContactId = c.getLong(0);
ContactsSource contactsSource = sources.getInflatedSource(accountType,
ContactsSource.LEVEL_SUMMARY);
if (contactsSource != null && contactsSource.readOnly) {
mReadOnlySourcesCnt += 1;
} else {
mWritableSourcesCnt += 1;
- mWritableRawContactIds.add(rawContactId);
- }
- }
+ mWritableRawContactIds.add(rawContactId);
+ }
+ }
}
c.close();
- if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt > 0) {
- showDialog(R.id.dialog_readonly_contact_delete_confirmation);
- } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
- showDialog(R.id.dialog_readonly_contact_hide_confirmation);
- } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
- showDialog(R.id.dialog_multiple_contact_delete_confirmation);
+ if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt > 0) {
+ showDialog(R.id.dialog_readonly_contact_delete_confirmation);
+ } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
+ showDialog(R.id.dialog_readonly_contact_hide_confirmation);
+ } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
+ showDialog(R.id.dialog_multiple_contact_delete_confirmation);
} else {
- showDialog(R.id.dialog_delete_contact_confirmation);
- }
- }
+ showDialog(R.id.dialog_delete_contact_confirmation);
+ }
+ }
}
@Override