diff options
author | George Mount <mount@google.com> | 2013-03-07 16:56:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-03-07 16:56:23 +0000 |
commit | 2678d9626f3efc6b0728de52c193598ecef02a8a (patch) | |
tree | 0ef1f5e9578a37aff234372c1a4095d88dd00aae /src/com | |
parent | 74fe1bc1bcbcef4a49eb68b4ef985d80912f7da9 (diff) | |
parent | 3360e27e1d0e37f803c10f27257a81b2600b209c (diff) | |
download | android_packages_apps_Snap-2678d9626f3efc6b0728de52c193598ecef02a8a.tar.gz android_packages_apps_Snap-2678d9626f3efc6b0728de52c193598ecef02a8a.tar.bz2 android_packages_apps_Snap-2678d9626f3efc6b0728de52c193598ecef02a8a.zip |
Merge "Add inserts to PhotoProvider." into gb-ub-photos-bryce
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/photos/data/PhotoProvider.java | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/src/com/android/photos/data/PhotoProvider.java b/src/com/android/photos/data/PhotoProvider.java index a4a29c3d8..a4fe8fdd2 100644 --- a/src/com/android/photos/data/PhotoProvider.java +++ b/src/com/android/photos/data/PhotoProvider.java @@ -16,6 +16,7 @@ package com.android.photos.data; import android.content.ContentProvider; +import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; @@ -305,9 +306,6 @@ public class PhotoProvider extends ContentProvider { @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int match = matchUri(uri); - if (match == MATCH_IMAGE) { - throw new IllegalArgumentException("Cannot delete from image cache"); - } selection = addIdToSelection(match, selection); selectionArgs = addIdToSelectionArgs(match, uri, selectionArgs); List<Uri> changeUris = new ArrayList<Uri>(); @@ -339,8 +337,24 @@ public class PhotoProvider extends ContentProvider { @Override public Uri insert(Uri uri, ContentValues values) { - // Cannot insert into this ContentProvider - return null; + int match = matchUri(uri); + validateMatchTable(match); + String table = getTableFromMatch(match, uri); + SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + Uri insertedUri = null; + db.beginTransaction(); + try { + long id = db.insert(table, null, values); + if (id != -1) { + // uri already matches the table. + insertedUri = ContentUris.withAppendedId(uri, id); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + notifyChanges(insertedUri); + return insertedUri; } @Override @@ -469,22 +483,15 @@ public class PhotoProvider extends ContentProvider { } private int modifyMetadata(SQLiteDatabase db, ContentValues values) { - String[] selectionArgs = { - values.getAsString(Metadata.PHOTO_ID), - values.getAsString(Metadata.KEY), - }; int rowCount; if (values.get(Metadata.VALUE) == null) { + String[] selectionArgs = { + values.getAsString(Metadata.PHOTO_ID), values.getAsString(Metadata.KEY), + }; rowCount = db.delete(Metadata.TABLE, WHERE_METADATA_ID, selectionArgs); } else { - rowCount = (int) DatabaseUtils.queryNumEntries(db, Metadata.TABLE, WHERE_METADATA_ID, - selectionArgs); - if (rowCount > 0) { - db.update(Metadata.TABLE, values, WHERE_METADATA_ID, selectionArgs); - } else { - db.insert(Metadata.TABLE, null, values); - rowCount = 1; - } + long rowId = db.replace(Metadata.TABLE, null, values); + rowCount = (rowId == -1) ? 0 : 1; } return rowCount; } @@ -494,6 +501,9 @@ public class PhotoProvider extends ContentProvider { if (match == UriMatcher.NO_MATCH) { throw unknownUri(uri); } + if (match == MATCH_IMAGE || match == MATCH_ALBUM_COVER) { + throw new IllegalArgumentException("Operation not allowed on image cache database"); + } return match; } @@ -555,4 +565,15 @@ public class PhotoProvider extends ContentProvider { changeUris.add(Metadata.CONTENT_URI); } } + + private static void validateMatchTable(int match) { + switch (match) { + case MATCH_PHOTO: + case MATCH_ALBUM: + case MATCH_METADATA: + break; + default: + throw new IllegalArgumentException("Operation not allowed on an existing row."); + } + } } |