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);
     }
 }