diff options
author | Wu-cheng Li <wuchengli@google.com> | 2011-09-12 08:02:18 +0800 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2011-09-12 08:21:50 +0800 |
commit | 382b51fa8f512d7f5d5163715eeb85bbfd0a02c7 (patch) | |
tree | 27c3d0a162b61b49c147ec3832d1ff3f25a7ecff /src/com/android/camera/Thumbnail.java | |
parent | e164996caf656a9b966e828dee5296c5b328f364 (diff) | |
download | packages_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.java | 69 |
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) { |