mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Merge pull request #5291 from element-hq/feature/bma/fixAudioSending
Detect mime type when picking a file
This commit is contained in:
+2
-4
@@ -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,
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+6
-3
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user