diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/ThumbnailFetcher.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/ThumbnailFetcher.kt index 98e44e135..7b5cdc2d1 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/ThumbnailFetcher.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/ThumbnailFetcher.kt @@ -146,7 +146,7 @@ class ThumbnailFetcher internal constructor( return try { var bitmap = target.get() - if (needRotationAfterGlide(mimeType)) { + if (needRotationAfterGlide(mimeType, pageId)) { bitmap = applyExifOrientation(context, bitmap, rotationDegrees, isFlipped) } bitmap diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/streams/ImageByteStreamHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/streams/ImageByteStreamHandler.kt index 54fc04f9d..2cb61ad99 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/streams/ImageByteStreamHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/streams/ImageByteStreamHandler.kt @@ -145,7 +145,7 @@ class ImageByteStreamHandler(private val context: Context, private val arguments .submit() try { var bitmap = withContext(Dispatchers.IO) { target.get() } - if (needRotationAfterGlide(mimeType)) { + if (needRotationAfterGlide(mimeType, pageId)) { bitmap = applyExifOrientation(context, bitmap, rotationDegrees, isFlipped) } if (bitmap != null) { diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt index e3c654741..cc54bd459 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt @@ -334,7 +334,7 @@ abstract class ImageProvider { .load(model) .submit(targetWidthPx, targetHeightPx) var bitmap = withContext(Dispatchers.IO) { target.get() } - if (MimeTypes.needRotationAfterGlide(sourceMimeType)) { + if (MimeTypes.needRotationAfterGlide(sourceMimeType, pageId)) { bitmap = BitmapUtils.applyExifOrientation(activity, bitmap, sourceEntry.rotationDegrees, sourceEntry.isFlipped) } bitmap ?: throw Exception("failed to get image for mimeType=$sourceMimeType uri=$sourceUri page=$pageId") diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/MimeTypes.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/MimeTypes.kt index 9d219a7a2..645fa47a1 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/utils/MimeTypes.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/MimeTypes.kt @@ -2,6 +2,7 @@ package deckers.thibault.aves.utils import android.webkit.MimeTypeMap import androidx.exifinterface.media.ExifInterface +import deckers.thibault.aves.decoder.MultiPageImage object MimeTypes { const val ANY = "*/*" @@ -137,9 +138,13 @@ object MimeTypes { // but we need to rotate the decoded bitmap for the other formats // maybe related to ExifInterface version used by Glide: // https://github.com/bumptech/glide/blob/master/gradle.properties#L21 - fun needRotationAfterGlide(mimeType: String) = when (mimeType) { - DNG, HEIC, HEIF, PNG, WEBP -> true - else -> false + fun needRotationAfterGlide(mimeType: String, pageId: Int?): Boolean { + return if (pageId != null && MultiPageImage.isSupported(mimeType)) { + true + } else when (mimeType) { + DNG, HEIC, HEIF, PNG, WEBP -> true + else -> false + } } // Thumbnails obtained from the Media Store are automatically rotated