Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89437376 authored by Fred Quintana's avatar Fred Quintana
Browse files

add ipc support to batching

parent fc5095f4
Loading
Loading
Loading
Loading
+167 −195
Original line number Diff line number Diff line
@@ -28053,36 +28053,6 @@
<parameter name="values" type="android.content.ContentValues[]">
</parameter>
</method>
<method name="bulkInsertEntities"
 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="entities" type="android.content.Entity[]">
</parameter>
</method>
<method name="bulkUpdateEntities"
 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="entities" type="android.content.Entity[]">
</parameter>
</method>
<method name="delete"
 return="int"
 abstract="true"
@@ -28382,8 +28352,8 @@
 deprecated="not deprecated"
 visibility="public"
>
<method name="bulkInsert"
 return="int"
<method name="applyBatch"
 return="android.content.ContentProviderResult[]"
 abstract="false"
 native="false"
 synchronized="false"
@@ -28392,32 +28362,15 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="url" type="android.net.Uri">
</parameter>
<parameter name="initialValues" type="android.content.ContentValues[]">
<parameter name="operations" type="android.content.ContentProviderOperation[]">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
</method>
<method name="bulkInsertEntities"
 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="entities" type="android.content.Entity[]">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
</method>
<method name="bulkUpdateEntities"
 return="int[]"
<method name="bulkInsert"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
@@ -28426,9 +28379,9 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="uri" type="android.net.Uri">
<parameter name="url" type="android.net.Uri">
</parameter>
<parameter name="entities" type="android.content.Entity[]">
<parameter name="initialValues" type="android.content.ContentValues[]">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
@@ -28652,6 +28605,8 @@
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.os.Parcelable">
</implements>
<method name="apply"
 return="android.content.ContentProviderResult"
 abstract="false"
@@ -28671,6 +28626,50 @@
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
</method>
<method name="describeContents"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getUri"
 return="android.net.Uri"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isReadOperation"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isWriteOperation"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="newCountQuery"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
@@ -28753,6 +28752,31 @@
<parameter name="numBackRefs" type="int">
</parameter>
</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="ContentProviderOperation.Builder"
 extends="java.lang.Object"
@@ -28773,6 +28797,19 @@
 visibility="public"
>
</method>
<method name="withEntity"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="entity" type="android.content.Entity">
</parameter>
</method>
<method name="withExpectedCount"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
@@ -28849,6 +28886,8 @@
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.os.Parcelable">
</implements>
<constructor name="ContentProviderResult"
 type="android.content.ContentProviderResult"
 static="false"
@@ -28869,6 +28908,52 @@
<parameter name="count" type="int">
</parameter>
</constructor>
<constructor name="ContentProviderResult"
 type="android.content.ContentProviderResult"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="source" type="android.os.Parcel">
</parameter>
</constructor>
<method name="describeContents"
 return="int"
 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>
<field name="count"
 type="java.lang.Integer"
 transient="false"
@@ -29018,40 +29103,27 @@
<parameter name="name" type="java.lang.String">
</parameter>
</method>
<method name="bulkInsert"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="url" type="android.net.Uri">
</parameter>
<parameter name="values" type="android.content.ContentValues[]">
</parameter>
</method>
<method name="bulkInsertEntities"
 return="android.net.Uri[]"
<method name="applyBatch"
 return="android.content.ContentProviderResult[]"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="uri" type="android.net.Uri">
<parameter name="authority" type="java.lang.String">
</parameter>
<parameter name="entities" type="android.content.Entity[]">
<parameter name="operations" type="android.content.ContentProviderOperation[]">
</parameter>
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
</method>
<method name="bulkUpdateEntities"
 return="int[]"
<method name="bulkInsert"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
@@ -29060,12 +29132,10 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="uri" type="android.net.Uri">
<parameter name="url" type="android.net.Uri">
</parameter>
<parameter name="entities" type="android.content.Entity[]">
<parameter name="values" type="android.content.ContentValues[]">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
</method>
<method name="cancelSync"
 return="void"
@@ -29276,7 +29346,7 @@
<parameter name="sortOrder" type="java.lang.String">
</parameter>
</method>
<method name="queryEntity"
<method name="queryEntities"
 return="android.content.EntityIterator"
 abstract="false"
 native="false"
@@ -32604,119 +32674,6 @@
</exception>
</method>
</interface>
<interface name="IEntityIterator"
 abstract="true"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.os.IInterface">
</implements>
<method name="close"
 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>
<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>
</interface>
<class name="IEntityIterator.Stub"
 extends="android.os.Binder"
 abstract="true"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<implements name="android.content.IEntityIterator">
