100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi/* 200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Copyright (C) 2010 The Android Open Source Project 315ef1a8091c1557f175575671a5af62420088944John Evans * 400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Licensed under the Apache License, Version 2.0 (the "License"); you may not 500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * use this file except in compliance with the License. You may obtain a copy of 600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * the License at 715ef1a8091c1557f175575671a5af62420088944John Evans * 800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * http://www.apache.org/licenses/LICENSE-2.0 915ef1a8091c1557f175575671a5af62420088944John Evans * 1000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Unless required by applicable law or agreed to in writing, software 1100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 1200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 1300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * License for the specific language governing permissions and limitations under 1400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * the License. 1500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi */ 1600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshipackage com.example.android.samplesync.platform; 1700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 1800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.ContentProviderOperation; 1915ef1a8091c1557f175575671a5af62420088944John Evansimport android.content.ContentProviderResult; 2000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.ContentResolver; 2100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.Context; 2200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.OperationApplicationException; 2315ef1a8091c1557f175575671a5af62420088944John Evansimport android.net.Uri; 2400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.os.RemoteException; 2500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.provider.ContactsContract; 2600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.util.Log; 2700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 2800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport java.util.ArrayList; 2974c1836184adccce4b876ddfb736567eb87c6e1dRobert Lyimport java.util.List; 3000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 3100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi/** 3200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * This class handles execution of batch mOperations on Contacts provider. 3300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi */ 34c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshifinal public class BatchOperation { 35c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi 3600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi private final String TAG = "BatchOperation"; 3700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 3800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi private final ContentResolver mResolver; 39c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi 4000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi // List for storing the batch mOperations 41c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi private final ArrayList<ContentProviderOperation> mOperations; 4200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 4300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi public BatchOperation(Context context, ContentResolver resolver) { 4400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi mResolver = resolver; 4500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi mOperations = new ArrayList<ContentProviderOperation>(); 4600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 4700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 4800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi public int size() { 4900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi return mOperations.size(); 5000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 5100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 5200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi public void add(ContentProviderOperation cpo) { 5300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi mOperations.add(cpo); 5400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 5500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi 5674c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly public List<Uri> execute() { 5774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly List<Uri> resultUris = new ArrayList<Uri>(); 58c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi 5900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi if (mOperations.size() == 0) { 6074c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly return resultUris; 6100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 6200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi // Apply the mOperations to the content provider 6300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi try { 6415ef1a8091c1557f175575671a5af62420088944John Evans ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY, 6515ef1a8091c1557f175575671a5af62420088944John Evans mOperations); 6674c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly if ((results != null) && (results.length > 0)){ 6774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly for (int i = 0; i < results.length; i++){ 6874c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly resultUris.add(results[i].uri); 6974c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly } 7074c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly } 7100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } catch (final OperationApplicationException e1) { 7200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi Log.e(TAG, "storing contact data failed", e1); 7300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } catch (final RemoteException e2) { 7400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi Log.e(TAG, "storing contact data failed", e2); 7500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 7600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi mOperations.clear(); 7774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly return resultUris; 7800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi } 7900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi} 80