Implement Delete on Contact-Detail; re-use the code from the ContactBrowser
Change-Id: I5b567174b45499c4871db454882bd275b482a014
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 0bf6c04..62530fd 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -475,22 +475,26 @@
}
private class DetailFragmentListener implements ContactDetailFragment.Listener {
+ @Override
public void onContactNotFound() {
- Toast.makeText(ContactBrowserActivity.this, "onContactNotFound", Toast.LENGTH_LONG).show();
+ setupContactDetailFragment(null);
}
+ @Override
public void onEditRequested(Uri contactLookupUri) {
setupContactEditorFragment();
mEditorFragment.load(Intent.ACTION_EDIT, contactLookupUri, Contacts.CONTENT_ITEM_TYPE,
new Bundle());
}
+ @Override
public void onItemClicked(Intent intent) {
startActivity(intent);
}
- public void onDialogRequested(int id, Bundle bundle) {
- showDialog(id, bundle);
+ @Override
+ public void onDeleteRequested(Uri contactLookupUri) {
+ getContactDeletionInteraction().deleteContact(contactLookupUri);
}
}
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index 5894f77..4fca6d3 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -18,6 +18,7 @@
import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
+import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.views.detail.ContactDetailFragment;
import android.app.Activity;
@@ -33,6 +34,7 @@
private static final String TAG = "ContactDetailActivity";
private ContactDetailFragment mFragment;
+ private ContactDeletionInteraction mContactDeletionInteraction;
@Override
public void onCreate(Bundle savedState) {
@@ -49,6 +51,9 @@
@Override
protected Dialog onCreateDialog(int id, Bundle args) {
+ final Dialog deletionDialog = getContactDeletionInteraction().onCreateDialog(id, args);
+ if (deletionDialog != null) return deletionDialog;
+
// ask the Fragment whether it knows about the dialog
final Dialog fragmentResult = mFragment.onCreateDialog(id, args);
if (fragmentResult != null) return fragmentResult;
@@ -59,6 +64,13 @@
}
@Override
+ protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
+ if (getContactDeletionInteraction().onPrepareDialog(id, dialog, args)) {
+ return;
+ }
+ }
+
+ @Override
public boolean onContextItemSelected(MenuItem item) {
// TODO: This is too hardwired.
if (mFragment.onContextItemSelected(item)) return true;
@@ -84,22 +96,34 @@
return super.onKeyDown(keyCode, event);
}
+ private ContactDeletionInteraction getContactDeletionInteraction() {
+ if (mContactDeletionInteraction == null) {
+ mContactDeletionInteraction = new ContactDeletionInteraction();
+ mContactDeletionInteraction.attachToActivity(this);
+ }
+ return mContactDeletionInteraction;
+ }
+
private final ContactDetailFragment.Listener mFragmentListener =
new ContactDetailFragment.Listener() {
+ @Override
public void onContactNotFound() {
finish();
}
- public void onEditRequested(Uri rawContactUri) {
- startActivity(new Intent(Intent.ACTION_EDIT, rawContactUri));
+ @Override
+ public void onEditRequested(Uri lookupUri) {
+ startActivity(new Intent(Intent.ACTION_EDIT, lookupUri));
}
+ @Override
public void onItemClicked(Intent intent) {
startActivity(intent);
}
- public void onDialogRequested(int id, Bundle bundle) {
- showDialog(id, bundle);
+ @Override
+ public void onDeleteRequested(Uri lookupUri) {
+ getContactDeletionInteraction().deleteContact(lookupUri);
}
};
}
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index 2f5a290..5746efc 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -34,6 +34,7 @@
import android.provider.ContactsContract.RawContacts;
import android.util.Log;
+// TODO: This should respect the lookup element. The Id might by now refer to a different contact
/**
* An interaction invoked to delete a contact.
*/
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index fe203a2..59a0076 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -112,8 +112,6 @@
private ViewAdapter mAdapter;
private Uri mPrimaryPhoneUri = null;
- private int mReadOnlySourcesCnt;
- private int mWritableSourcesCnt;
private boolean mAllRestricted;
private final ArrayList<Long> mWritableRawContactIds = new ArrayList<Long>();
private int mNumPhoneNumbers = 0;
@@ -257,8 +255,6 @@
mRawContactIds.clear();
- mReadOnlySourcesCnt = 0;
- mWritableSourcesCnt = 0;
mAllRestricted = true;
mPrimaryPhoneUri = null;
mNumPhoneNumbers = 0;
@@ -287,10 +283,7 @@
}
ContactsSource contactsSource = sources.getInflatedSource(accountType,
ContactsSource.LEVEL_SUMMARY);
- if (contactsSource != null && contactsSource.readOnly) {
- mReadOnlySourcesCnt += 1;
- } else {
- mWritableSourcesCnt += 1;
+ if (contactsSource == null || !contactsSource.readOnly) {
mWritableRawContactIds.add(rawContactId);
}
@@ -808,7 +801,7 @@
break;
}
case R.id.menu_delete: {
- showDeleteConfirmationDialog();
+ if (mListener != null) mListener.onDeleteRequested(mLookupUri);
return true;
}
case R.id.menu_options: {
@@ -842,20 +835,6 @@
return false;
}
- private void showDeleteConfirmationDialog() {
- final int id;
- if (mReadOnlySourcesCnt > 0 & mWritableSourcesCnt > 0) {
- id = R.id.detail_dialog_confirm_readonly_delete;
- } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
- id = R.id.detail_dialog_confirm_readonly_hide;
- } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
- id = R.id.detail_dialog_confirm_multiple_delete;
- } else {
- id = R.id.detail_dialog_confirm_delete;
- }
- if (mListener != null) mListener.onDialogRequested(id, null);
- }
-
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
@@ -1028,7 +1007,7 @@
}
case KeyEvent.KEYCODE_DEL: {
- showDeleteConfirmationDialog();
+ if (mListener != null) mListener.onDeleteRequested(mLookupUri);
return true;
}
}
@@ -1073,7 +1052,8 @@
public static interface Listener {
/**
- * Contact was not found, so somehow close this fragment.
+ * Contact was not found, so somehow close this fragment. This is raised after a contact
+ * is removed via Menu/Delete
*/
public void onContactNotFound();
@@ -1088,8 +1068,8 @@
public void onItemClicked(Intent intent);
/**
- * Show a dialog using the globally unique id
+ * User decided to delete the contact
*/
- public void onDialogRequested(int id, Bundle bundle);
+ public void onDeleteRequested(Uri lookupUri);
}
}