Skip to content

Instantly share code, notes, and snippets.

@wabzqem
Created June 25, 2014 02:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wabzqem/9737284e38446f8bafeb to your computer and use it in GitHub Desktop.
Save wabzqem/9737284e38446f8bafeb to your computer and use it in GitHub Desktop.
diff --git a/picasso/src/main/java/com/squareup/picasso/BitmapHunter.java b/picasso/src/main/java/com/squareup/picasso/BitmapHunter.java
index 4a10575..b571590 100644
--- a/picasso/src/main/java/com/squareup/picasso/BitmapHunter.java
+++ b/picasso/src/main/java/com/squareup/picasso/BitmapHunter.java
@@ -21,6 +21,8 @@ import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.NetworkInfo;
import android.net.Uri;
+import android.os.Build;
+import android.provider.DocumentsContract;
import android.provider.MediaStore;
import java.io.IOException;
import java.io.PrintWriter;
@@ -287,7 +289,8 @@ abstract class BitmapHunter implements Runnable {
if (Contacts.CONTENT_URI.getHost().equals(uri.getHost()) //
&& !uri.getPathSegments().contains(Contacts.Photo.CONTENT_DIRECTORY)) {
return new ContactsPhotoBitmapHunter(context, picasso, dispatcher, cache, stats, action);
- } else if (MediaStore.AUTHORITY.equals(uri.getAuthority())) {
+ } else if (MediaStore.AUTHORITY.equals(uri.getAuthority()) ||
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {
return new MediaStoreBitmapHunter(context, picasso, dispatcher, cache, stats, action);
} else {
return new ContentStreamBitmapHunter(context, picasso, dispatcher, cache, stats, action);
diff --git a/picasso/src/main/java/com/squareup/picasso/MediaStoreBitmapHunter.java b/picasso/src/main/java/com/squareup/picasso/MediaStoreBitmapHunter.java
index 1c893e7..49aa518 100644
--- a/picasso/src/main/java/com/squareup/picasso/MediaStoreBitmapHunter.java
+++ b/picasso/src/main/java/com/squareup/picasso/MediaStoreBitmapHunter.java
@@ -21,6 +21,10 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.os.Build;
+import android.provider.DocumentsContract;
+import android.provider.MediaStore;
+
import java.io.IOException;
import static android.content.ContentUris.parseId;
@@ -45,7 +49,7 @@ class MediaStoreBitmapHunter extends ContentStreamBitmapHunter {
@Override Bitmap decode(Request data) throws IOException {
ContentResolver contentResolver = context.getContentResolver();
- setExifRotation(getExifOrientation(contentResolver, data.uri));
+ setExifRotation(getExifOrientation(contentResolver, data.uri, context));
String mimeType = contentResolver.getType(data.uri);
boolean isVideo = mimeType != null && mimeType.startsWith("video/");
@@ -92,13 +96,20 @@ class MediaStoreBitmapHunter extends ContentStreamBitmapHunter {
return FULL;
}
- static int getExifOrientation(ContentResolver contentResolver, Uri uri) {
+ static int getExifOrientation(ContentResolver contentResolver, Uri uri, Context context) {
Cursor cursor = null;
try {
- cursor = contentResolver.query(uri, CONTENT_ORIENTATION, null, null, null);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {
+ String id = DocumentsContract.getDocumentId(uri);
+ id = id.split(":")[1];
+ cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, CONTENT_ORIENTATION, MediaStore.Images.Media._ID + " = ?", new String[]{id}, null);
+ } else {
+ cursor = contentResolver.query(uri, CONTENT_ORIENTATION, null, null, null);
+ }
if (cursor == null || !cursor.moveToFirst()) {
return 0;
}
+ int orientation = cursor.getInt(0);
return cursor.getInt(0);
} catch (RuntimeException ignored) {
// If the orientation column doesn't exist, assume no rotation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment