1 package org.robolectric.shadows; 2 3 import android.content.ContentProvider; 4 import android.content.ContentProviderClient; 5 import android.content.ContentProviderOperation; 6 import android.content.ContentProviderResult; 7 import android.content.ContentResolver; 8 import android.content.ContentValues; 9 import android.content.IContentProvider; 10 import android.content.OperationApplicationException; 11 import android.content.res.AssetFileDescriptor; 12 import android.database.Cursor; 13 import android.net.Uri; 14 import android.os.Bundle; 15 import android.os.CancellationSignal; 16 import android.os.ParcelFileDescriptor; 17 import android.os.RemoteException; 18 import java.io.FileNotFoundException; 19 import java.util.ArrayList; 20 import org.robolectric.annotation.Implementation; 21 import org.robolectric.annotation.Implements; 22 23 @Implements(ContentProviderClient.class) 24 public class ShadowContentProviderClient { 25 private boolean stable; 26 private boolean released; 27 private ContentProvider provider; 28 29 @Implementation 30 public void __constructor__( 31 ContentResolver contentResolver, IContentProvider contentProvider, boolean stable) { 32 this.stable = stable; 33 } 34 35 @Implementation 36 public Bundle call(String method, String arg, Bundle extras) throws RemoteException { 37 return provider.call(method, arg, extras); 38 } 39 40 @Implementation 41 public String getType(Uri uri) throws RemoteException { 42 return provider.getType(uri); 43 } 44 45 @Implementation 46 public String[] getStreamTypes(Uri uri, String mimeTypeFilter) { 47 return provider.getStreamTypes(uri, mimeTypeFilter); 48 } 49 50 @Implementation 51 public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs, 52 String sortOrder) throws RemoteException { 53 return provider.query(url, projection, selection, selectionArgs, sortOrder); 54 } 55 56 @Implementation 57 public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs, 58 String sortOrder, CancellationSignal cancellationSignal) throws RemoteException { 59 return provider.query(url, projection, selection, selectionArgs, sortOrder, cancellationSignal); 60 } 61 62 @Implementation 63 public Uri insert(Uri url, ContentValues initialValues) throws RemoteException { 64 return provider.insert(url, initialValues); 65 } 66 67 @Implementation 68 public int bulkInsert(Uri url, ContentValues[] initialValues) throws RemoteException { 69 return provider.bulkInsert(url, initialValues); 70 } 71 72 @Implementation 73 public int delete(Uri url, String selection, String[] selectionArgs) 74 throws RemoteException { 75 return provider.delete(url, selection, selectionArgs); 76 } 77 78 @Implementation 79 public int update(Uri url, ContentValues values, String selection, String[] selectionArgs) 80 throws RemoteException { 81 return provider.update(url, values, selection, selectionArgs); 82 } 83 84 @Implementation 85 public ParcelFileDescriptor openFile(Uri url, String mode) 86 throws RemoteException, FileNotFoundException { 87 return provider.openFile(url, mode); 88 } 89 90 @Implementation 91 public AssetFileDescriptor openAssetFile(Uri url, String mode) 92 throws RemoteException, FileNotFoundException { 93 return provider.openAssetFile(url, mode); 94 } 95 96 @Implementation 97 public final AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri, 98 String mimeType, Bundle opts) throws RemoteException, FileNotFoundException { 99 return provider.openTypedAssetFile(uri, mimeType, opts); 100 } 101 102 @Implementation 103 public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) 104 throws RemoteException, OperationApplicationException { 105 return provider.applyBatch(operations); 106 } 107 108 @Implementation 109 public boolean release() { 110 synchronized (this) { 111 if (released) { 112 throw new IllegalStateException("Already released"); 113 } 114 released = true; 115 } 116 return true; 117 } 118 119 @Implementation 120 public ContentProvider getLocalContentProvider() { 121 return ContentProvider.coerceToLocalContentProvider(provider.getIContentProvider()); 122 } 123 124 public boolean isStable() { 125 return stable; 126 } 127 128 public boolean isReleased() { 129 return released; 130 } 131 132 void setContentProvider(ContentProvider provider) { 133 this.provider = provider; 134 } 135 } 136