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