diff --git a/core/src/main/java/org/futo/circles/core/extensions/UriExtensions.kt b/core/src/main/java/org/futo/circles/core/extensions/UriExtensions.kt index a3c1da01d5d2475b1f9b2b24bf4f004b17e40564..acef6e4e7daf71d06234909285f39dab54f9200c 100644 --- a/core/src/main/java/org/futo/circles/core/extensions/UriExtensions.kt +++ b/core/src/main/java/org/futo/circles/core/extensions/UriExtensions.kt @@ -9,7 +9,6 @@ import androidx.core.database.getStringOrNull import org.futo.circles.core.feature.blurhash.ThumbHash import org.futo.circles.core.model.MediaAttachmentInfo import org.futo.circles.core.utils.ImageUtils -import org.futo.circles.core.utils.MediaUtils.getOrientation import org.futo.circles.core.utils.VideoUtils import org.matrix.android.sdk.api.session.content.ContentAttachmentData @@ -36,7 +35,7 @@ fun Uri.getFilename(context: Context): String? { suspend fun Uri.toImageContentAttachmentData(context: Context): ContentAttachmentData? { val attachmentInfo = getMediaAttachmentInfo(context) ?: return null val resolution = ImageUtils.getImageResolution(context, this) - val orientation = getOrientation(context, this) + val orientation = ImageUtils.getImageOrientation(context, this) return ContentAttachmentData( mimeType = attachmentInfo.mimeType, type = ContentAttachmentData.Type.IMAGE, diff --git a/core/src/main/java/org/futo/circles/core/utils/ImageUtils.kt b/core/src/main/java/org/futo/circles/core/utils/ImageUtils.kt index e33ad6cab8291adb91e0351acfc06d93f5c55e73..9747deaa598e266f99045936630dccf015af5ddc 100644 --- a/core/src/main/java/org/futo/circles/core/utils/ImageUtils.kt +++ b/core/src/main/java/org/futo/circles/core/utils/ImageUtils.kt @@ -17,7 +17,24 @@ object ImageUtils { null, options ) - return getSizeBasedOnOrientation(context, uri, options.outWidth, options.outHeight) + return getSizeBasedOnOrientation( + getImageOrientation(context, uri), + options.outWidth, + options.outHeight + ) + } + + fun getImageOrientation(context: Context, uri: Uri): Int { + var orientation = 0 + context.contentResolver.openInputStream(uri)?.use { inputStream -> + try { + ExifInterface(inputStream).let { + orientation = it.rotationDegrees + } + } catch (ignore: Exception) { + } + } + return orientation } } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/utils/MediaUtils.kt b/core/src/main/java/org/futo/circles/core/utils/MediaUtils.kt index 535e29870b74c23c81ee6f37a4950db9f8a650d4..c6af09e1483548fefa05a7e6a41916e4f298a5fd 100644 --- a/core/src/main/java/org/futo/circles/core/utils/MediaUtils.kt +++ b/core/src/main/java/org/futo/circles/core/utils/MediaUtils.kt @@ -1,27 +1,10 @@ package org.futo.circles.core.utils -import android.content.Context -import android.net.Uri import android.util.Size -import androidx.exifinterface.media.ExifInterface object MediaUtils { - fun getOrientation(context: Context, uri: Uri): Int { - var orientation = 0 - context.contentResolver.openInputStream(uri)?.use { inputStream -> - try { - ExifInterface(inputStream).let { - orientation = it.rotationDegrees - } - } catch (ignore: Exception) { - } - } - return orientation - } - - fun getSizeBasedOnOrientation(context: Context, uri: Uri, width: Int, height: Int): Size { - val orientation = getOrientation(context, uri) + fun getSizeBasedOnOrientation(orientation: Int, width: Int, height: Int): Size { return if (orientation == 90 || orientation == 270) Size(height, width) else Size(width, height) } diff --git a/core/src/main/java/org/futo/circles/core/utils/VideoUtils.kt b/core/src/main/java/org/futo/circles/core/utils/VideoUtils.kt index 809e3dad46ace5e61de839a26c75e216b7000d7f..ec4f465c56f0b23f06444bc4300dab195148f128 100644 --- a/core/src/main/java/org/futo/circles/core/utils/VideoUtils.kt +++ b/core/src/main/java/org/futo/circles/core/utils/VideoUtils.kt @@ -5,6 +5,7 @@ import android.media.MediaMetadataRetriever import android.net.Uri import android.util.Size import org.futo.circles.core.utils.MediaUtils.getSizeBasedOnOrientation +import org.matrix.android.sdk.api.extensions.tryOrNull import java.util.concurrent.TimeUnit @@ -25,9 +26,12 @@ object VideoUtils { retriever.setDataSource(context, uri) val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT) val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH) + val orientation = tryOrNull { + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)?.toInt() + } ?: 0 retriever.release() getSizeBasedOnOrientation( - context, uri, + orientation, width?.toInt() ?: 0, height?.toInt() ?: 0 )