import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.media.ExifInterface;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.AsyncTask;
public static ThumbnailLocalGenerationTask getBitmapLocalWorkerTask(ImageView imageView) {
if (imageView != null) {
final Drawable drawable = imageView.getDrawable();
- if (drawable instanceof AsyncDrawable) {
+ if (drawable instanceof AsyncLocalDrawable) {
final AsyncLocalDrawable asyncDrawable = (AsyncLocalDrawable) drawable;
return asyncDrawable.getBitmapWorkerTask();
}
}
public static class ThumbnailLocalGenerationTask extends AsyncTask<File, Void, Bitmap> {
- private final WeakReference<ImageView> mImageViewReference;
+ private final WeakReference<ImageView> mImageViewLocalReference;
private File mFile;
public ThumbnailLocalGenerationTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
- mImageViewReference = new WeakReference<ImageView>(imageView);
+ mImageViewLocalReference = new WeakReference<ImageView>(imageView);
}
// Decode image in background.
bitmap = null;
}
- if (mImageViewReference != null && bitmap != null) {
- final ImageView imageView = mImageViewReference.get();
+ if (mImageViewLocalReference != null && bitmap != null) {
+ final ImageView imageView = mImageViewLocalReference.get();
final ThumbnailLocalGenerationTask bitmapWorkerTask = getBitmapLocalWorkerTask(imageView);
if (this == bitmapWorkerTask && imageView != null) {
if (imageView.getTag().equals(mFile.hashCode())) {
if (bitmap != null) {
thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
+
+ // Rotate image, obeying exif tag
+ thumbnail = BitmapUtils.rotateImage(thumbnail, mFile.getStoragePath());
// Add thumbnail to cache
addBitmapToCache(imageKey, thumbnail);
}
public static class AsyncLocalDrawable extends BitmapDrawable {
- private final WeakReference<ThumbnailLocalGenerationTask> bitmapWorkerTaskReference;
+ private final WeakReference<ThumbnailLocalGenerationTask> bitmapWorkerLocalTaskReference;
public AsyncLocalDrawable(Resources res, Bitmap bitmap, ThumbnailLocalGenerationTask bitmapWorkerTask) {
super(res, bitmap);
- bitmapWorkerTaskReference =
+ bitmapWorkerLocalTaskReference =
new WeakReference<ThumbnailLocalGenerationTask>(bitmapWorkerTask);
}
public ThumbnailLocalGenerationTask getBitmapWorkerTask() {
- return bitmapWorkerTaskReference.get();
+ return bitmapWorkerLocalTaskReference.get();
}
}
mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads
}
}
-
+
}