1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 package com.example.android.samplesync.platform; 17 18 import android.content.ContentProviderOperation; 19 import android.content.ContentProviderResult; 20 import android.content.ContentResolver; 21 import android.content.Context; 22 import android.content.OperationApplicationException; 23 import android.net.Uri; 24 import android.os.RemoteException; 25 import android.provider.ContactsContract; 26 import android.util.Log; 27 28 import java.util.ArrayList; 29 import java.util.List; 30 31 /** 32 * This class handles execution of batch mOperations on Contacts provider. 33 */ 34 final public class BatchOperation { 35 36 private final String TAG = "BatchOperation"; 37 38 private final ContentResolver mResolver; 39 40 // List for storing the batch mOperations 41 private final ArrayList<ContentProviderOperation> mOperations; 42 43 public BatchOperation(Context context, ContentResolver resolver) { 44 mResolver = resolver; 45 mOperations = new ArrayList<ContentProviderOperation>(); 46 } 47 48 public int size() { 49 return mOperations.size(); 50 } 51 52 public void add(ContentProviderOperation cpo) { 53 mOperations.add(cpo); 54 } 55 56 public List<Uri> execute() { 57 List<Uri> resultUris = new ArrayList<Uri>(); 58 59 if (mOperations.size() == 0) { 60 return resultUris; 61 } 62 // Apply the mOperations to the content provider 63 try { 64 ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY, 65 mOperations); 66 if ((results != null) && (results.length > 0)){ 67 for (int i = 0; i < results.length; i++){ 68 resultUris.add(results[i].uri); 69 } 70 } 71 } catch (final OperationApplicationException e1) { 72 Log.e(TAG, "storing contact data failed", e1); 73 } catch (final RemoteException e2) { 74 Log.e(TAG, "storing contact data failed", e2); 75 } 76 mOperations.clear(); 77 return resultUris; 78 } 79 } 80