Home | History | Annotate | Download | only in platform
      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