summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/Thumbnail.java
diff options
context:
space:
mode:
authorWu-cheng Li <wuchengli@google.com>2011-09-12 08:02:18 +0800
committerWu-cheng Li <wuchengli@google.com>2011-09-12 08:21:50 +0800
commit382b51fa8f512d7f5d5163715eeb85bbfd0a02c7 (patch)
tree27c3d0a162b61b49c147ec3832d1ff3f25a7ecff /src/com/android/camera/Thumbnail.java
parente164996caf656a9b966e828dee5296c5b328f364 (diff)
downloadpackages_apps_LegacyCamera-382b51fa8f512d7f5d5163715eeb85bbfd0a02c7.zip
packages_apps_LegacyCamera-382b51fa8f512d7f5d5163715eeb85bbfd0a02c7.tar.gz
packages_apps_LegacyCamera-382b51fa8f512d7f5d5163715eeb85bbfd0a02c7.tar.bz2
The last thumbnail can be an image or video.
Query the content resolver with the last image and the last video. Show the thumbnail of the one that has the latest dateTaken. bug:5187868 Change-Id: I51ee4ece8f33aaec46913aad9b2427b43c31c1bb
Diffstat (limited to 'src/com/android/camera/Thumbnail.java')
-rw-r--r--src/com/android/camera/Thumbnail.java69
1 files changed, 50 insertions, 19 deletions
diff --git a/src/com/android/camera/Thumbnail.java b/src/com/android/camera/Thumbnail.java
index 01569c5..d35b966 100644
--- a/src/com/android/camera/Thumbnail.java
+++ b/src/com/android/camera/Thumbnail.java
@@ -131,11 +131,52 @@ public class Thumbnail {
return createThumbnail(uri, bitmap, 0);
}
- public static Thumbnail getLastImageThumbnail(ContentResolver resolver) {
+ public static Thumbnail getLastThumbnail(ContentResolver resolver) {
+ Media image = getLastImageThumbnail(resolver);
+ Media video = getLastVideoThumbnail(resolver);
+ if (image == null && video == null) return null;
+
+ Bitmap bitmap = null;
+ Media lastMedia;
+ // If there is only image or video, get its thumbnail. If both exist,
+ // get the thumbnail of the one that is newer.
+ if (image != null && (video == null || image.dateTaken >= video.dateTaken)) {
+ bitmap = Images.Thumbnails.getThumbnail(resolver, image.id,
+ Images.Thumbnails.MINI_KIND, null);
+ lastMedia = image;
+ } else {
+ bitmap = Video.Thumbnails.getThumbnail(resolver, video.id,
+ Video.Thumbnails.MINI_KIND, null);
+ lastMedia = video;
+ }
+
+ // Ensure database and storage are in sync.
+ if (Util.isUriValid(lastMedia.uri, resolver)) {
+ return createThumbnail(lastMedia.uri, bitmap, lastMedia.orientation);
+ }
+ return null;
+ }
+
+ private static class Media {
+ public Media(long id, int orientation, long dateTaken, Uri uri) {
+ this.id = id;
+ this.orientation = orientation;
+ this.dateTaken = dateTaken;
+ this.uri = uri;
+ }
+
+ public final long id;
+ public final int orientation;
+ public final long dateTaken;
+ public final Uri uri;
+ }
+
+ public static Media getLastImageThumbnail(ContentResolver resolver) {
Uri baseUri = Images.Media.EXTERNAL_CONTENT_URI;
Uri query = baseUri.buildUpon().appendQueryParameter("limit", "1").build();
- String[] projection = new String[] {ImageColumns._ID, ImageColumns.ORIENTATION};
+ String[] projection = new String[] {ImageColumns._ID, ImageColumns.ORIENTATION,
+ ImageColumns.DATE_TAKEN};
String selection = ImageColumns.MIME_TYPE + "='image/jpeg' AND " +
ImageColumns.BUCKET_ID + '=' + Storage.BUCKET_ID;
String order = ImageColumns.DATE_TAKEN + " DESC," + ImageColumns._ID + " DESC";
@@ -145,14 +186,8 @@ public class Thumbnail {
cursor = resolver.query(query, projection, selection, null, order);
if (cursor != null && cursor.moveToFirst()) {
long id = cursor.getLong(0);
- int orientation = cursor.getInt(1);
- Bitmap bitmap = Images.Thumbnails.getThumbnail(resolver, id,
- Images.Thumbnails.MINI_KIND, null);
- Uri uri = ContentUris.withAppendedId(baseUri, id);
- // Ensure there's no OOM. Ensure database and storage are in sync.
- if (Util.isUriValid(uri, resolver)) {
- return createThumbnail(uri, bitmap, orientation);
- }
+ return new Media(id, cursor.getInt(1), cursor.getLong(2),
+ ContentUris.withAppendedId(baseUri, id));
}
} finally {
if (cursor != null) {
@@ -162,11 +197,12 @@ public class Thumbnail {
return null;
}
- public static Thumbnail getLastVideoThumbnail(ContentResolver resolver) {
+ private static Media getLastVideoThumbnail(ContentResolver resolver) {
Uri baseUri = Video.Media.EXTERNAL_CONTENT_URI;
Uri query = baseUri.buildUpon().appendQueryParameter("limit", "1").build();
- String[] projection = new String[] {VideoColumns._ID, MediaColumns.DATA};
+ String[] projection = new String[] {VideoColumns._ID, MediaColumns.DATA,
+ VideoColumns.DATE_TAKEN};
String selection = VideoColumns.BUCKET_ID + '=' + Storage.BUCKET_ID;
String order = VideoColumns.DATE_TAKEN + " DESC," + VideoColumns._ID + " DESC";
@@ -176,13 +212,8 @@ public class Thumbnail {
if (cursor != null && cursor.moveToFirst()) {
Log.d(TAG, "getLastVideoThumbnail: " + cursor.getString(1));
long id = cursor.getLong(0);
- Bitmap bitmap = Video.Thumbnails.getThumbnail(resolver, id,
- Video.Thumbnails.MINI_KIND, null);
- Uri uri = ContentUris.withAppendedId(baseUri, id);
- // Ensure there's no OOM. Ensure database and storage are in sync.
- if (Util.isUriValid(uri, resolver)) {
- return createThumbnail(uri, bitmap, 0);
- }
+ return new Media(id, 0, cursor.getLong(2),
+ ContentUris.withAppendedId(baseUri, id));
}
} finally {
if (cursor != null) {