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 1876a53677
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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.setValue
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.media3.common.util.UnstableApi
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.Inject
@ -165,8 +164,8 @@ class MessageComposerPresenter(
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType ->
handlePickedMedia(uri, mimeType)
}
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri ->
handlePickedMedia(uri, MimeTypes.OctetStream)
val filesPicker = mediaPickerProvider.registerFilePicker(AnyMimeTypes) { uri, mimeType ->
handlePickedMedia(uri, mimeType ?: MimeTypes.OctetStream)
}
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker { uri ->
handlePickedMedia(uri, MimeTypes.Jpeg)
@ -516,7 +515,6 @@ class MessageComposerPresenter(
}
}
@UnstableApi
private fun handlePickedMedia(
uri: Uri?,
mimeType: String? = null,

View file

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

View file

@ -88,13 +88,16 @@ class DefaultPickerProvider(
@Composable
override fun registerFilePicker(
mimeType: String,
onResult: (Uri?) -> Unit,
onResult: (uri: Uri?, mimeType: String?) -> Unit,
): PickerLauncher<String, Uri?> {
// Tests and UI preview can't handle Context or FileProviders, so we might as well disable the whole picker
return if (LocalInspectionMode.current) {
NoOpPickerLauncher { onResult(null) }
NoOpPickerLauncher { onResult(null, null) }
} 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
override fun registerFilePicker(mimeType: String, onResult: (Uri?) -> Unit): PickerLauncher<String, Uri?> {
return NoOpPickerLauncher { onResult(result) }
override fun registerFilePicker(mimeType: String, onResult: (Uri?, String?) -> Unit): PickerLauncher<String, Uri?> {
return NoOpPickerLauncher { onResult(result, this.mimeType) }
}
@Composable