</implements>
<constructor name="IEntityIterator.Stub"
 type="android.content.IEntityIterator.Stub"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</constructor>
<method name="asBinder"
 return="android.os.IBinder"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="asInterface"
 return="android.content.IEntityIterator"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="obj" type="android.os.IBinder">
</parameter>
</method>
<method name="onTransact"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="code" type="int">
</parameter>
<parameter name="data" type="android.os.Parcel">
</parameter>
<parameter name="reply" type="android.os.Parcel">
</parameter>
<parameter name="flags" type="int">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
</method>
</class>
<class name="Intent"
 extends="java.lang.Object"
 abstract="false"
@@ -46712,6 +46669,21 @@
<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
</exception>
</method>
<method name="readExceptionWithOperationApplicationExceptionFromParcel"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="reply" type="android.os.Parcel">
</parameter>
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
</method>
<method name="sqlEscapeString"
 return="java.lang.String"
 abstract="false"
+18 −20
Original line number Diff line number Diff line
@@ -151,9 +151,23 @@ public abstract class ContentProvider implements ComponentCallbacks {
            return ContentProvider.this.bulkInsert(uri, initialValues);
        }

        public Uri[] bulkInsertEntities(Uri uri, Entity[] entities) {
        public Uri insertEntity(Uri uri, Entity entities) {
            checkWritePermission(uri);
            return ContentProvider.this.bulkInsertEntities(uri, entities);
            return ContentProvider.this.insertEntity(uri, entities);
        }

        public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
                throws OperationApplicationException {
            for (ContentProviderOperation operation : operations) {
                if (operation.isReadOperation()) {
                    checkReadPermission(operation.getUri());
                }

                if (operation.isWriteOperation()) {
                    checkWritePermission(operation.getUri());
                }
            }
            return ContentProvider.this.applyBatch(operations);
        }

        public int delete(Uri uri, String selection, String[] selectionArgs) {
@@ -167,9 +181,9 @@ public abstract class ContentProvider implements ComponentCallbacks {
            return ContentProvider.this.update(uri, values, selection, selectionArgs);
        }

        public int[] bulkUpdateEntities(Uri uri, Entity[] entities) {
        public int updateEntity(Uri uri, Entity entity) {
            checkWritePermission(uri);
            return ContentProvider.this.bulkUpdateEntities(uri, entities);
            return ContentProvider.this.updateEntity(uri, entity);
        }

        public ParcelFileDescriptor openFile(Uri uri, String mode)
@@ -403,14 +417,6 @@ public abstract class ContentProvider implements ComponentCallbacks {
        throw new UnsupportedOperationException();
    }

    public Uri[] bulkInsertEntities(Uri uri, Entity[] entities) {
        Uri[] result = new Uri[entities.length];
        for (int i = 0; i < entities.length; i++) {
            result[i] = insertEntity(uri, entities[i]);
        }
        return result;
    }

    /**
     * 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
@@ -459,14 +465,6 @@ public abstract class ContentProvider implements ComponentCallbacks {
        throw new UnsupportedOperationException();
    }

    public int[] bulkUpdateEntities(Uri uri, Entity[] entities) {
        int[] result = new int[entities.length];
        for (int i = 0; i < entities.length; i++) {
            result[i] = updateEntity(uri, entities[i]);
        }
        return result;
    }

    /**
     * Open a file blob associated with a content URI.
     * This method can be called from multiple
+6 −10
Original line number Diff line number Diff line
@@ -96,22 +96,18 @@ public class ContentProviderClient {

    /** see {@link ContentProvider#insertEntity} */
    public Uri insertEntity(Uri uri, Entity entity) throws RemoteException {
        return mContentProvider.bulkInsertEntities(uri, new Entity[]{entity})[0];
    }

    /** see {@link ContentProvider#bulkInsertEntities} */
    public Uri[] bulkInsertEntities(Uri uri, Entity[] entities) throws RemoteException {
        return mContentProvider.bulkInsertEntities(uri, entities);
        return mContentProvider.insertEntity(uri, entity);
    }

    /** see {@link ContentProvider#updateEntity} */
    public int updateEntity(Uri uri, Entity entity) throws RemoteException {
        return mContentProvider.bulkUpdateEntities(uri, new Entity[]{entity})[0];
        return mContentProvider.updateEntity(uri, entity);
    }

    /** see {@link ContentProvider#bulkUpdateEntities} */
    public int[] bulkUpdateEntities(Uri uri, Entity[] entities) throws RemoteException {
        return mContentProvider.bulkUpdateEntities(uri, entities);
    /** see {@link ContentProvider#applyBatch} */
    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
            throws RemoteException, OperationApplicationException {
        return mContentProvider.applyBatch(operations);
    }

    /**
+53 −45
Original line number Diff line number Diff line
@@ -154,37 +154,36 @@ abstract public class ContentProviderNative extends Binder implements IContentPr
                    return true;
                }

                case BULK_INSERT_ENTITIES_TRANSACTION:
                case INSERT_ENTITIES_TRANSACTION:
                {
                    data.enforceInterface(IContentProvider.descriptor);
                    Uri uri = Uri.CREATOR.createFromParcel(data);
                    String className = data.readString();
                    Class entityClass = Class.forName(className);
                    int numEntities = data.readInt();
                    Entity[] entities = new Entity[numEntities];
                    for (int i = 0; i < numEntities; i++) {
                        entities[i] = (Entity) data.readParcelable(entityClass.getClassLoader());
                    }
                    Uri[] uris = bulkInsertEntities(uri, entities);
                    Entity entity = (Entity) data.readParcelable(null);
                    Uri newUri = insertEntity(uri, entity);
                    reply.writeNoException();
                    reply.writeTypedArray(uris, 0);
                    Uri.writeToParcel(reply, newUri);
                    return true;
                }

                case BULK_UPDATE_ENTITIES_TRANSACTION:
                case UPDATE_ENTITIES_TRANSACTION:
                {
                    data.enforceInterface(IContentProvider.descriptor);
                    Uri uri = Uri.CREATOR.createFromParcel(data);
                    String className = data.readString();
                    Class entityClass = Class.forName(className);
                    int numEntities = data.readInt();
                    Entity[] entities = new Entity[numEntities];
                    for (int i = 0; i < numEntities; i++) {
                        entities[i] = (Entity) data.readParcelable(entityClass.getClassLoader());
                    }
                    int[] counts = bulkUpdateEntities(uri, entities);
                    Entity entity = (Entity) data.readParcelable(null);
                    int count = updateEntity(uri, entity);
                    reply.writeNoException();
                    reply.writeIntArray(counts);
                    reply.writeInt(count);
                    return true;
                }

                case APPLY_BATCH_TRANSACTION:
                {
                    data.enforceInterface(IContentProvider.descriptor);
                    final ContentProviderOperation[] operations =
                            data.createTypedArray(ContentProviderOperation.CREATOR);
                    final ContentProviderResult[] results = applyBatch(operations);
                    reply.writeNoException();
                    reply.writeTypedArray(results, 0);
                    return true;
                }

@@ -472,23 +471,18 @@ final class ContentProviderProxy implements IContentProvider
        return count;
    }

    public Uri[] bulkInsertEntities(Uri uri, Entity[] entities) throws RemoteException {
    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
            throws RemoteException, OperationApplicationException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();

        data.writeInterfaceToken(IContentProvider.descriptor);
        uri.writeToParcel(data, 0);
        data.writeString(entities[0].getClass().getName());
        data.writeInt(entities.length);
        for (Entity entity : entities) {
            data.writeParcelable(entity, 0);
        }
        data.writeTypedArray(operations, 0);
        mRemote.transact(IContentProvider.APPLY_BATCH_TRANSACTION, data, reply, 0);

        mRemote.transact(IContentProvider.BULK_INSERT_ENTITIES_TRANSACTION, data, reply, 0);

        DatabaseUtils.readExceptionFromParcel(reply);
        Uri[] results = new Uri[entities.length];
        reply.readTypedArray(results, Uri.CREATOR);
        DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(reply);
        final ContentProviderResult[] results =
                reply.createTypedArray(ContentProviderResult.CREATOR);

        data.recycle();
        reply.recycle();
@@ -496,28 +490,42 @@ final class ContentProviderProxy implements IContentProvider
        return results;
    }

    public int[] bulkUpdateEntities(Uri uri, Entity[] entities) throws RemoteException {
    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.writeString(entities[0].getClass().getName());
        data.writeInt(entities.length);
        for (Entity entity : entities) {
            data.writeParcelable(entity, 0);
        }

        mRemote.transact(IContentProvider.BULK_UPDATE_ENTITIES_TRANSACTION, data, reply, 0);
            mRemote.transact(IContentProvider.INSERT_ENTITIES_TRANSACTION, data, reply, 0);

            DatabaseUtils.readExceptionFromParcel(reply);
        int[] results = new int[entities.length];
        reply.readIntArray(results);

            return Uri.CREATOR.createFromParcel(reply);
        } finally {
            data.recycle();
            reply.recycle();
        }
    }

        return results;
    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)
+141 −5

File changed.

Preview size limit exceeded, changes collapsed.

Loading