Loading core/java/android/provider/DocumentsContract.java +19 −31 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.graphics.Bitmap; import android.graphics.ImageDecoder; import android.graphics.Point; import android.media.ExifInterface; import android.media.MediaFile; import android.net.Uri; import android.os.Build; import android.os.Bundle; Loading Loading @@ -1681,11 +1680,13 @@ public final class DocumentsContract { public static AssetFileDescriptor openImageThumbnail(File file) throws FileNotFoundException { final ParcelFileDescriptor pfd = ParcelFileDescriptor.open( file, ParcelFileDescriptor.MODE_READ_ONLY); Bundle extras = null; try { final ExifInterface exif = new ExifInterface(file.getAbsolutePath()); final long[] thumb = exif.getThumbnailRange(); if (thumb != null) { // If we use thumb to decode, we need to handle the rotation by ourselves. Bundle extras = null; switch (exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1)) { case ExifInterface.ORIENTATION_ROTATE_90: extras = new Bundle(1); Loading @@ -1701,26 +1702,13 @@ public final class DocumentsContract { break; } final long[] thumb = exif.getThumbnailRange(); if (thumb != null) { return new AssetFileDescriptor(pfd, thumb[0], thumb[1], extras); } } catch (IOException e) { } // Use ImageDecoder to do full image decode of heif format file // will have right orientation. So, we don't need to add orientation // information into extras. final String mimeType = MediaFile.getMimeTypeForFile(file.getName()); if (mimeType.equals("image/heif") || mimeType.equals("image/heif-sequence") || mimeType.equals("image/heic") || mimeType.equals("image/heic-sequence")) { return new AssetFileDescriptor(pfd, 0 /* startOffset */, AssetFileDescriptor.UNKNOWN_LENGTH, null /* extras */); } return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH, extras); // Do full file decoding, we don't need to handle the orientation return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH, null); } private static void rethrowIfNecessary(Exception e) throws FileNotFoundException { Loading media/java/android/media/ThumbnailUtils.java +2 −8 Original line number Diff line number Diff line Loading @@ -265,13 +265,10 @@ public class ThumbnailUtils { } } boolean isHeifFile = false; if (mimeType.equals("image/heif") || mimeType.equals("image/heif-sequence") || mimeType.equals("image/heic") || mimeType.equals("image/heic-sequence")) { isHeifFile = true; try (MediaMetadataRetriever retriever = new MediaMetadataRetriever()) { retriever.setDataSource(file.getAbsolutePath()); bitmap = retriever.getThumbnailImageAtIndex(-1, Loading @@ -298,12 +295,9 @@ public class ThumbnailUtils { if (bitmap == null) { bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(file), resizer); // Use ImageDecoder to do full image decode of heif format file // will have right orientation. Don't rotate the bitmap again. if (isHeifFile) { // Use ImageDecoder to do full file decoding, we don't need to handle the orientation return bitmap; } } // Transform the bitmap if the orientation of the image is not 0. if (orientation != 0 && bitmap != null) { Loading Loading
core/java/android/provider/DocumentsContract.java +19 −31 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.graphics.Bitmap; import android.graphics.ImageDecoder; import android.graphics.Point; import android.media.ExifInterface; import android.media.MediaFile; import android.net.Uri; import android.os.Build; import android.os.Bundle; Loading Loading @@ -1681,11 +1680,13 @@ public final class DocumentsContract { public static AssetFileDescriptor openImageThumbnail(File file) throws FileNotFoundException { final ParcelFileDescriptor pfd = ParcelFileDescriptor.open( file, ParcelFileDescriptor.MODE_READ_ONLY); Bundle extras = null; try { final ExifInterface exif = new ExifInterface(file.getAbsolutePath()); final long[] thumb = exif.getThumbnailRange(); if (thumb != null) { // If we use thumb to decode, we need to handle the rotation by ourselves. Bundle extras = null; switch (exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1)) { case ExifInterface.ORIENTATION_ROTATE_90: extras = new Bundle(1); Loading @@ -1701,26 +1702,13 @@ public final class DocumentsContract { break; } final long[] thumb = exif.getThumbnailRange(); if (thumb != null) { return new AssetFileDescriptor(pfd, thumb[0], thumb[1], extras); } } catch (IOException e) { } // Use ImageDecoder to do full image decode of heif format file // will have right orientation. So, we don't need to add orientation // information into extras. final String mimeType = MediaFile.getMimeTypeForFile(file.getName()); if (mimeType.equals("image/heif") || mimeType.equals("image/heif-sequence") || mimeType.equals("image/heic") || mimeType.equals("image/heic-sequence")) { return new AssetFileDescriptor(pfd, 0 /* startOffset */, AssetFileDescriptor.UNKNOWN_LENGTH, null /* extras */); } return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH, extras); // Do full file decoding, we don't need to handle the orientation return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH, null); } private static void rethrowIfNecessary(Exception e) throws FileNotFoundException { Loading
media/java/android/media/ThumbnailUtils.java +2 −8 Original line number Diff line number Diff line Loading @@ -265,13 +265,10 @@ public class ThumbnailUtils { } } boolean isHeifFile = false; if (mimeType.equals("image/heif") || mimeType.equals("image/heif-sequence") || mimeType.equals("image/heic") || mimeType.equals("image/heic-sequence")) { isHeifFile = true; try (MediaMetadataRetriever retriever = new MediaMetadataRetriever()) { retriever.setDataSource(file.getAbsolutePath()); bitmap = retriever.getThumbnailImageAtIndex(-1, Loading @@ -298,12 +295,9 @@ public class ThumbnailUtils { if (bitmap == null) { bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(file), resizer); // Use ImageDecoder to do full image decode of heif format file // will have right orientation. Don't rotate the bitmap again. if (isHeifFile) { // Use ImageDecoder to do full file decoding, we don't need to handle the orientation return bitmap; } } // Transform the bitmap if the orientation of the image is not 0. if (orientation != 0 && bitmap != null) { Loading