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