diff options
Diffstat (limited to 'core/java/android/provider')
-rw-r--r-- | core/java/android/provider/ContactsContract.java | 9 | ||||
-rw-r--r-- | core/java/android/provider/SyncStateContract.java | 53 |
2 files changed, 61 insertions, 1 deletions
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index a318f08..31d43ee 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -29,6 +29,7 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.os.RemoteException; import android.text.TextUtils; +import android.util.Pair; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -72,6 +73,14 @@ public final class ContactsContract { } /** + * @see android.provider.SyncStateContract.Helpers#get + */ + public static Pair<Uri, byte[]> getWithUri(ContentProviderClient provider, Account account) + throws RemoteException { + return SyncStateContract.Helpers.getWithUri(provider, CONTENT_URI, account); + } + + /** * @see android.provider.SyncStateContract.Helpers#set */ public static void set(ContentProviderClient provider, Account account, byte[] data) diff --git a/core/java/android/provider/SyncStateContract.java b/core/java/android/provider/SyncStateContract.java index 5c93af0..e8177ca 100644 --- a/core/java/android/provider/SyncStateContract.java +++ b/core/java/android/provider/SyncStateContract.java @@ -20,9 +20,11 @@ import android.net.Uri; import android.content.ContentProviderClient; import android.content.ContentValues; import android.content.ContentProviderOperation; +import android.content.ContentUris; import android.accounts.Account; import android.database.Cursor; import android.os.RemoteException; +import android.util.Pair; /** * The ContentProvider contract for associating data with ana data array account. @@ -54,7 +56,7 @@ public class SyncStateContract { } public static final class Helpers { - private static final String[] DATA_PROJECTION = new String[]{Columns.DATA}; + private static final String[] DATA_PROJECTION = new String[]{Columns.DATA, Columns._ID}; private static final String SELECT_BY_ACCOUNT = Columns.ACCOUNT_NAME + "=? AND " + Columns.ACCOUNT_TYPE + "=?"; @@ -101,6 +103,38 @@ public class SyncStateContract { provider.insert(uri, values); } + public static Uri insert(ContentProviderClient provider, Uri uri, + Account account, byte[] data) throws RemoteException { + ContentValues values = new ContentValues(); + values.put(Columns.DATA, data); + values.put(Columns.ACCOUNT_NAME, account.name); + values.put(Columns.ACCOUNT_TYPE, account.type); + return provider.insert(uri, values); + } + + public static void update(ContentProviderClient provider, Uri uri, byte[] data) + throws RemoteException { + ContentValues values = new ContentValues(); + values.put(Columns.DATA, data); + provider.update(uri, values, null, null); + } + + public static Pair<Uri, byte[]> getWithUri(ContentProviderClient provider, Uri uri, + Account account) throws RemoteException { + Cursor c = provider.query(uri, DATA_PROJECTION, SELECT_BY_ACCOUNT, + new String[]{account.name, account.type}, null); + try { + if (c.moveToNext()) { + long rowId = c.getLong(1); + byte[] blob = c.getBlob(c.getColumnIndexOrThrow(Columns.DATA)); + return Pair.create(ContentUris.withAppendedId(uri, rowId), blob); + } + } finally { + c.close(); + } + return null; + } + /** * Creates and returns a ContentProviderOperation that assigns the data array as the * sync state for the given account. @@ -121,5 +155,22 @@ public class SyncStateContract { .withValues(values) .build(); } + + /** + * Creates and returns a ContentProviderOperation that assigns the data array as the + * sync state for the given account. + * @param uri the uri of the specific sync state to set + * @param data the byte[] that contains the sync state + * @return the new ContentProviderOperation that assigns the data array as the + * account's sync state + */ + public static ContentProviderOperation newUpdateOperation(Uri uri, byte[] data) { + ContentValues values = new ContentValues(); + values.put(Columns.DATA, data); + return ContentProviderOperation + .newUpdate(uri) + .withValues(values) + .build(); + } } } |