Skip to content

Commit 1876a53

Browse files
authored
Merge pull request #5291 from element-hq/feature/bma/fixAudioSending
Detect mime type when picking a file
2 parents 4b338bc + 5ffd5b8 commit 1876a53

File tree

4 files changed

+11
-10
lines changed

4 files changed

+11
-10
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import androidx.compose.runtime.rememberUpdatedState
2424
import androidx.compose.runtime.saveable.rememberSaveable
2525
import androidx.compose.runtime.setValue
2626
import androidx.compose.runtime.snapshots.SnapshotStateList
27-
import androidx.media3.common.util.UnstableApi
2827
import dev.zacsweers.metro.Assisted
2928
import dev.zacsweers.metro.AssistedFactory
3029
import dev.zacsweers.metro.Inject
@@ -165,8 +164,8 @@ class MessageComposerPresenter(
165164
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType ->
166165
handlePickedMedia(uri, mimeType)
167166
}
168-
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri ->
169-
handlePickedMedia(uri, MimeTypes.OctetStream)
167+
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri, mimeType ->
168+
handlePickedMedia(uri, mimeType ?: MimeTypes.OctetStream)
170169
}
171170
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker { uri ->
172171
handlePickedMedia(uri, MimeTypes.Jpeg)
@@ -516,7 +515,6 @@ class MessageComposerPresenter(
516515
}
517516
}
518517

519-
@UnstableApi
520518
private fun handlePickedMedia(
521519
uri: Uri?,
522520
mimeType: String? = null,

libraries/mediapickers/api/src/main/kotlin/io/element/android/libraries/mediapickers/api/PickerProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ interface PickerProvider {
2525
@Composable
2626
fun registerFilePicker(
2727
mimeType: String,
28-
onResult: (Uri?) -> Unit
28+
onResult: (uri: Uri?, mimeType: String?) -> Unit,
2929
): PickerLauncher<String, Uri?>
3030

3131
@Composable

libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,16 @@ class DefaultPickerProvider(
8888
@Composable
8989
override fun registerFilePicker(
9090
mimeType: String,
91-
onResult: (Uri?) -> Unit,
91+
onResult: (uri: Uri?, mimeType: String?) -> Unit,
9292
): PickerLauncher<String, Uri?> {
9393
// Tests and UI preview can't handle Context or FileProviders, so we might as well disable the whole picker
9494
return if (LocalInspectionMode.current) {
95-
NoOpPickerLauncher { onResult(null) }
95+
NoOpPickerLauncher { onResult(null, null) }
9696
} else {
97-
rememberPickerLauncher(type = PickerType.File(mimeType)) { uri -> onResult(uri) }
97+
rememberPickerLauncher(type = PickerType.File(mimeType)) { uri ->
98+
val pickedMimeType = uri?.let { context.contentResolver.getType(it) }
99+
onResult(uri, pickedMimeType)
100+
}
98101
}
99102
}
100103

libraries/mediapickers/test/src/main/kotlin/io/element/android/libraries/mediapickers/test/FakePickerProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ class FakePickerProvider : PickerProvider {
3030
}
3131

3232
@Composable
33-
override fun registerFilePicker(mimeType: String, onResult: (Uri?) -> Unit): PickerLauncher<String, Uri?> {
34-
return NoOpPickerLauncher { onResult(result) }
33+
override fun registerFilePicker(mimeType: String, onResult: (Uri?, String?) -> Unit): PickerLauncher<String, Uri?> {
34+
return NoOpPickerLauncher { onResult(result, this.mimeType) }
3535
}
3636

3737
@Composable

0 commit comments

Comments
 (0)