summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2013-03-12 20:53:21 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-03-12 20:53:22 +0000
commit9a8bf36157644e4f52c9bb3561575e6bdfcdb36a (patch)
tree73ea48800e4cb5acd5327fbd3dc7422089e8c5a5
parent2594ea2c0c650c6f0d03ce5575315dfd0787d189 (diff)
parent9bd3f529ee0dc79c9c9c5c9aa89309336e232a49 (diff)
downloadandroid_packages_apps_Snap-9a8bf36157644e4f52c9bb3561575e6bdfcdb36a.tar.gz
android_packages_apps_Snap-9a8bf36157644e4f52c9bb3561575e6bdfcdb36a.tar.bz2
android_packages_apps_Snap-9a8bf36157644e4f52c9bb3561575e6bdfcdb36a.zip
Merge "Add delete cascade for Accounts." into gb-ub-photos-bryce
-rw-r--r--src/com/android/photos/data/PhotoProvider.java21
-rw-r--r--tests/src/com/android/photos/data/PhotoDatabaseUtils.java5
-rw-r--r--tests/src/com/android/photos/data/PhotoProviderTest.java36
3 files changed, 56 insertions, 6 deletions
diff --git a/src/com/android/photos/data/PhotoProvider.java b/src/com/android/photos/data/PhotoProvider.java
index c4cc903dc..084401d16 100644
--- a/src/com/android/photos/data/PhotoProvider.java
+++ b/src/com/android/photos/data/PhotoProvider.java
@@ -502,15 +502,17 @@ public class PhotoProvider extends SQLiteContentProvider {
String[] selectionArgs, Uri uri) {
switch (match) {
case MATCH_PHOTO:
- case MATCH_PHOTO_ID: {
+ case MATCH_PHOTO_ID:
deleteCascadeMetadata(db, selection, selectionArgs);
break;
- }
case MATCH_ALBUM:
- case MATCH_ALBUM_ID: {
+ case MATCH_ALBUM_ID:
deleteCascadePhotos(db, selection, selectionArgs);
break;
- }
+ case MATCH_ACCOUNT:
+ case MATCH_ACCOUNT_ID:
+ deleteCascadeAccounts(db, selection, selectionArgs);
+ break;
}
String table = getTableFromMatch(match, uri);
int deleted = db.delete(table, selection, selectionArgs);
@@ -520,6 +522,17 @@ public class PhotoProvider extends SQLiteContentProvider {
return deleted;
}
+ private void deleteCascadeAccounts(SQLiteDatabase db, String accountSelect, String[] args) {
+ // Delete all photos associated with the account
+ String photoWhere = nestWhere(Photos.ACCOUNT_ID, Accounts.TABLE, accountSelect);
+ deleteCascadeMetadata(db, photoWhere, args);
+ db.delete(Photos.TABLE, photoWhere, args);
+
+ // Delete all albums that are associated with this account
+ String albumWhere = nestWhere(Albums.ACCOUNT_ID, Accounts.TABLE, accountSelect);
+ db.delete(Albums.TABLE, albumWhere, args);
+ }
+
private void deleteCascadePhotos(SQLiteDatabase db, String albumSelect,
String[] selectArgs) {
String photoWhere = nestWhere(Photos.ALBUM_ID, Albums.TABLE, albumSelect);
diff --git a/tests/src/com/android/photos/data/PhotoDatabaseUtils.java b/tests/src/com/android/photos/data/PhotoDatabaseUtils.java
index 97db8bf7d..f7a46d419 100644
--- a/tests/src/com/android/photos/data/PhotoDatabaseUtils.java
+++ b/tests/src/com/android/photos/data/PhotoDatabaseUtils.java
@@ -65,6 +65,7 @@ public class PhotoDatabaseUtils {
private static String SELECTION_ALBUM_PARENT_ID = Albums.PARENT_ID + " = ?";
private static String SELECTION_PHOTO_ALBUM_ID = Photos.ALBUM_ID + " = ?";
+ private static String SELECTION_ACCOUNT_ID = Accounts.ACCOUNT_NAME + " = ?";
public static long queryAlbumIdFromParentId(SQLiteDatabase db, long parentId) {
return queryId(db, Albums.TABLE, PROJECTION_ALBUMS, SELECTION_ALBUM_PARENT_ID, parentId);
@@ -74,6 +75,10 @@ public class PhotoDatabaseUtils {
return queryId(db, Photos.TABLE, PROJECTION_PHOTOS, SELECTION_PHOTO_ALBUM_ID, albumId);
}
+ public static long queryAccountIdFromName(SQLiteDatabase db, String accountName) {
+ return queryId(db, Accounts.TABLE, PROJECTION_ACCOUNTS, SELECTION_ACCOUNT_ID, accountName);
+ }
+
public static long queryId(SQLiteDatabase db, String table, String[] projection,
String selection, Object parameter) {
String paramString = parameter == null ? null : parameter.toString();
diff --git a/tests/src/com/android/photos/data/PhotoProviderTest.java b/tests/src/com/android/photos/data/PhotoProviderTest.java
index 39abff441..685946ef0 100644
--- a/tests/src/com/android/photos/data/PhotoProviderTest.java
+++ b/tests/src/com/android/photos/data/PhotoProviderTest.java
@@ -28,6 +28,7 @@ import android.os.RemoteException;
import android.provider.BaseColumns;
import android.test.ProviderTestCase2;
+import com.android.photos.data.PhotoProvider.Accounts;
import com.android.photos.data.PhotoProvider.Albums;
import com.android.photos.data.PhotoProvider.Metadata;
import com.android.photos.data.PhotoProvider.Photos;
@@ -43,6 +44,7 @@ public class PhotoProviderTest extends ProviderTestCase2<PhotoProvider> {
private static final long ALBUM_PARENT_ID = 100;
private static final String META_KEY = "mykey";
private static final String META_VALUE = "myvalue";
+ private static final String ACCOUNT_NAME = "foo@bar.com";
private static final Uri NO_TABLE_URI = PhotoProvider.BASE_CONTENT_URI;
private static final Uri BAD_TABLE_URI = Uri.withAppendedPath(PhotoProvider.BASE_CONTENT_URI,
@@ -55,6 +57,7 @@ public class PhotoProviderTest extends ProviderTestCase2<PhotoProvider> {
private long mAlbumId;
private long mPhotoId;
private long mMetadataId;
+ private long mAccountId;
private SQLiteOpenHelper mDBHelper;
private ContentResolver mResolver;
@@ -74,11 +77,13 @@ public class PhotoProviderTest extends ProviderTestCase2<PhotoProvider> {
SQLiteDatabase db = mDBHelper.getWritableDatabase();
db.beginTransaction();
try {
+ PhotoDatabaseUtils.insertAccount(db, ACCOUNT_NAME);
+ mAccountId = PhotoDatabaseUtils.queryAccountIdFromName(db, ACCOUNT_NAME);
PhotoDatabaseUtils.insertAlbum(db, ALBUM_PARENT_ID, ALBUM_TITLE,
- Albums.VISIBILITY_PRIVATE, 100L);
+ Albums.VISIBILITY_PRIVATE, mAccountId);
mAlbumId = PhotoDatabaseUtils.queryAlbumIdFromParentId(db, ALBUM_PARENT_ID);
PhotoDatabaseUtils.insertPhoto(db, 100, 100, System.currentTimeMillis(), mAlbumId,
- MIME_TYPE, 100L);
+ MIME_TYPE, mAccountId);
mPhotoId = PhotoDatabaseUtils.queryPhotoIdFromAlbumId(db, mAlbumId);
PhotoDatabaseUtils.insertMetadata(db, mPhotoId, META_KEY, META_VALUE);
String[] projection = {
@@ -180,6 +185,33 @@ public class PhotoProviderTest extends ProviderTestCase2<PhotoProvider> {
cursor.close();
}
+ public void testDeleteAccountCascade() {
+ Uri accountUri = ContentUris.withAppendedId(Accounts.CONTENT_URI, mAccountId);
+ SQLiteDatabase db = mDBHelper.getWritableDatabase();
+ db.beginTransaction();
+ PhotoDatabaseUtils.insertPhoto(db, 100, 100, System.currentTimeMillis(), null,
+ "image/jpeg", mAccountId);
+ PhotoDatabaseUtils.insertPhoto(db, 100, 100, System.currentTimeMillis(), null,
+ "image/jpeg", 0L);
+ PhotoDatabaseUtils.insertAlbum(db, null, "title", Albums.VISIBILITY_PRIVATE, 10630L);
+ db.setTransactionSuccessful();
+ db.endTransaction();
+ // ensure all pictures are there:
+ Cursor cursor = mResolver.query(Photos.CONTENT_URI, null, null, null, null);
+ assertEquals(3, cursor.getCount());
+ cursor.close();
+ // delete the account
+ assertEquals(1, mResolver.delete(accountUri, null, null));
+ // now ensure that all associated photos were deleted
+ cursor = mResolver.query(Photos.CONTENT_URI, null, null, null, null);
+ assertEquals(1, cursor.getCount());
+ cursor.close();
+ // now ensure all associated albums were deleted.
+ cursor = mResolver.query(Albums.CONTENT_URI, null, null, null, null);
+ assertEquals(1, cursor.getCount());
+ cursor.close();
+ }
+
public void testGetType() {
// We don't return types for albums
assertNull(mResolver.getType(Albums.CONTENT_URI));