ContentProviderClient.java revision 718d8a2d7ff3e864a73879eb646f46c14ab74d07
1package android.content; 2 3import android.database.Cursor; 4import android.net.Uri; 5import android.os.RemoteException; 6import android.os.ParcelFileDescriptor; 7import android.content.res.AssetFileDescriptor; 8 9import java.io.FileNotFoundException; 10 11/** 12 * The public interface object used to interact with a {@link ContentProvider}. This is obtained by 13 * calling {@link ContentResolver#acquireContentProviderClient}. This object must be released 14 * using {@link #release} in order to indicate to the system that the {@link ContentProvider} is 15 * no longer needed and can be killed to free up resources. 16 */ 17public class ContentProviderClient { 18 private final IContentProvider mContentProvider; 19 private final ContentResolver mContentResolver; 20 21 /** 22 * @hide 23 */ 24 ContentProviderClient(ContentResolver contentResolver, IContentProvider contentProvider) { 25 mContentProvider = contentProvider; 26 mContentResolver = contentResolver; 27 } 28 29 /** {@see ContentProvider#query} */ 30 public Cursor query(Uri url, String[] projection, String selection, 31 String[] selectionArgs, String sortOrder) throws RemoteException { 32 return mContentProvider.query(url, projection, selection, selectionArgs, sortOrder); 33 } 34 35 /** {@see ContentProvider#getType} */ 36 public String getType(Uri url) throws RemoteException { 37 return mContentProvider.getType(url); 38 } 39 40 /** {@see ContentProvider#insert} */ 41 public Uri insert(Uri url, ContentValues initialValues) 42 throws RemoteException { 43 return mContentProvider.insert(url, initialValues); 44 } 45 46 /** {@see ContentProvider#bulkInsert} */ 47 public int bulkInsert(Uri url, ContentValues[] initialValues) throws RemoteException { 48 return mContentProvider.bulkInsert(url, initialValues); 49 } 50 51 /** {@see ContentProvider#delete} */ 52 public int delete(Uri url, String selection, String[] selectionArgs) 53 throws RemoteException { 54 return mContentProvider.delete(url, selection, selectionArgs); 55 } 56 57 /** {@see ContentProvider#update} */ 58 public int update(Uri url, ContentValues values, String selection, 59 String[] selectionArgs) throws RemoteException { 60 return mContentProvider.update(url, values, selection, selectionArgs); 61 } 62 63 /** {@see ContentProvider#openFile} */ 64 public ParcelFileDescriptor openFile(Uri url, String mode) 65 throws RemoteException, FileNotFoundException { 66 return mContentProvider.openFile(url, mode); 67 } 68 69 /** {@see ContentProvider#openAssetFile} */ 70 public AssetFileDescriptor openAssetFile(Uri url, String mode) 71 throws RemoteException, FileNotFoundException { 72 return mContentProvider.openAssetFile(url, mode); 73 } 74 75 /** 76 * Call this to indicate to the system that the associated {@link ContentProvider} is no 77 * longer needed by this {@link ContentProviderClient}. 78 * @return true if this was release, false if it was already released 79 */ 80 public boolean release() { 81 return mContentResolver.releaseProvider(mContentProvider); 82 } 83 84 /** 85 * Get a reference to the {@link ContentProvider} that is associated with this 86 * client. If the {@link ContentProvider} is running in a different process then 87 * null will be returned. This can be used if you know you are running in the same 88 * process as a provider, and want to get direct access to its implementation details. 89 * 90 * @return If the associated {@link ContentProvider} is local, returns it. 91 * Otherwise returns null. 92 */ 93 public ContentProvider getLocalContentProvider() { 94 return ContentProvider.coerceToLocalContentProvider(mContentProvider); 95 } 96} 97