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

Commit 03d94907 authored by Fred Quintana's avatar Fred Quintana
Browse files

- create a new generic ISyncAdapter implementation, SyncAdapterNew

 - change the applyBatch to take an ArrayList rather than an []
 - change Entity to be a final flass that contains ContentValues
 - remove the ability to update/insert Entities by a ContentProviderOperation
parent b0d031ad
Loading
Loading
Loading
Loading
+224 −54
Original line number Diff line number Diff line
@@ -1145,33 +1145,33 @@
 visibility="public"
>
</field>
<field name="WRITE_GSERVICES"
<field name="WRITE_EXTERNAL_STORAGE"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.permission.WRITE_GSERVICES&quot;"
 value="&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="WRITE_OWNER_DATA"
<field name="WRITE_GSERVICES"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.permission.WRITE_OWNER_DATA&quot;"
 value="&quot;android.permission.WRITE_GSERVICES&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="WRITE_EXTERNAL_STORAGE"
<field name="WRITE_OWNER_DATA"
 type="java.lang.String"
 transient="false"
 volatile="false"
 value="&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;"
 value="&quot;android.permission.WRITE_OWNER_DATA&quot;"
 static="true"
 final="true"
 deprecated="not deprecated"
@@ -28029,7 +28029,7 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="operations" type="android.content.ContentProviderOperation[]">
<parameter name="operations" type="java.util.ArrayList&lt;android.content.ContentProviderOperation&gt;">
</parameter>
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
@@ -28373,7 +28373,7 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="operations" type="android.content.ContentProviderOperation[]">
<parameter name="operations" type="java.util.ArrayList&lt;android.content.ContentProviderOperation&gt;">
</parameter>
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
@@ -28808,7 +28808,7 @@
 visibility="public"
>
</method>
<method name="withEntity"
<method name="withExpectedCount"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
 native="false"
@@ -28818,10 +28818,10 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="entity" type="android.content.Entity">
<parameter name="count" type="int">
</parameter>
</method>
<method name="withExpectedCount"
<method name="withSelection"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
 native="false"
@@ -28831,10 +28831,12 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="count" type="int">
<parameter name="selection" type="java.lang.String">
</parameter>
<parameter name="selectionArgs" type="java.lang.String[]">
</parameter>
</method>
<method name="withSelection"
<method name="withSelectionBackReference"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
 native="false"
@@ -28844,12 +28846,12 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="selection" type="java.lang.String">
<parameter name="selectionArgIndex" type="int">
</parameter>
<parameter name="selectionArgs" type="java.lang.String[]">
<parameter name="previousResult" type="int">
</parameter>
</method>
<method name="withSelectionBackReferences"
<method name="withValueBackReference"
 return="android.content.ContentProviderOperation.Builder"
 abstract="false"
 native="false"
@@ -28859,7 +28861,9 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="backReferences" type="java.util.Map&lt;java.lang.Integer, java.lang.Integer&gt;">
<parameter name="key" type="java.lang.String">
</parameter>
<parameter name="previousResult" type="int">
</parameter>
</method>
<method name="withValueBackReferences"
@@ -29126,7 +29130,7 @@
>
<parameter name="authority" type="java.lang.String">
</parameter>
<parameter name="operations" type="android.content.ContentProviderOperation[]">
<parameter name="operations" type="java.util.ArrayList&lt;android.content.ContentProviderOperation&gt;">
</parameter>
<exception name="OperationApplicationException" type="android.content.OperationApplicationException">
</exception>
@@ -29206,23 +29210,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="true"
 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="notifyChange"
 return="void"
 abstract="false"
@@ -29442,23 +29429,6 @@
<parameter name="selectionArgs" type="java.lang.String[]">
</parameter>
</method>
<method name="updateEntity"
 return="int"
 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="entity" type="android.content.Entity">
</parameter>
<exception name="RemoteException" type="android.os.RemoteException">
</exception>
</method>
<method name="validateSyncExtrasBundle"
 return="void"
 abstract="false"
@@ -32623,9 +32593,9 @@
</interface>
<class name="Entity"
 extends="java.lang.Object"
 abstract="true"
 abstract="false"
 static="false"
 final="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
@@ -32638,7 +32608,123 @@
 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&lt;android.content.Entity.NamedContentValues&gt;"
 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"
@@ -44377,6 +44463,32 @@
<parameter name="columnIndex" type="int">
</parameter>
</method>
<method name="isFloat"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="columnIndex" type="int">
</parameter>
</method>
<method name="isLong"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="columnIndex" type="int">
</parameter>
</method>
<method name="isNull"
 return="boolean"
 abstract="false"
@@ -44390,6 +44502,19 @@
<parameter name="columnIndex" type="int">
</parameter>
</method>
<method name="isString"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="columnIndex" type="int">
</parameter>
</method>
<method name="setWindow"
 return="void"
 abstract="false"
