From 23d36921384de8dbb9b31fa34497654ce90be506 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Thu, 10 Nov 2022 14:45:04 +0600 Subject: [PATCH 1/2] WIP: test various solutions issue: e/devices/backlog#328 -- GitLab From f77bb496ebdab3516bcb9173fab1da1ef04ba4d6 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Thu, 17 Nov 2022 10:18:02 +0600 Subject: [PATCH 2/2] Revert "AOSP/Gallery2 - Updated to sdkVersion 29. Deleted usage of GROUP BY from the WHERE clause. Changed all COUNT(*) to COUNT(_id)." This reverts commit 518d6526f942c178165c43454ac67e21e625742e. --- AndroidManifest.xml | 2 +- .../android/gallery3d/data/BucketHelper.java | 20 +++++++++++++++++-- .../android/gallery3d/data/LocalAlbum.java | 2 +- .../gallery3d/gadget/LocalPhotoSource.java | 2 +- .../android/photos/data/PhotoProvider.java | 6 +++--- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index eccc4a686..4c70aabd8 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -24,7 +24,7 @@ - + diff --git a/src/com/android/gallery3d/data/BucketHelper.java b/src/com/android/gallery3d/data/BucketHelper.java index 872e5501d..3418dafb7 100644 --- a/src/com/android/gallery3d/data/BucketHelper.java +++ b/src/com/android/gallery3d/data/BucketHelper.java @@ -52,6 +52,17 @@ class BucketHelper { private static final int INDEX_MEDIA_TYPE = 1; private static final int INDEX_BUCKET_NAME = 2; + // We want to order the albums by reverse chronological order. We abuse the + // "WHERE" parameter to insert a "GROUP BY" clause into the SQL statement. + // The template for "WHERE" parameter is like: + // SELECT ... FROM ... WHERE (%s) + // and we make it look like: + // SELECT ... FROM ... WHERE (1) GROUP BY 1,(2) + // The "(1)" means true. The "1,(2)" means the first two columns specified + // after SELECT. Note that because there is a ")" in the template, we use + // "(2" to match it. + private static final String BUCKET_GROUP_BY = "1) GROUP BY 1,(2"; + private static final String BUCKET_ORDER_BY = "MAX(datetaken) DESC"; // Before HoneyComb there is no Files table. Thus, we need to query the @@ -71,6 +82,9 @@ class BucketHelper { // PROJECTION_BUCKET so we can reuse the values defined before. private static final int INDEX_DATE_TAKEN = 1; + // When query from the Images or Video tables, we only need to group by BUCKET_ID. + private static final String BUCKET_GROUP_BY_IN_ONE_TABLE = "1) GROUP BY (1"; + public static BucketEntry[] loadBucketEntries( JobContext jc, ContentResolver resolver, int type) { if (ApiHelper.HAS_MEDIA_PROVIDER_FILES_TABLE) { @@ -83,7 +97,7 @@ class BucketHelper { private static void updateBucketEntriesFromTable(JobContext jc, ContentResolver resolver, Uri tableUri, HashMap buckets) { Cursor cursor = resolver.query(tableUri, PROJECTION_BUCKET_IN_ONE_TABLE, - null, null, null); + BUCKET_GROUP_BY_IN_ONE_TABLE, null, null); if (cursor == null) { Log.w(TAG, "cannot open media database: " + tableUri); return; @@ -132,7 +146,9 @@ class BucketHelper { JobContext jc, ContentResolver resolver, int type) { Uri uri = getFilesContentUri(); - Cursor cursor = resolver.query(uri, PROJECTION_BUCKET, null, null, null); + Cursor cursor = resolver.query(uri, + PROJECTION_BUCKET, BUCKET_GROUP_BY, + null, BUCKET_ORDER_BY); if (cursor == null) { Log.w(TAG, "cannot open local database: " + uri); return new BucketEntry[0]; diff --git a/src/com/android/gallery3d/data/LocalAlbum.java b/src/com/android/gallery3d/data/LocalAlbum.java index 3ebea816f..2592a8990 100644 --- a/src/com/android/gallery3d/data/LocalAlbum.java +++ b/src/com/android/gallery3d/data/LocalAlbum.java @@ -41,7 +41,7 @@ import java.util.ArrayList; // The media items need to be all images or all videos, but not both. public class LocalAlbum extends MediaSet { private static final String TAG = "LocalAlbum"; - private static final String[] COUNT_PROJECTION = { "COUNT(_id)" }; + private static final String[] COUNT_PROJECTION = { "count(*)" }; private static final int INVALID_COUNT = -1; private final String mWhereClause; diff --git a/src/com/android/gallery3d/gadget/LocalPhotoSource.java b/src/com/android/gallery3d/gadget/LocalPhotoSource.java index eb3abaa51..4e94e8d75 100644 --- a/src/com/android/gallery3d/gadget/LocalPhotoSource.java +++ b/src/com/android/gallery3d/gadget/LocalPhotoSource.java @@ -50,7 +50,7 @@ public class LocalPhotoSource implements WidgetSource { private static final Uri CONTENT_URI = Media.EXTERNAL_CONTENT_URI; private static final String DATE_TAKEN = Media.DATE_TAKEN; private static final String[] PROJECTION = {Media._ID}; - private static final String[] COUNT_PROJECTION = {"COUNT(_id)"}; + private static final String[] COUNT_PROJECTION = {"count(*)"}; /* We don't want to include the download directory */ private static final String SELECTION = String.format("%s != %s", Media.BUCKET_ID, getDownloadBucketId()); diff --git a/src/com/android/photos/data/PhotoProvider.java b/src/com/android/photos/data/PhotoProvider.java index 84c35190c..d4310ca95 100644 --- a/src/com/android/photos/data/PhotoProvider.java +++ b/src/com/android/photos/data/PhotoProvider.java @@ -218,16 +218,16 @@ public class PhotoProvider extends SQLiteContentProvider { + Albums.TABLE; protected static final String SELECT_PHOTO_ID = "SELECT " + Photos._ID + " FROM " + Photos.TABLE; - protected static final String SELECT_PHOTO_COUNT = "SELECT COUNT(_id) FROM " + Photos.TABLE; + protected static final String SELECT_PHOTO_COUNT = "SELECT COUNT(*) FROM " + Photos.TABLE; protected static final String DELETE_PHOTOS = "DELETE FROM " + Photos.TABLE; protected static final String DELETE_METADATA = "DELETE FROM " + Metadata.TABLE; - protected static final String SELECT_METADATA_COUNT = "SELECT COUNT(_id) FROM " + Metadata.TABLE; + protected static final String SELECT_METADATA_COUNT = "SELECT COUNT(*) FROM " + Metadata.TABLE; protected static final String WHERE = " WHERE "; protected static final String IN = " IN "; protected static final String NESTED_SELECT_START = "("; protected static final String NESTED_SELECT_END = ")"; protected static final String[] PROJECTION_COUNT = { - "COUNT(_id)" + "COUNT(*)" }; /** -- GitLab