This commit is contained in:
Trey t
2025-11-04 16:34:05 -06:00
parent 3e617c9cd8
commit 177e588944
11 changed files with 410 additions and 9 deletions

View File

@@ -0,0 +1,73 @@
package com.mycrib.platform
import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
@Composable
actual fun rememberImagePicker(
onImagesPicked: (List<ImageData>) -> Unit
): () -> Unit {
val context = LocalContext.current
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickMultipleVisualMedia(5)
) { uris: List<Uri> ->
if (uris.isNotEmpty()) {
val images = uris.mapNotNull { uri ->
try {
val inputStream = context.contentResolver.openInputStream(uri)
val bytes = inputStream?.readBytes()
inputStream?.close()
val fileName = getFileNameFromUri(context, uri)
if (bytes != null) {
ImageData(bytes, fileName)
} else {
null
}
} catch (e: Exception) {
e.printStackTrace()
null
}
}
if (images.isNotEmpty()) {
onImagesPicked(images)
}
}
}
return {
launcher.launch(
PickVisualMediaRequest(
ActivityResultContracts.PickVisualMedia.ImageOnly
)
)
}
}
private fun getFileNameFromUri(context: android.content.Context, uri: Uri): String {
var fileName = "image_${System.currentTimeMillis()}.jpg"
try {
context.contentResolver.query(uri, null, null, null, null)?.use { cursor ->
if (cursor.moveToFirst()) {
val nameIndex = cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME)
if (nameIndex >= 0) {
val name = cursor.getString(nameIndex)
if (name != null) {
fileName = name
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return fileName
}