Don't prune read only contacts in SaveService for joins and splits
Bug 27108237
Change-Id: I717717a3c8b55315dcf3dde026af4c267f62e709
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 10f8f9c..517305a 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -60,6 +60,7 @@
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.compat.PinnedPositionsCompat;
+import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor.SaveMode;
import com.android.contacts.util.ContactPhotoUtils;
import com.google.common.collect.Lists;
@@ -374,10 +375,14 @@
String saveModeExtraKey, int saveMode, boolean isProfile,
Class<? extends Activity> callbackActivity, String callbackAction,
Bundle updatedPhotos, String joinContactIdExtraKey, Long joinContactId) {
+
// Don't pass read-only RawContactDeltas in RawContactDeltaList to contact save service,
// because 1. read-only RawContactDeltas are not writable anyway; 2. read-only
// RawContactDeltas may be problematic, see b/23896510.
- removeReadOnlyContacts(context, state);
+ // Except when we must create aggregation exceptions between the raw contacts
+ if (!(saveMode == SaveMode.JOIN || saveMode == SaveMode.SPLIT)) {
+ removeReadOnlyContacts(context, state);
+ }
Intent serviceIntent = new Intent(context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_SAVE_CONTACT);