diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef3..22560ed 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,6 +4,14 @@ diff --git a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt index 1a1819e..cd5104d 100644 --- a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt +++ b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt @@ -2,6 +2,7 @@ package come.stormborntales.notevault import android.net.Uri import android.os.Bundle +import android.webkit.MimeTypeMap import androidx.activity.ComponentActivity import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.setContent @@ -13,6 +14,8 @@ import come.stormborntales.notevault.data.model.NoteEntry import come.stormborntales.notevault.ui.screens.AddNoteDialog import come.stormborntales.notevault.ui.screens.MainScreen import come.stormborntales.notevault.ui.theme.NoteVaultTheme +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.File import java.io.InputStream @@ -33,7 +36,7 @@ class MainActivity : ComponentActivity() { // Launcher innerhalb von Compose val imagePickerLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.PickMultipleVisualMedia(), + contract = ActivityResultContracts.OpenMultipleDocuments(), onResult = { uris -> if (uris.isNotEmpty()) { selectedUris = uris @@ -47,46 +50,55 @@ class MainActivity : ComponentActivity() { notes = notes, onAddNoteClicked = { imagePickerLauncher.launch( - PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo) + arrayOf("image/*") ) } ) // Dialog bei Bedarf if (showDialog) { + val context = LocalContext.current; + val scope = rememberCoroutineScope(); AddNoteDialog( onDismiss = { showDialog = false }, onSave = { title, composer, year, genre, description -> - val copiedUris = selectedUris.mapNotNull { uri -> - try { - val inputStream: InputStream? = context.contentResolver.openInputStream(uri) - val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}_${uri.lastPathSegment}") - inputStream?.use { input -> - outputFile.outputStream().use { output -> - input.copyTo(output) + scope.launch(Dispatchers.IO) { + val copiedUris = selectedUris.mapNotNull { uri -> + try { + val inputStream: InputStream? = context.contentResolver.openInputStream(uri) + val extension = MimeTypeMap.getSingleton() + .getExtensionFromMimeType(context.contentResolver.getType(uri)) ?: "jpg" // Fallback + + val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}.$extension") + inputStream?.use { input -> + outputFile.outputStream().use { output -> + input.copyTo(output) + } } + Uri.fromFile(outputFile) + } catch (e: Exception) { + e.printStackTrace() + null } - Uri.fromFile(outputFile) - } catch (e: Exception) { - e.printStackTrace() - null } - } - if (copiedUris.isNotEmpty()) { - notes.add( - NoteEntry( - title = title, - images = copiedUris, - composer = composer, - year = year, - genre = genre, - description = description + if (copiedUris.isNotEmpty()) { + notes.add( + NoteEntry( + title = title, + images = copiedUris, + composer = composer, + year = year, + genre = genre, + description = description + ) ) - ) + } + + showDialog = false } - showDialog = false + } ) }