Merge pull request #5291 from element-hq/feature/bma/fixAudioSending
Detect mime type when picking a file
This commit is contained in:
commit
20880436fe
4 changed files with 11 additions and 10 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue