From 55ce9068ef27b1cde6e7544cc4b78fe02c85a2b1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 10:41:44 +0100 Subject: [PATCH 1/6] Providing a thumbnail when sending a media is now optional. --- .../libraries/matrix/api/room/MatrixRoom.kt | 4 +-- .../matrix/impl/room/RustMatrixRoom.kt | 22 +++++++++++----- .../matrix/test/room/FakeMatrixRoom.kt | 4 +-- .../libraries/mediaupload/api/MediaSender.kt | 1 - .../mediaupload/api/MediaUploadInfo.kt | 4 +-- .../mediaupload/AndroidMediaPreProcessor.kt | 26 +++++++++---------- .../libraries/mediaupload/ThumbnailFactory.kt | 23 ++++++++-------- 7 files changed, 47 insertions(+), 37 deletions(-) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index ec1f49e4f8..00364d4822 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -100,9 +100,9 @@ interface MatrixRoom : Closeable { suspend fun redactEvent(eventId: EventId, reason: String? = null): Result - suspend fun sendImage(file: File, thumbnailFile: File, imageInfo: ImageInfo, progressCallback: ProgressCallback?): Result + suspend fun sendImage(file: File, thumbnailFile: File?, imageInfo: ImageInfo, progressCallback: ProgressCallback?): Result - suspend fun sendVideo(file: File, thumbnailFile: File, videoInfo: VideoInfo, progressCallback: ProgressCallback?): Result + suspend fun sendVideo(file: File, thumbnailFile: File?, videoInfo: VideoInfo, progressCallback: ProgressCallback?): Result suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 079f144130..fc7215f583 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -360,15 +360,25 @@ class RustMatrixRoom( } } - override suspend fun sendImage(file: File, thumbnailFile: File, imageInfo: ImageInfo, progressCallback: ProgressCallback?): Result { - return sendAttachment(listOf(file, thumbnailFile)) { - innerTimeline.sendImage(file.path, thumbnailFile.path, imageInfo.map(), progressCallback?.toProgressWatcher()) + override suspend fun sendImage( + file: File, + thumbnailFile: File?, + imageInfo: ImageInfo, + progressCallback: ProgressCallback?, + ): Result { + return sendAttachment(listOfNotNull(file, thumbnailFile)) { + innerTimeline.sendImage(file.path, thumbnailFile?.path, imageInfo.map(), progressCallback?.toProgressWatcher()) } } - override suspend fun sendVideo(file: File, thumbnailFile: File, videoInfo: VideoInfo, progressCallback: ProgressCallback?): Result { - return sendAttachment(listOf(file, thumbnailFile)) { - innerTimeline.sendVideo(file.path, thumbnailFile.path, videoInfo.map(), progressCallback?.toProgressWatcher()) + override suspend fun sendVideo( + file: File, + thumbnailFile: File?, + videoInfo: VideoInfo, + progressCallback: ProgressCallback?, + ): Result { + return sendAttachment(listOfNotNull(file, thumbnailFile)) { + innerTimeline.sendVideo(file.path, thumbnailFile?.path, videoInfo.map(), progressCallback?.toProgressWatcher()) } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index db263fee94..9f036a6b62 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -299,14 +299,14 @@ class FakeMatrixRoom( override suspend fun sendImage( file: File, - thumbnailFile: File, + thumbnailFile: File?, imageInfo: ImageInfo, progressCallback: ProgressCallback? ): Result = fakeSendMedia(progressCallback) override suspend fun sendVideo( file: File, - thumbnailFile: File, + thumbnailFile: File?, videoInfo: VideoInfo, progressCallback: ProgressCallback? ): Result = fakeSendMedia( diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt index dd51198e59..dfcef7fb33 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt @@ -101,7 +101,6 @@ class MediaSender @Inject constructor( progressCallback = progressCallback ) } - is MediaUploadInfo.Video -> { sendVideo( file = uploadInfo.file, diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaUploadInfo.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaUploadInfo.kt index 39c978f625..76e6fd7cb1 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaUploadInfo.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaUploadInfo.kt @@ -26,8 +26,8 @@ sealed interface MediaUploadInfo { val file: File - data class Image(override val file: File, val imageInfo: ImageInfo, val thumbnailFile: File) : MediaUploadInfo - data class Video(override val file: File, val videoInfo: VideoInfo, val thumbnailFile: File) : MediaUploadInfo + data class Image(override val file: File, val imageInfo: ImageInfo, val thumbnailFile: File?) : MediaUploadInfo + data class Video(override val file: File, val videoInfo: VideoInfo, val thumbnailFile: File?) : MediaUploadInfo data class Audio(override val file: File, val audioInfo: AudioInfo) : MediaUploadInfo data class VoiceMessage(override val file: File, val audioInfo: AudioInfo, val waveform: List) : MediaUploadInfo data class AnyFile(override val file: File, val fileInfo: FileInfo) : MediaUploadInfo diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt index f05fe5bdc3..62a3457f90 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt @@ -137,7 +137,7 @@ class AndroidMediaPreProcessor @Inject constructor( resizeMode = ResizeMode.Approximate(IMAGE_SCALE_REF_SIZE, IMAGE_SCALE_REF_SIZE), orientation = orientation, ).getOrThrow() - val thumbnailResult: ThumbnailResult = thumbnailFactory.createImageThumbnail(compressionResult.file) + val thumbnailResult = thumbnailFactory.createImageThumbnail(compressionResult.file) val imageInfo = compressionResult.toImageInfo( mimeType = mimeType, thumbnailResult = thumbnailResult @@ -146,13 +146,13 @@ class AndroidMediaPreProcessor @Inject constructor( return MediaUploadInfo.Image( file = compressionResult.file, imageInfo = imageInfo, - thumbnailFile = thumbnailResult.file + thumbnailFile = thumbnailResult?.file ) } suspend fun processImageWithoutCompression(): MediaUploadInfo { val file = copyToTmpFile(uri) - val thumbnailResult: ThumbnailResult = thumbnailFactory.createImageThumbnail(file) + val thumbnailResult = thumbnailFactory.createImageThumbnail(file) val imageInfo = contentResolver.openInputStream(uri).use { input -> val bitmap = BitmapFactory.decodeStream(input, null, null)!! ImageInfo( @@ -160,16 +160,16 @@ class AndroidMediaPreProcessor @Inject constructor( height = bitmap.height.toLong(), mimetype = mimeType, size = file.length(), - thumbnailInfo = thumbnailResult.info, + thumbnailInfo = thumbnailResult?.info, thumbnailSource = null, - blurhash = thumbnailResult.blurhash, + blurhash = thumbnailResult?.blurhash, ) } removeSensitiveImageMetadata(file) return MediaUploadInfo.Image( file = file, imageInfo = imageInfo, - thumbnailFile = thumbnailResult.file + thumbnailFile = thumbnailResult?.file ) } @@ -197,7 +197,7 @@ class AndroidMediaPreProcessor @Inject constructor( return MediaUploadInfo.Video( file = resultFile, videoInfo = videoInfo, - thumbnailFile = thumbnailInfo.file + thumbnailFile = thumbnailInfo?.file ) } @@ -235,7 +235,7 @@ class AndroidMediaPreProcessor @Inject constructor( } } - private fun extractVideoMetadata(file: File, mimeType: String?, thumbnailResult: ThumbnailResult): VideoInfo = + private fun extractVideoMetadata(file: File, mimeType: String?, thumbnailResult: ThumbnailResult?): VideoInfo = MediaMetadataRetriever().runAndRelease { setDataSource(context, Uri.fromFile(file)) VideoInfo( @@ -244,10 +244,10 @@ class AndroidMediaPreProcessor @Inject constructor( height = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toLong() ?: 0L, mimetype = mimeType, size = file.length(), - thumbnailInfo = thumbnailResult.info, + thumbnailInfo = thumbnailResult?.info, // Will be computed by the rust sdk thumbnailSource = null, - blurhash = thumbnailResult.blurhash, + blurhash = thumbnailResult?.blurhash, ) } @@ -257,15 +257,15 @@ class AndroidMediaPreProcessor @Inject constructor( } } -fun ImageCompressionResult.toImageInfo(mimeType: String, thumbnailResult: ThumbnailResult) = ImageInfo( +private fun ImageCompressionResult.toImageInfo(mimeType: String, thumbnailResult: ThumbnailResult?) = ImageInfo( width = width.toLong(), height = height.toLong(), mimetype = mimeType, size = size, - thumbnailInfo = thumbnailResult.info, + thumbnailInfo = thumbnailResult?.info, // Will be computed by the rust sdk thumbnailSource = null, - blurhash = thumbnailResult.blurhash, + blurhash = thumbnailResult?.blurhash, ) private fun MediaMetadataRetriever.extractDuration(): Duration { diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt index 40a75b6428..acbee18ec0 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt @@ -61,7 +61,7 @@ class ThumbnailFactory @Inject constructor( ) { @SuppressLint("NewApi") - suspend fun createImageThumbnail(file: File): ThumbnailResult { + suspend fun createImageThumbnail(file: File): ThumbnailResult? { return createThumbnail { cancellationSignal -> // This API works correctly with GIF if (sdkIntProvider.isAtLeast(Build.VERSION_CODES.Q)) { @@ -80,7 +80,7 @@ class ThumbnailFactory @Inject constructor( } } - suspend fun createVideoThumbnail(file: File): ThumbnailResult { + suspend fun createVideoThumbnail(file: File): ThumbnailResult? { return createThumbnail { MediaMetadataRetriever().runAndRelease { setDataSource(context, file.toUri()) @@ -89,32 +89,33 @@ class ThumbnailFactory @Inject constructor( } } - private suspend fun createThumbnail(bitmapFactory: (CancellationSignal) -> Bitmap?): ThumbnailResult = suspendCancellableCoroutine { continuation -> + private suspend fun createThumbnail(bitmapFactory: (CancellationSignal) -> Bitmap?): ThumbnailResult? = suspendCancellableCoroutine { continuation -> val cancellationSignal = CancellationSignal() continuation.invokeOnCancellation { cancellationSignal.cancel() } val bitmapThumbnail: Bitmap? = bitmapFactory(cancellationSignal) + if (bitmapThumbnail == null) { + continuation.resume(null) + return@suspendCancellableCoroutine + } val thumbnailFile = context.createTmpFile(extension = "jpeg") thumbnailFile.outputStream().use { outputStream -> - bitmapThumbnail?.compress(Bitmap.CompressFormat.JPEG, 80, outputStream) - } - val blurhash = bitmapThumbnail?.let { - BlurHash.encode(it, 3, 3) + bitmapThumbnail.compress(Bitmap.CompressFormat.JPEG, 80, outputStream) } + val blurhash = BlurHash.encode(bitmapThumbnail, 3, 3) val thumbnailResult = ThumbnailResult( file = thumbnailFile, info = ThumbnailInfo( - height = bitmapThumbnail?.height?.toLong(), - width = bitmapThumbnail?.width?.toLong(), + height = bitmapThumbnail.height.toLong(), + width = bitmapThumbnail.width.toLong(), mimetype = MimeTypes.Jpeg, size = thumbnailFile.length() ), blurhash = blurhash ) - bitmapThumbnail?.recycle() + bitmapThumbnail.recycle() continuation.resume(thumbnailResult) - } } From 0f7af2b7fc074d72ddcfd6eab94aa040c7100cc9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 10:43:28 +0100 Subject: [PATCH 2/6] `blurhash` cannot be null here --- .../element/android/libraries/mediaupload/ThumbnailFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt index acbee18ec0..d4bb24b3df 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt @@ -122,5 +122,5 @@ class ThumbnailFactory @Inject constructor( data class ThumbnailResult( val file: File, val info: ThumbnailInfo, - val blurhash: String?, + val blurhash: String, ) From 58182d925ac265a229d113fd3f330a41d36698d1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 10:43:54 +0100 Subject: [PATCH 3/6] dict --- .idea/dictionaries/shared.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/.idea/dictionaries/shared.xml b/.idea/dictionaries/shared.xml index 7afe540d22..c1f91b8411 100644 --- a/.idea/dictionaries/shared.xml +++ b/.idea/dictionaries/shared.xml @@ -2,6 +2,7 @@ backstack + blurhash ftue homeserver konsist From 4cd3faf936cf2263b80c598138e3f1885a4c1ee7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 10:47:31 +0100 Subject: [PATCH 4/6] ThumbnailUtils.createImageThumbnail can throw IOException, and we can ignore it. --- .../libraries/mediaupload/ThumbnailFactory.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt index d4bb24b3df..b2b6311f7a 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt @@ -34,7 +34,9 @@ import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.matrix.api.media.ThumbnailInfo import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import kotlinx.coroutines.suspendCancellableCoroutine +import timber.log.Timber import java.io.File +import java.io.IOException import javax.inject.Inject import kotlin.coroutines.resume @@ -65,11 +67,16 @@ class ThumbnailFactory @Inject constructor( return createThumbnail { cancellationSignal -> // This API works correctly with GIF if (sdkIntProvider.isAtLeast(Build.VERSION_CODES.Q)) { - ThumbnailUtils.createImageThumbnail( - file, - Size(THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT), - cancellationSignal - ) + try { + ThumbnailUtils.createImageThumbnail( + file, + Size(THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT), + cancellationSignal + ) + } catch (ioException: IOException) { + Timber.w(ioException, "Failed to create thumbnail for $file") + null + } } else { @Suppress("DEPRECATION") ThumbnailUtils.createImageThumbnail( From e156cf051555f9eabd8d50080e3a28760d2fe3bf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 11:05:40 +0100 Subject: [PATCH 5/6] Restore test for image sending, now that computing Thumbnail can fail. --- .../libraries/mediaupload/ThumbnailFactory.kt | 35 +++++++++++-------- .../AndroidMediaPreProcessorTest.kt | 23 ++++-------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt index b2b6311f7a..4e3189bb79 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt @@ -65,24 +65,29 @@ class ThumbnailFactory @Inject constructor( @SuppressLint("NewApi") suspend fun createImageThumbnail(file: File): ThumbnailResult? { return createThumbnail { cancellationSignal -> - // This API works correctly with GIF - if (sdkIntProvider.isAtLeast(Build.VERSION_CODES.Q)) { - try { + try { + // This API works correctly with GIF + if (sdkIntProvider.isAtLeast(Build.VERSION_CODES.Q)) { + try { + ThumbnailUtils.createImageThumbnail( + file, + Size(THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT), + cancellationSignal + ) + } catch (ioException: IOException) { + Timber.w(ioException, "Failed to create thumbnail for $file") + null + } + } else { + @Suppress("DEPRECATION") ThumbnailUtils.createImageThumbnail( - file, - Size(THUMB_MAX_WIDTH, THUMB_MAX_HEIGHT), - cancellationSignal + file.path, + MediaStore.Images.Thumbnails.MINI_KIND, ) - } catch (ioException: IOException) { - Timber.w(ioException, "Failed to create thumbnail for $file") - null } - } else { - @Suppress("DEPRECATION") - ThumbnailUtils.createImageThumbnail( - file.path, - MediaStore.Images.Thumbnails.MINI_KIND, - ) + } catch (throwable: Throwable) { + Timber.w(throwable, "Failed to create thumbnail for $file") + null } } } diff --git a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt index 3d745b3ec3..6c61233eb8 100644 --- a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt +++ b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt @@ -55,15 +55,11 @@ class AndroidMediaPreProcessorTest { deleteOriginal = false, compressIfPossible = true, ) - // This is failing for now - val error = result.exceptionOrNull() - assertThat(error).isInstanceOf(MediaPreProcessor.Failure::class.java) - assertThat(error?.cause).isInstanceOf(NullPointerException::class.java) - /* val data = result.getOrThrow() assertThat(data.file.path).endsWith("image.png") val info = data as MediaUploadInfo.Image - assertThat(info.thumbnailFile).isNull() // TODO Check this + // Computing thumbnailFile is failing with Robolectric + assertThat(info.thumbnailFile).isNull() assertThat(info.imageInfo).isEqualTo( ImageInfo( height = 1_178, @@ -76,7 +72,6 @@ class AndroidMediaPreProcessorTest { ) ) assertThat(file.exists()).isTrue() - */ } @Test @@ -90,15 +85,11 @@ class AndroidMediaPreProcessorTest { deleteOriginal = false, compressIfPossible = true, ) - // This is not working for now - val error = result.exceptionOrNull() - assertThat(error).isInstanceOf(MediaPreProcessor.Failure::class.java) - assertThat(error?.cause).isInstanceOf(NoSuchMethodError::class.java) - /* val data = result.getOrThrow() assertThat(data.file.path).endsWith("image.png") val info = data as MediaUploadInfo.Image - assertThat(info.thumbnailFile).isNull() // TODO Check this + // Computing thumbnailFile is failing with Robolectric + assertThat(info.thumbnailFile).isNull() assertThat(info.imageInfo).isEqualTo( ImageInfo( height = 1_178, @@ -111,7 +102,6 @@ class AndroidMediaPreProcessorTest { ) ) assertThat(file.exists()).isTrue() - */ } @Test @@ -266,7 +256,8 @@ class AndroidMediaPreProcessorTest { ).getOrThrow() assertThat(result.file.path).endsWith("video.mp4") val info = result as MediaUploadInfo.Video - assertThat(info.thumbnailFile).isNotNull() + // Computing thumbnailFile is failing with Robolectric + assertThat(info.thumbnailFile).isNull() assertThat(info.videoInfo).isEqualTo( VideoInfo( duration = Duration.ZERO, // Not available with Robolectric? @@ -274,7 +265,7 @@ class AndroidMediaPreProcessorTest { width = 0, // Not available with Robolectric? mimetype = MimeTypes.Mp4, size = 1_673_712, - thumbnailInfo = ThumbnailInfo(height = null, width = null, mimetype = MimeTypes.Jpeg, size = 0), // Not available with Robolectric? + thumbnailInfo = null, thumbnailSource = null, blurhash = null, ) From 3d963df4fe5ed935a7ae7061bf6bdcb3ae9ed7b4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 19 Dec 2023 11:07:12 +0100 Subject: [PATCH 6/6] Move files to correct package. --- .../mediaupload/{ => impl}/AndroidMediaPreProcessor.kt | 2 +- .../android/libraries/mediaupload/{ => impl}/ImageCompressor.kt | 2 +- .../libraries/mediaupload/{ => impl}/ThumbnailFactory.kt | 2 +- .../android/libraries/mediaupload/{ => impl}/VideoCompressor.kt | 2 +- .../mediaupload/{ => impl}/AndroidMediaPreProcessorTest.kt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/{ => impl}/AndroidMediaPreProcessor.kt (99%) rename libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/{ => impl}/ImageCompressor.kt (98%) rename libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/{ => impl}/ThumbnailFactory.kt (98%) rename libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/{ => impl}/VideoCompressor.kt (98%) rename libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/{ => impl}/AndroidMediaPreProcessorTest.kt (99%) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt similarity index 99% rename from libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt rename to libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index 62a3457f90..486364a7d7 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.mediaupload +package io.element.android.libraries.mediaupload.impl import android.content.Context import android.graphics.BitmapFactory diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ImageCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt similarity index 98% rename from libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ImageCompressor.kt rename to libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt index 9f93818576..4378889f97 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ImageCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.mediaupload +package io.element.android.libraries.mediaupload.impl import android.content.Context import android.graphics.Bitmap diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt similarity index 98% rename from libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt rename to libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt index 4e3189bb79..1ee7b40bb3 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.mediaupload +package io.element.android.libraries.mediaupload.impl import android.annotation.SuppressLint import android.content.Context diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt similarity index 98% rename from libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/VideoCompressor.kt rename to libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index 5587eedfa4..762dd04901 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.mediaupload +package io.element.android.libraries.mediaupload.impl import android.content.Context import android.net.Uri diff --git a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessorTest.kt similarity index 99% rename from libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt rename to libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessorTest.kt index 6c61233eb8..4086627561 100644 --- a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/AndroidMediaPreProcessorTest.kt +++ b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessorTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.mediaupload +package io.element.android.libraries.mediaupload.impl import android.content.Context import android.os.Build