Close contact editor after deleting contact

Bug: 3396132
Change-Id: I1818446b8ecb6ef71d7c763d3e7ea3dc4c820b02
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4c2411c..e888bc0 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -498,7 +498,7 @@
 
         @Override
         public void onDeleteContactAction(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri, false);
         }
 
         @Override
@@ -545,7 +545,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactBrowserActivity.this, contactUri, false);
         }
 
         @Override
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index ca26280..56e8353 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -94,7 +94,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactDetailActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactDetailActivity.this, contactUri, true);
         }
 
         @Override
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 3452edc..9e44fb9 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -200,7 +200,7 @@
 
         @Override
         public void onDeleteRequested(Uri contactUri) {
-            ContactDeletionInteraction.start(ContactEditorActivity.this, contactUri);
+            ContactDeletionInteraction.start(ContactEditorActivity.this, contactUri, true);
         }
 
         @Override
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index bc78e87..9a5074e 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -50,6 +50,7 @@
 
     private static final String KEY_ACTIVE = "active";
     private static final String KEY_CONTACT_URI = "contactUri";
+    private static final String KEY_FINISH_WHEN_DONE = "finishWhenDone";
     public static final String ARG_CONTACT_URI = "contactUri";
 
     private static final String[] ENTITY_PROJECTION = new String[] {
@@ -66,6 +67,7 @@
 
     private boolean mActive;
     private Uri mContactUri;
+    private boolean mFinishActivityWhenDone;
     private Context mContext;
 
     private AlertDialog mDialog;
@@ -73,16 +75,19 @@
     // Visible for testing
     int mMessageId;
 
-    public static ContactDeletionInteraction start(Activity activity, Uri contactUri) {
+    public static ContactDeletionInteraction start(
+            Activity activity, Uri contactUri, boolean finishActivityWhenDone) {
         FragmentManager fragmentManager = activity.getFragmentManager();
         ContactDeletionInteraction fragment =
                 (ContactDeletionInteraction) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
         if (fragment == null) {
             fragment = new ContactDeletionInteraction();
             fragment.setContactUri(contactUri);
+            fragment.setFinishActivityWhenDone(finishActivityWhenDone);
             fragmentManager.beginTransaction().add(fragment, FRAGMENT_TAG).commit();
         } else {
             fragment.setContactUri(contactUri);
+            fragment.setFinishActivityWhenDone(finishActivityWhenDone);
         }
         return fragment;
     }
@@ -103,6 +108,11 @@
         }
     }
 
+    private void setFinishActivityWhenDone(boolean finishActivityWhenDone) {
+        this.mFinishActivityWhenDone = finishActivityWhenDone;
+
+    }
+
     /* Visible for testing */
     boolean isStarted() {
         return isAdded();
@@ -211,6 +221,7 @@
         super.onSaveInstanceState(outState);
         outState.putBoolean(KEY_ACTIVE, mActive);
         outState.putParcelable(KEY_CONTACT_URI, mContactUri);
+        outState.putBoolean(KEY_FINISH_WHEN_DONE, mFinishActivityWhenDone);
     }
 
     @Override
@@ -219,10 +230,14 @@
         if (savedInstanceState != null) {
             mActive = savedInstanceState.getBoolean(KEY_ACTIVE);
             mContactUri = savedInstanceState.getParcelable(KEY_CONTACT_URI);
+            mFinishActivityWhenDone = savedInstanceState.getBoolean(KEY_FINISH_WHEN_DONE);
         }
     }
 
     protected void doDeleteContact(Uri contactUri) {
         mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
+        if (isAdded() && mFinishActivityWhenDone) {
+            getActivity().finish();
+        }
     }
 }
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index 4514e1e..1db0f4c 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -132,7 +132,7 @@
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mFragment = ContactDeletionInteraction.start(activity, CONTACT_URI);
+                mFragment = ContactDeletionInteraction.start(activity, CONTACT_URI, false);
             }
         });