Backport isInsert() using wrapper class for ContentProviderOperation (1/2)

Bug: 25629359
Change-Id: I86bf1ec37feee4ecf56197e23dcf642c613046b8
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index d014087..54be5a0 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -49,8 +49,10 @@
 import android.util.Log;
 import android.widget.Toast;
 
+import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.database.ContactUpdateUtils;
 import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.CPOWrapper;
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.RawContactDeltaList;
 import com.android.contacts.common.model.RawContactModifier;
@@ -385,7 +387,13 @@
         while (tries++ < PERSIST_TRIES) {
             try {
                 // Build operations and try applying
-                final ArrayList<ContentProviderOperation> diff = state.buildDiff();
+                final ArrayList<CPOWrapper> diffWrapper = state.buildDiffWrapper();
+
+                final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
+
+                for (CPOWrapper cpoWrapper : diffWrapper) {
+                    diff.add(cpoWrapper.getOperation());
+                }
 
                 if (DEBUG) {
                     Log.v(TAG, "Content Provider Operations:");
@@ -413,13 +421,13 @@
                     continue;
                 }
 
-                final long rawContactId = getRawContactId(state, diff, results);
+                final long rawContactId = getRawContactId(state, diffWrapper, results);
                 if (rawContactId == -1) {
                     throw new IllegalStateException("Could not determine RawContact ID after save");
                 }
                 // We don't have to check to see if the value is still -1.  If we reach here,
                 // the previous loop iteration didn't succeed, so any ID that we obtained is bogus.
-                insertedRawContactId = getInsertedRawContactId(diff, results);
+                insertedRawContactId = getInsertedRawContactId(diffWrapper, results);
                 if (isProfile) {
                     // Since the profile supports local raw contacts, which may have been completely
                     // removed if all information was removed, we need to do a special query to
@@ -574,31 +582,31 @@
      * Find the ID of an existing or newly-inserted raw-contact.  If none exists, return -1.
      */
     private long getRawContactId(RawContactDeltaList state,
-            final ArrayList<ContentProviderOperation> diff,
+            final ArrayList<CPOWrapper> diffWrapper,
             final ContentProviderResult[] results) {
         long existingRawContactId = state.findRawContactId();
         if (existingRawContactId != -1) {
             return existingRawContactId;
         }
 
-        return getInsertedRawContactId(diff, results);
+        return getInsertedRawContactId(diffWrapper, results);
     }
 
     /**
      * Find the ID of a newly-inserted raw-contact.  If none exists, return -1.
      */
     private long getInsertedRawContactId(
-            final ArrayList<ContentProviderOperation> diff,
-            final ContentProviderResult[] results) {
+            final ArrayList<CPOWrapper> diffWrapper, final ContentProviderResult[] results) {
         if (results == null) {
             return -1;
         }
-        final int diffSize = diff.size();
+        final int diffSize = diffWrapper.size();
         final int numResults = results.length;
         for (int i = 0; i < diffSize && i < numResults; i++) {
-            ContentProviderOperation operation = diff.get(i);
-            if (operation.isInsert() && operation.getUri().getEncodedPath().contains(
-                            RawContacts.CONTENT_URI.getEncodedPath())) {
+            final CPOWrapper cpoWrapper = diffWrapper.get(i);
+            final boolean isInsert = CompatUtils.isInsertCompat(cpoWrapper);
+            if (isInsert && cpoWrapper.getOperation().getUri().getEncodedPath().contains(
+                    RawContacts.CONTENT_URI.getEncodedPath())) {
                 return ContentUris.parseId(results[i].uri);
             }
         }