diff options
author | Fred Quintana <fredq@google.com> | 2009-10-05 14:21:12 -0700 |
---|---|---|
committer | Fred Quintana <fredq@google.com> | 2009-10-06 11:51:19 -0700 |
commit | 5bba632d877c2878384ff21566c8eb6a1a22f37b (patch) | |
tree | e8bd6afd4bb1df723420de4a6e7f17ab3a253427 | |
parent | 5163cd6d1cb664977eb4473b98657c7e92ae430e (diff) | |
download | frameworks_base-5bba632d877c2878384ff21566c8eb6a1a22f37b.zip frameworks_base-5bba632d877c2878384ff21566c8eb6a1a22f37b.tar.gz frameworks_base-5bba632d877c2878384ff21566c8eb6a1a22f37b.tar.bz2 |
- hide Entity and all its references
- remove updateEntity and insertEntity, since they are not
used
- add the RawContacts.Entity class, which is used in lieu of the
android.content.Entity
-rw-r--r-- | api/current.xml | 493 | ||||
-rw-r--r-- | core/java/android/content/AbstractCursorEntityIterator.java | 1 | ||||
-rw-r--r-- | core/java/android/content/AsyncQueryHandler.java | 1 | ||||
-rw-r--r-- | core/java/android/content/ContentProvider.java | 26 | ||||
-rw-r--r-- | core/java/android/content/ContentProviderClient.java | 15 | ||||
-rw-r--r-- | core/java/android/content/ContentProviderNative.java | 69 | ||||
-rw-r--r-- | core/java/android/content/ContentResolver.java | 2 | ||||
-rw-r--r-- | core/java/android/content/Entity.java | 1 | ||||
-rw-r--r-- | core/java/android/content/EntityIterator.java | 3 | ||||
-rw-r--r-- | core/java/android/content/IContentProvider.java | 10 | ||||
-rw-r--r-- | core/java/android/provider/ContactsContract.java | 69 | ||||
-rw-r--r-- | test-runner/android/test/mock/MockContentProvider.java | 11 |
12 files changed, 182 insertions, 519 deletions
diff --git a/api/current.xml b/api/current.xml index df69ede..207c133 100644 --- a/api/current.xml +++ b/api/current.xml @@ -27216,88 +27216,6 @@ </package> <package name="android.content" > -<class name="AbstractCursorEntityIterator" - extends="java.lang.Object" - abstract="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<implements name="android.content.EntityIterator"> -</implements> -<constructor name="AbstractCursorEntityIterator" - type="android.content.AbstractCursorEntityIterator" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="db" type="android.database.sqlite.SQLiteDatabase"> -</parameter> -<parameter name="entityCursor" type="android.database.Cursor"> -</parameter> -</constructor> -<method name="close" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="hasNext" - return="boolean" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="newEntityFromCursorLocked" - return="android.content.Entity" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="cursor" type="android.database.Cursor"> -</parameter> -</method> -<method name="next" - return="android.content.Entity" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="reset" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> -</class> <class name="ActivityNotFoundException" extends="java.lang.RuntimeException" abstract="false" @@ -27420,23 +27338,6 @@ <parameter name="cursor" type="android.database.Cursor"> </parameter> </method> -<method name="onQueryEntitiesComplete" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="protected" -> -<parameter name="token" type="int"> -</parameter> -<parameter name="cookie" type="java.lang.Object"> -</parameter> -<parameter name="iterator" type="android.content.EntityIterator"> -</parameter> -</method> <method name="onUpdateComplete" return="void" abstract="false" @@ -28323,21 +28224,6 @@ <parameter name="values" type="android.content.ContentValues"> </parameter> </method> -<method name="insertEntity" - return="android.net.Uri" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="entity" type="android.content.Entity"> -</parameter> -</method> <method name="isTemporary" return="boolean" abstract="false" @@ -28456,25 +28342,6 @@ <parameter name="sortOrder" type="java.lang.String"> </parameter> </method> -<method name="queryEntities" - return="android.content.EntityIterator" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="selection" type="java.lang.String"> -</parameter> -<parameter name="selectionArgs" type="java.lang.String[]"> -</parameter> -<parameter name="sortOrder" type="java.lang.String"> -</parameter> -</method> <method name="setPathPermissions" return="void" abstract="false" @@ -28533,21 +28400,6 @@ <parameter name="selectionArgs" type="java.lang.String[]"> </parameter> </method> -<method name="updateEntity" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="entity" type="android.content.Entity"> -</parameter> -</method> </class> <class name="ContentProviderClient" extends="java.lang.Object" @@ -28653,23 +28505,6 @@ <exception name="RemoteException" type="android.os.RemoteException"> </exception> </method> -<method name="insertEntity" - return="android.net.Uri" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="entity" type="android.content.Entity"> -</parameter> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> <method name="openAssetFile" return="android.content.res.AssetFileDescriptor" abstract="false" @@ -28731,27 +28566,6 @@ <exception name="RemoteException" type="android.os.RemoteException"> </exception> </method> -<method name="queryEntities" - return="android.content.EntityIterator" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="selection" type="java.lang.String"> -</parameter> -<parameter name="selectionArgs" type="java.lang.String[]"> -</parameter> -<parameter name="sortOrder" type="java.lang.String"> -</parameter> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> <method name="release" return="boolean" abstract="false" @@ -28784,23 +28598,6 @@ <exception name="RemoteException" type="android.os.RemoteException"> </exception> </method> -<method name="updateEntity" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="entity" type="android.content.Entity"> -</parameter> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> </class> <class name="ContentProviderOperation" extends="java.lang.Object" @@ -29689,27 +29486,6 @@ <parameter name="sortOrder" type="java.lang.String"> </parameter> </method> -<method name="queryEntities" - return="android.content.EntityIterator" - abstract="false" - native="false" - synchronized="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="selection" type="java.lang.String"> -</parameter> -<parameter name="selectionArgs" type="java.lang.String[]"> -</parameter> -<parameter name="sortOrder" type="java.lang.String"> -</parameter> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> <method name="registerContentObserver" return="void" abstract="false" @@ -33171,199 +32947,6 @@ </parameter> </method> </interface> -<class name="Entity" - extends="java.lang.Object" - abstract="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -<implements name="android.os.Parcelable"> -</implements> -<constructor name="Entity" - type="android.content.Entity" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="values" type="android.content.ContentValues"> -</parameter> -</constructor> -<method name="addSubValue" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="values" type="android.content.ContentValues"> -</parameter> -</method> -<method name="describeContents" - return="int" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getEntityValues" - return="android.content.ContentValues" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="getSubValues" - return="java.util.ArrayList<android.content.Entity.NamedContentValues>" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="writeToParcel" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="dest" type="android.os.Parcel"> -</parameter> -<parameter name="flags" type="int"> -</parameter> -</method> -<field name="CREATOR" - type="android.os.Parcelable.Creator" - transient="false" - volatile="false" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -</class> -<class name="Entity.NamedContentValues" - extends="java.lang.Object" - abstract="false" - static="true" - final="false" - deprecated="not deprecated" - visibility="public" -> -<constructor name="Entity.NamedContentValues" - type="android.content.Entity.NamedContentValues" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="uri" type="android.net.Uri"> -</parameter> -<parameter name="values" type="android.content.ContentValues"> -</parameter> -</constructor> -<field name="uri" - type="android.net.Uri" - transient="false" - volatile="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="values" - type="android.content.ContentValues" - transient="false" - volatile="false" - static="false" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -</class> -<interface name="EntityIterator" - abstract="true" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<method name="close" - return="void" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -</method> -<method name="hasNext" - return="boolean" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> -<method name="next" - return="android.content.Entity" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> -<method name="reset" - return="void" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<exception name="RemoteException" type="android.os.RemoteException"> -</exception> -</method> -</interface> <class name="Intent" extends="java.lang.Object" abstract="false" @@ -115542,6 +115125,82 @@ > </field> </class> +<class name="ContactsContract.RawContacts.Entity" + extends="java.lang.Object" + abstract="false" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +<implements name="android.provider.BaseColumns"> +</implements> +<field name="CONTENT_DIRECTORY" + type="java.lang.String" + transient="false" + volatile="false" + value=""entity"" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="DATA_ID" + type="java.lang.String" + transient="false" + volatile="false" + value=""data_id"" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +</class> +<class name="ContactsContract.RawContactsEntity" + extends="java.lang.Object" + abstract="false" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +<implements name="android.provider.BaseColumns"> +</implements> +<field name="CONTENT_TYPE" + type="java.lang.String" + transient="false" + volatile="false" + value=""vnd.android.cursor.dir/raw_contact_entity"" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="CONTENT_URI" + type="android.net.Uri" + transient="false" + volatile="false" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="DATA_ID" + type="java.lang.String" + transient="false" + volatile="false" + value=""data_id"" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +</class> <class name="ContactsContract.Settings" extends="java.lang.Object" abstract="false" diff --git a/core/java/android/content/AbstractCursorEntityIterator.java b/core/java/android/content/AbstractCursorEntityIterator.java index c2b13a4..a804f3c 100644 --- a/core/java/android/content/AbstractCursorEntityIterator.java +++ b/core/java/android/content/AbstractCursorEntityIterator.java @@ -8,6 +8,7 @@ import android.os.RemoteException; * An abstract class that makes it easy to implement an EntityIterator over a cursor. * The user must implement {@link #newEntityFromCursorLocked}, which runs inside of a * database transaction. + * @hide */ public abstract class AbstractCursorEntityIterator implements EntityIterator { private final Cursor mEntityCursor; diff --git a/core/java/android/content/AsyncQueryHandler.java b/core/java/android/content/AsyncQueryHandler.java index 5e88de0..aa8b42a 100644 --- a/core/java/android/content/AsyncQueryHandler.java +++ b/core/java/android/content/AsyncQueryHandler.java @@ -344,6 +344,7 @@ public abstract class AsyncQueryHandler extends Handler { * @param token The token to identify the query. * @param cookie The cookie object. * @param iterator The iterator holding the query results. + * @hide */ protected void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) { // Empty diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index 5b29b97..a341c9b 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -131,6 +131,9 @@ public abstract class ContentProvider implements ComponentCallbacks { selectionArgs, sortOrder); } + /** + * @hide + */ public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs, String sortOrder) { enforceReadPermission(uri); @@ -152,11 +155,6 @@ public abstract class ContentProvider implements ComponentCallbacks { return ContentProvider.this.bulkInsert(uri, initialValues); } - public Uri insertEntity(Uri uri, Entity entities) { - enforceWritePermission(uri); - return ContentProvider.this.insertEntity(uri, entities); - } - public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) throws OperationApplicationException { for (ContentProviderOperation operation : operations) { @@ -182,11 +180,6 @@ public abstract class ContentProvider implements ComponentCallbacks { return ContentProvider.this.update(uri, values, selection, selectionArgs); } - public int updateEntity(Uri uri, Entity entity) { - enforceWritePermission(uri); - return ContentProvider.this.updateEntity(uri, entity); - } - public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { if (mode != null && mode.startsWith("rw")) enforceWritePermission(uri); @@ -451,6 +444,9 @@ public abstract class ContentProvider implements ComponentCallbacks { public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); + /** + * @hide + */ public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException(); @@ -506,10 +502,6 @@ public abstract class ContentProvider implements ComponentCallbacks { return numValues; } - public Uri insertEntity(Uri uri, Entity entity) { - throw new UnsupportedOperationException(); - } - /** * A request to delete one or more rows. The selection clause is applied when performing * the deletion, allowing the operation to affect multiple rows in a @@ -554,14 +546,10 @@ public abstract class ContentProvider implements ComponentCallbacks { public abstract int update(Uri uri, ContentValues values, String selection, String[] selectionArgs); - public int updateEntity(Uri uri, Entity entity) { - throw new UnsupportedOperationException(); - } - /** * Open a file blob associated with a content URI. * This method can be called from multiple - * threads, as described in + * threads, as described inentity * <a href="{@docRoot}guide/topics/fundamentals.html#procthread">Application Fundamentals: * Processes and Threads</a>. * diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java index 452653e..403c4d8 100644 --- a/core/java/android/content/ContentProviderClient.java +++ b/core/java/android/content/ContentProviderClient.java @@ -89,22 +89,15 @@ public class ContentProviderClient { return mContentProvider.openAssetFile(url, mode); } - /** see {@link ContentProvider#queryEntities} */ + /** + * see {@link ContentProvider#queryEntities} + * @hide + */ public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs, String sortOrder) throws RemoteException { return mContentProvider.queryEntities(uri, selection, selectionArgs, sortOrder); } - /** see {@link ContentProvider#insertEntity} */ - public Uri insertEntity(Uri uri, Entity entity) throws RemoteException { - return mContentProvider.insertEntity(uri, entity); - } - - /** see {@link ContentProvider#updateEntity} */ - public int updateEntity(Uri uri, Entity entity) throws RemoteException { - return mContentProvider.updateEntity(uri, entity); - } - /** see {@link ContentProvider#applyBatch} */ public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) throws RemoteException, OperationApplicationException { diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java index e367ceb..adc3f60 100644 --- a/core/java/android/content/ContentProviderNative.java +++ b/core/java/android/content/ContentProviderNative.java @@ -155,28 +155,6 @@ abstract public class ContentProviderNative extends Binder implements IContentPr return true; } - case INSERT_ENTITIES_TRANSACTION: - { - data.enforceInterface(IContentProvider.descriptor); - Uri uri = Uri.CREATOR.createFromParcel(data); - Entity entity = (Entity) data.readParcelable(null); - Uri newUri = insertEntity(uri, entity); - reply.writeNoException(); - Uri.writeToParcel(reply, newUri); - return true; - } - - case UPDATE_ENTITIES_TRANSACTION: - { - data.enforceInterface(IContentProvider.descriptor); - Uri uri = Uri.CREATOR.createFromParcel(data); - Entity entity = (Entity) data.readParcelable(null); - int count = updateEntity(uri, entity); - reply.writeNoException(); - reply.writeInt(count); - return true; - } - case APPLY_BATCH_TRANSACTION: { data.enforceInterface(IContentProvider.descriptor); @@ -267,6 +245,9 @@ abstract public class ContentProviderNative extends Binder implements IContentPr return super.onTransact(code, data, reply, flags); } + /** + * @hide + */ private class IEntityIteratorImpl extends IEntityIterator.Stub { private final EntityIterator mEntityIterator; @@ -371,6 +352,9 @@ final class ContentProviderProxy implements IContentProvider return adaptor; } + /** + * @hide + */ public EntityIterator queryEntities(Uri url, String selection, String[] selectionArgs, String sortOrder) throws RemoteException { @@ -396,6 +380,9 @@ final class ContentProviderProxy implements IContentProvider return new RemoteEntityIterator(IEntityIterator.Stub.asInterface(entityIteratorBinder)); } + /** + * @hide + */ static class RemoteEntityIterator implements EntityIterator { private final IEntityIterator mEntityIterator; RemoteEntityIterator(IEntityIterator entityIterator) { @@ -506,44 +493,6 @@ final class ContentProviderProxy implements IContentProvider return results; } - public Uri insertEntity(Uri uri, Entity entity) throws RemoteException { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - - try { - data.writeInterfaceToken(IContentProvider.descriptor); - uri.writeToParcel(data, 0); - data.writeParcelable(entity, 0); - - mRemote.transact(IContentProvider.INSERT_ENTITIES_TRANSACTION, data, reply, 0); - - DatabaseUtils.readExceptionFromParcel(reply); - return Uri.CREATOR.createFromParcel(reply); - } finally { - data.recycle(); - reply.recycle(); - } - } - - public int updateEntity(Uri uri, Entity entity) throws RemoteException { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - - try { - data.writeInterfaceToken(IContentProvider.descriptor); - uri.writeToParcel(data, 0); - data.writeParcelable(entity, 0); - - mRemote.transact(IContentProvider.UPDATE_ENTITIES_TRANSACTION, data, reply, 0); - - DatabaseUtils.readExceptionFromParcel(reply); - return reply.readInt(); - } finally { - data.recycle(); - reply.recycle(); - } - } - public int delete(Uri url, String selection, String[] selectionArgs) throws RemoteException { Parcel data = Parcel.obtain(); diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index c9edc41..c4b0807 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -218,6 +218,7 @@ public abstract class ContentResolver { /** * EntityIterator wrapper that releases the associated ContentProviderClient when the * iterator is closed. + * @hide */ private class EntityIteratorWrapper implements EntityIterator { private final EntityIterator mInner; @@ -283,6 +284,7 @@ public abstract class ContentResolver { * @throws RemoteException thrown if a RemoteException is encountered while attempting * to communicate with a remote provider. * @throws IllegalArgumentException thrown if there is no provider that matches the uri + * @hide */ public final EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs, String sortOrder) throws RemoteException { diff --git a/core/java/android/content/Entity.java b/core/java/android/content/Entity.java index 325dce5..ee8112e 100644 --- a/core/java/android/content/Entity.java +++ b/core/java/android/content/Entity.java @@ -26,6 +26,7 @@ import java.util.ArrayList; /** * Objects that pass through the ContentProvider and ContentResolver's methods that deal with * Entities must implement this abstract base class and thus themselves be Parcelable. + * @hide */ public final class Entity implements Parcelable { final private ContentValues mValues; diff --git a/core/java/android/content/EntityIterator.java b/core/java/android/content/EntityIterator.java index 3cc1040..1b73439 100644 --- a/core/java/android/content/EntityIterator.java +++ b/core/java/android/content/EntityIterator.java @@ -18,6 +18,9 @@ package android.content; import android.os.RemoteException; +/** + * @hide + */ public interface EntityIterator { /** * Returns whether there are more elements to iterate, i.e. whether the diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java index 7e5aba5..0798adf 100644 --- a/core/java/android/content/IContentProvider.java +++ b/core/java/android/content/IContentProvider.java @@ -44,6 +44,9 @@ public interface IContentProvider extends IInterface { CursorWindow window) throws RemoteException; public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs, String sortOrder) throws RemoteException; + /** + * @hide + */ public EntityIterator queryEntities(Uri url, String selection, String[] selectionArgs, String sortOrder) throws RemoteException; @@ -51,12 +54,10 @@ public interface IContentProvider extends IInterface { public Uri insert(Uri url, ContentValues initialValues) throws RemoteException; public int bulkInsert(Uri url, ContentValues[] initialValues) throws RemoteException; - public Uri insertEntity(Uri uri, Entity entities) throws RemoteException; public int delete(Uri url, String selection, String[] selectionArgs) throws RemoteException; public int update(Uri url, ContentValues values, String selection, String[] selectionArgs) throws RemoteException; - public int updateEntity(Uri uri, Entity entity) throws RemoteException; public ParcelFileDescriptor openFile(Uri url, String mode) throws RemoteException, FileNotFoundException; public AssetFileDescriptor openAssetFile(Uri url, String mode) @@ -75,8 +76,9 @@ public interface IContentProvider extends IInterface { static final int BULK_INSERT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 12; static final int OPEN_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 13; static final int OPEN_ASSET_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 14; - static final int INSERT_ENTITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 16; - static final int UPDATE_ENTITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 17; + /** + * @hide + */ static final int QUERY_ENTITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 18; static final int APPLY_BATCH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 19; } diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 1d6c8ef..5ea6539 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -673,6 +673,30 @@ public final class ContactsContract { */ public static final String CONTENT_DIRECTORY = "data"; } + + /** + * A sub-directory of a single raw contact that contains all of their {@link Data} rows. + * To access this directory append {@link Entity#CONTENT_DIRECTORY} to the contact URI. + */ + public static final class Entity implements BaseColumns, DataColumns { + /** + * no public constructor since this is a utility class + */ + private Entity() { + } + + /** + * The directory twig for this sub-table + */ + public static final String CONTENT_DIRECTORY = "entity"; + + /** + * The ID of the data column. The value will be null if this raw contact has no + * data rows. + * <P>Type: INTEGER</P> + */ + public static final String DATA_ID = "data_id"; + } } private interface StatusColumns extends Im.CommonPresenceColumns { @@ -869,6 +893,51 @@ public final class ContactsContract { } } + /** + * Constants for the raw contacts entities table, which can be though of as an outer join + * of the raw_contacts table with the data table. + */ + public final static class RawContactsEntity + implements BaseColumns, DataColumns, RawContactsColumns { + /** + * This utility class cannot be instantiated + */ + private RawContactsEntity() {} + + /** + * The content:// style URI for this table + */ + public static final Uri CONTENT_URI = + Uri.withAppendedPath(AUTHORITY_URI, "raw_contact_entities"); + + /** + * The MIME type of {@link #CONTENT_URI} providing a directory of raw contact entities. + */ + public static final String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact_entity"; + + /** + * If {@link #FOR_EXPORT_ONLY} is explicitly set to "1", returned Cursor toward + * Data.CONTENT_URI contains only exportable data. + * + * This flag is useful (currently) only for vCard exporter in Contacts app, which + * needs to exclude "un-exportable" data from available data to export, while + * Contacts app itself has priviledge to access all data including "un-expotable" + * ones and providers return all of them regardless of the callers' intention. + * <P>Type: INTEGER</p> + * + * @hide Maybe available only in Eclair and not really ready for public use. + * TODO: remove, or implement this feature completely. As of now (Eclair), + * we only use this flag in queryEntities(), not query(). + */ + public static final String FOR_EXPORT_ONLY = "for_export_only"; + + /** + * The ID of the data column. The value will be null if this raw contact has no data rows. + * <P>Type: INTEGER</P> + */ + public static final String DATA_ID = "data_id"; + } + private interface PhoneLookupColumns { /** * The phone number as the user entered it. diff --git a/test-runner/android/test/mock/MockContentProvider.java b/test-runner/android/test/mock/MockContentProvider.java index 74f86d8..c3fe9c0 100644 --- a/test-runner/android/test/mock/MockContentProvider.java +++ b/test-runner/android/test/mock/MockContentProvider.java @@ -53,10 +53,6 @@ public class MockContentProvider implements IContentProvider { return 0; } - public Uri insertEntity(Uri uri, Entity entities) throws RemoteException { - throw new UnsupportedOperationException("unimplemented mock method"); - } - @SuppressWarnings("unused") public IBulkCursor bulkQuery(Uri url, String[] projection, String selection, String[] selectionArgs, String sortOrder, IContentObserver observer, @@ -103,6 +99,9 @@ public class MockContentProvider implements IContentProvider { throw new UnsupportedOperationException("unimplemented mock method"); } + /** + * @hide + */ public EntityIterator queryEntities(Uri url, String selection, String[] selectionArgs, String sortOrder) throws RemoteException { throw new UnsupportedOperationException("unimplemented mock method"); @@ -114,10 +113,6 @@ public class MockContentProvider implements IContentProvider { throw new UnsupportedOperationException("unimplemented mock method"); } - public int updateEntity(Uri uri, Entity entity) throws RemoteException { - throw new UnsupportedOperationException("unimplemented mock method"); - } - public IBinder asBinder() { throw new UnsupportedOperationException("unimplemented mock method"); } |