summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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());