Created
June 25, 2014 02:02
-
-
Save wabzqem/9737284e38446f8bafeb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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