Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6e8116b authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Fix thumbnail's orienation issue" into qt-dev am: d580b03f" into qt-dev-plus-aosp

parents cb6e3d0e 13cacd59
Loading
Loading
Loading
Loading
+19 −31
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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 {
+2 −8
Original line number Diff line number Diff line
@@ -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,
@@ -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) {