Merge pull request #5291 from element-hq/feature/bma/fixAudioSending

Detect mime type when picking a file
This commit is contained in:
Benoit Marty 2025-09-09 08:52:08 +02:00 committed by GitHub
commit 20880436fe
4 changed files with 11 additions and 10 deletions

View file

@ -24,7 +24,6 @@ import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.media3.common.util.UnstableApi
import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.Inject import dev.zacsweers.metro.Inject
@ -165,8 +164,8 @@ class MessageComposerPresenter(
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType -> val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType ->
handlePickedMedia(uri, mimeType) handlePickedMedia(uri, mimeType)
} }
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri -> val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri, mimeType ->
handlePickedMedia(uri, MimeTypes.OctetStream) handlePickedMedia(uri, mimeType ?: MimeTypes.OctetStream)
} }
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker { uri -> val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker { uri ->
handlePickedMedia(uri, MimeTypes.Jpeg) handlePickedMedia(uri, MimeTypes.Jpeg)
@ -516,7 +515,6 @@ class MessageComposerPresenter(
} }
} }
@UnstableApi
private fun handlePickedMedia( private fun handlePickedMedia(
uri: Uri?, uri: Uri?,
mimeType: String? = null, mimeType: String? = null,

View file

@ -25,7 +25,7 @@ interface PickerProvider {
@Composable @Composable
fun registerFilePicker( fun registerFilePicker(
mimeType: String, mimeType: String,
onResult: (Uri?) -> Unit onResult: (uri: Uri?, mimeType: String?) -> Unit,
): PickerLauncher<String, Uri?> ): PickerLauncher<String, Uri?>
@Composable @Composable

View file

@ -88,13 +88,16 @@ class DefaultPickerProvider(
@Composable @Composable
override fun registerFilePicker( override fun registerFilePicker(
mimeType: String, mimeType: String,
onResult: (Uri?) -> Unit, onResult: (uri: Uri?, mimeType: String?) -> Unit,
): PickerLauncher<String, Uri?> { ): PickerLauncher<String, Uri?> {
// Tests and UI preview can't handle Context or FileProviders, so we might as well disable the whole picker // Tests and UI preview can't handle Context or FileProviders, so we might as well disable the whole picker
return if (LocalInspectionMode.current) { return if (LocalInspectionMode.current) {
NoOpPickerLauncher { onResult(null) } NoOpPickerLauncher { onResult(null, null) }
} else { } else {
rememberPickerLauncher(type = PickerType.File(mimeType)) { uri -> onResult(uri) } rememberPickerLauncher(type = PickerType.File(mimeType)) { uri ->
val pickedMimeType = uri?.let { context.contentResolver.getType(it) }
onResult(uri, pickedMimeType)
}
} }
} }

View file

@ -30,8 +30,8 @@ class FakePickerProvider : PickerProvider {
} }
@Composable @Composable
override fun registerFilePicker(mimeType: String, onResult: (Uri?) -> Unit): PickerLauncher<String, Uri?> { override fun registerFilePicker(mimeType: String, onResult: (Uri?, String?) -> Unit): PickerLauncher<String, Uri?> {
return NoOpPickerLauncher { onResult(result) } return NoOpPickerLauncher { onResult(result, this.mimeType) }
} }
@Composable @Composable