Moving contact deletion to the background thread

Change-Id: Idc6ed13ec94e7a9dcbd2254e388e3438d03034ca
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index ca77df3..8d33670 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -19,6 +19,7 @@
 import com.android.contacts.R;
 import com.android.contacts.model.AccountType;
 import com.android.contacts.model.AccountTypes;
+import com.android.contacts.views.ContactSaveService;
 import com.google.android.collect.Sets;
 
 import android.app.Activity;
@@ -222,7 +223,7 @@
     }
 
     protected void doDeleteContact(Uri contactUri) {
-        getActivity().getContentResolver().delete(contactUri, null, null);
+        mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
     }
 
     /* Visible for testing */
diff --git a/src/com/android/contacts/views/ContactSaveService.java b/src/com/android/contacts/views/ContactSaveService.java
index 280f399..7e88f15 100644
--- a/src/com/android/contacts/views/ContactSaveService.java
+++ b/src/com/android/contacts/views/ContactSaveService.java
@@ -60,6 +60,7 @@
     public static final String EXTRA_GROUP_LABEL = "groupLabel";
 
     public static final String ACTION_SET_STARRED = "setStarred";
+    public static final String ACTION_DELETE_CONTACT = "delete";
     public static final String EXTRA_CONTACT_URI = "contactUri";
     public static final String EXTRA_STARRED_FLAG = "starred";
 
@@ -109,6 +110,8 @@
             setSuperPrimary(intent);
         } else if (ACTION_CLEAR_PRIMARY.equals(action)) {
             clearPrimary(intent);
+        } else if (ACTION_DELETE_CONTACT.equals(action)) {
+            deleteContact(intent);
         }
     }
 
@@ -294,7 +297,6 @@
         final ContentValues values = new ContentValues(1);
         values.put(Contacts.STARRED, value);
         getContentResolver().update(contactUri, values, null, null);
-
     }
 
     /**
@@ -350,4 +352,24 @@
         getContentResolver().update(ContentUris.withAppendedId(Data.CONTENT_URI, dataId),
                 values, null, null);
     }
+
+    /**
+     * Creates an intent that can be sent to this service to delete a contact.
+     */
+    public static Intent createDeleteContactIntent(Context context, Uri contactUri) {
+        Intent serviceIntent = new Intent(context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_DELETE_CONTACT);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_URI, contactUri);
+        return serviceIntent;
+    }
+
+    private void deleteContact(Intent intent) {
+        Uri contactUri = intent.getParcelableExtra(EXTRA_CONTACT_URI);
+        if (contactUri == null) {
+            Log.e(TAG, "Invalid arguments for deleteContact request");
+            return;
+        }
+
+        getContentResolver().delete(contactUri, null, null);
+    }
 }