diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f5eacd03a4..d2d648f145 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,9 @@ + + + , localMedia: MutableState>) = launch { localMedia.value = Async.Loading() - mediaLoader.downloadMediaFile(inputs.mediaSource, inputs.mimeType) + mediaLoader.downloadMediaFile( + source = inputs.mediaSource, + mimeType = inputs.mimeType, + body = inputs.name + ) .onSuccess { mediaFile.value = it }.mapCatching { mediaFile -> diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerView.kt index 24efe4dbe9..38b7628626 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerView.kt @@ -104,7 +104,11 @@ fun MediaViewerView( Scaffold(modifier, topBar = { - MediaViewerTopBar(onBackPressed, state.eventSink) + MediaViewerTopBar( + actionsEnabled = state.downloadedMedia is Async.Success, + onBackPressed = onBackPressed, + eventSink = state.eventSink + ) }, snackbarHost = { SnackbarHost(snackbarHostState) { data -> @@ -145,6 +149,7 @@ fun MediaViewerView( @Composable private fun MediaViewerTopBar( + actionsEnabled : Boolean, onBackPressed: () -> Unit, eventSink: (MediaViewerEvents) -> Unit, ) { @@ -153,6 +158,7 @@ private fun MediaViewerTopBar( navigationIcon = { BackButton(onClick = onBackPressed) }, actions = { IconButton( + enabled = actionsEnabled, onClick = { eventSink(MediaViewerEvents.Share) }, @@ -160,6 +166,7 @@ private fun MediaViewerTopBar( Icon(imageVector = Icons.Default.Share, contentDescription = stringResource(id = string.action_share)) } IconButton( + enabled = actionsEnabled, onClick = { eventSink(MediaViewerEvents.SaveOnDisk) }, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/media/MatrixMediaLoader.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/media/MatrixMediaLoader.kt index 4d1d2445ce..a2e1c99572 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/media/MatrixMediaLoader.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/media/MatrixMediaLoader.kt @@ -36,5 +36,5 @@ interface MatrixMediaLoader { * @param mimeType: optional mime type * @return a [Result] of [MediaFile] */ - suspend fun downloadMediaFile(source: MediaSource, mimeType: String?): Result + suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/media/RustMediaLoader.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/media/RustMediaLoader.kt index 9e4f2c53de..f71a19658c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/media/RustMediaLoader.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/media/RustMediaLoader.kt @@ -59,13 +59,13 @@ class RustMediaLoader( } } - override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?): Result = + override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result = withContext(dispatchers.io) { runCatching { source.toRustMediaSource().use { mediaSource -> val mediaFile = innerClient.getMediaFile( mediaSource = mediaSource, - body = null, + body = body, mimeType = mimeType ?: "application/octet-stream" ) RustMediaFile(mediaFile) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/media/FakeMediaLoader.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/media/FakeMediaLoader.kt index 96c49aa165..508e6d5da4 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/media/FakeMediaLoader.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/media/FakeMediaLoader.kt @@ -44,7 +44,7 @@ class FakeMediaLoader : MatrixMediaLoader { } } - override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?): Result { + override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result { delay(FAKE_DELAY_IN_MS) return if (shouldFail) { Result.failure(RuntimeException())