summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--src/com/android/camera/Camera.java2
-rw-r--r--src/com/android/camera/Thumbnail.java69
-rw-r--r--src/com/android/camera/VideoCamera.java2
3 files changed, 52 insertions, 21 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 23dd6aa..2d66255 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -412,7 +412,7 @@ public class Camera extends ActivityBase implements FocusManager.Listener,
// Update last image if URI is invalid and the storage is ready.
if ((mThumbnail == null || !Util.isUriValid(mThumbnail.getUri(), mContentResolver))
&& mPicturesRemaining >= 0) {
- mThumbnail = Thumbnail.getLastImageThumbnail(mContentResolver);
+ mThumbnail = Thumbnail.getLastThumbnail(mContentResolver);
}
if (mThumbnail != null) {
mThumbnailView.setBitmap(mThumbnail.getBitmap());
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) {
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 33430f5..d178903 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -1686,7 +1686,7 @@ public class VideoCamera extends ActivityBase
private void updateThumbnailButton() {
if (mThumbnail == null || !Util.isUriValid(mThumbnail.getUri(), mContentResolver)) {
- mThumbnail = Thumbnail.getLastVideoThumbnail(mContentResolver);
+ mThumbnail = Thumbnail.getLastThumbnail(mContentResolver);
}
if (mThumbnail != null) {
mThumbnailView.setBitmap(mThumbnail.getBitmap());