@@ -45470,6 +45595,36 @@
<parameter name="col" type="int">
</parameter>
</method>
<method name="isFloat"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="row" type="int">
</parameter>
<parameter name="col" type="int">
</parameter>
</method>
<method name="isLong"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="row" type="int">
</parameter>
<parameter name="col" type="int">
</parameter>
</method>
<method name="isNull"
 return="boolean"
 abstract="false"
@@ -45485,6 +45640,21 @@
<parameter name="col" type="int">
</parameter>
</method>
<method name="isString"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="row" type="int">
</parameter>
<parameter name="col" type="int">
</parameter>
</method>
<method name="newFromParcel"
 return="android.database.CursorWindow"
 abstract="false"
+2 −2
Original line number Diff line number Diff line
@@ -406,7 +406,7 @@ public abstract class AbstractSyncableContentProvider extends SyncableContentPro
     * }
     * </pre>
     *
     * @hide This method should be used only when {@link #applyBatch} is not enough and must be
     * @hide This method should be used only when {@link ContentProvider#applyBatch} is not enough and must be
     * used with {@link #endBatch}.
     * e.g. If returned value has to be used during one transaction, this method might be useful.
     */
@@ -461,7 +461,7 @@ public abstract class AbstractSyncableContentProvider extends SyncableContentPro
        }
    }

    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
            throws OperationApplicationException {
        boolean successful = false;
        beginBatch();
+7 −5
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.ParcelFileDescriptor;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;

/**
 * Content providers are one of the primary building blocks of Android applications, providing
@@ -156,7 +157,7 @@ public abstract class ContentProvider implements ComponentCallbacks {
            return ContentProvider.this.insertEntity(uri, entities);
        }

        public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
        public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
                throws OperationApplicationException {
            for (ContentProviderOperation operation : operations) {
                if (operation.isReadOperation()) {
@@ -641,11 +642,12 @@ public abstract class ContentProvider implements ComponentCallbacks {
     * @throws OperationApplicationException thrown if an application fails.
     * See {@link ContentProviderOperation#apply} for more information.
     */
    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
            throws OperationApplicationException {
        ContentProviderResult[] results = new ContentProviderResult[operations.length];
        for (int i = 0; i < operations.length; i++) {
            results[i] = operations[i].apply(this, results, i);
        final int numOperations = operations.size();
        final ContentProviderResult[] results = new ContentProviderResult[numOperations];
        for (int i = 0; i < numOperations; i++) {
            results[i] = operations.get(i).apply(this, results, i);
        }
        return results;
    }
+2 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.ParcelFileDescriptor;
import android.content.res.AssetFileDescriptor;

import java.io.FileNotFoundException;
import java.util.ArrayList;

/**
 * The public interface object used to interact with a {@link ContentProvider}. This is obtained by
@@ -105,7 +106,7 @@ public class ContentProviderClient {
    }

    /** see {@link ContentProvider#applyBatch} */
    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
            throws RemoteException, OperationApplicationException {
        return mContentProvider.applyBatch(operations);
    }
+12 −4
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.os.ParcelFileDescriptor;
import android.os.Parcelable;

import java.io.FileNotFoundException;
import java.util.ArrayList;

/**
 * {@hide}
@@ -179,8 +180,12 @@ abstract public class ContentProviderNative extends Binder implements IContentPr
                case APPLY_BATCH_TRANSACTION:
                {
                    data.enforceInterface(IContentProvider.descriptor);
                    final ContentProviderOperation[] operations =
                            data.createTypedArray(ContentProviderOperation.CREATOR);
                    final int numOperations = data.readInt();
                    final ArrayList<ContentProviderOperation> operations =
                            new ArrayList<ContentProviderOperation>(numOperations);
                    for (int i = 0; i < numOperations; i++) {
                        operations.add(i, ContentProviderOperation.CREATOR.createFromParcel(data));
                    }
                    final ContentProviderResult[] results = applyBatch(operations);
                    reply.writeNoException();
                    reply.writeTypedArray(results, 0);
@@ -471,13 +476,16 @@ final class ContentProviderProxy implements IContentProvider
        return count;
    }

    public ContentProviderResult[] applyBatch(ContentProviderOperation[] operations)
    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
            throws RemoteException, OperationApplicationException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();

        data.writeInterfaceToken(IContentProvider.descriptor);
        data.writeTypedArray(operations, 0);
        data.writeInt(operations.size());
        for (ContentProviderOperation operation : operations) {
            operation.writeToParcel(data, 0);
        }
        mRemote.transact(IContentProvider.APPLY_BATCH_TRANSACTION, data, reply, 0);

        DatabaseUtils.readExceptionWithOperationApplicationExceptionFromParcel(reply);
Loading