From b13277973070a54deab2fa0e28f7b242a2169a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 19 Apr 2025 16:56:29 +0200 Subject: [PATCH] ADD: Select multiple pictures as one NoteEntry --- .../stormborntales/notevault/MainActivity.kt | 49 ++++++++----------- .../notevault/data/model/NoteEntry.kt | 10 ++++ .../notevault/ui/screens/MainScreen.kt | 7 +-- 3 files changed, 35 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/come/stormborntales/notevault/data/model/NoteEntry.kt diff --git a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt index 3849445..16562f6 100644 --- a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt +++ b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt @@ -3,22 +3,14 @@ package come.stormborntales.notevault import android.content.Context import android.net.Uri import android.os.Bundle -import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateListOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview +import come.stormborntales.notevault.data.model.NoteEntry import come.stormborntales.notevault.ui.screens.MainScreen import come.stormborntales.notevault.ui.theme.NoteVaultTheme import java.io.File @@ -27,28 +19,35 @@ import java.io.InputStream class MainActivity : ComponentActivity() { private lateinit var imagePickerLauncher: ActivityResultLauncher // Definiere notes als MutableStateList für die gesamte Aktivität - private val notes = mutableStateListOf() + private val notes = mutableStateListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() // Launcher für die Bildauswahl einrichten - imagePickerLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> - uri?.let { - // Hier kannst du die Logik zum Speichern und Anzeigen des Bildes hinzufügen + imagePickerLauncher = registerForActivityResult(ActivityResultContracts.PickMultipleVisualMedia()) { uris -> + if (!uris.isNullOrEmpty()) { val context: Context = applicationContext - val inputStream: InputStream? = contentResolver.openInputStream(uri) - val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}.jpg") - - inputStream?.use { input -> - outputFile.outputStream().use { output -> - input.copyTo(output) - addNoteToList(notes, it) + val copiedUris = uris.mapNotNull { uri -> + try { + val inputStream: InputStream? = contentResolver.openInputStream(uri) + val outputFile = + File(context.filesDir, "note_${System.currentTimeMillis()}_${uri.lastPathSegment}") + inputStream?.use { input -> + outputFile.outputStream().use { output -> + input.copyTo(output) + } + } + Uri.fromFile(outputFile) + } catch (e: Exception) { + e.printStackTrace() + null } } - Log.d("MainActivity", "Bild gespeichert: ${outputFile.absolutePath}") - + if (copiedUris.isNotEmpty()) { + notes.add(NoteEntry(images = copiedUris)) // Titel optional setzen + } } } @@ -64,10 +63,4 @@ class MainActivity : ComponentActivity() { } } } -} - -// Funktion zum Hinzufügen von Noten zur Liste -private fun addNoteToList(notes: MutableList, uri: Uri) { - // Hier wird das Bild zur Liste hinzugefügt - notes.add(uri) } \ No newline at end of file diff --git a/app/src/main/java/come/stormborntales/notevault/data/model/NoteEntry.kt b/app/src/main/java/come/stormborntales/notevault/data/model/NoteEntry.kt new file mode 100644 index 0000000..8612b09 --- /dev/null +++ b/app/src/main/java/come/stormborntales/notevault/data/model/NoteEntry.kt @@ -0,0 +1,10 @@ +package come.stormborntales.notevault.data.model + +import android.net.Uri + +class NoteEntry(images: List) { + val title: String = "Unbenannt" // oder optional + val images: List = images; + + +} \ No newline at end of file diff --git a/app/src/main/java/come/stormborntales/notevault/ui/screens/MainScreen.kt b/app/src/main/java/come/stormborntales/notevault/ui/screens/MainScreen.kt index 1c77df0..c90430a 100644 --- a/app/src/main/java/come/stormborntales/notevault/ui/screens/MainScreen.kt +++ b/app/src/main/java/come/stormborntales/notevault/ui/screens/MainScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp +import come.stormborntales.notevault.data.model.NoteEntry import java.io.InputStream fun loadImageBitmap(context: Context, uri: Uri): ImageBitmap? { @@ -46,7 +47,7 @@ fun getFileNameFromUri(context: Context, uri: Uri): String? { @Composable fun MainScreen( onAddNoteClicked: () -> Unit, // Übergib hier deine Logik für den Import - notes: MutableList, // Liste der Notenbilder (hier als URI), + notes: MutableList, // Liste der Notenbilder (hier als URI), ) { val dummyNotes = notes // Hole den aktuellen Context @@ -73,8 +74,8 @@ fun MainScreen( .padding(16.dp) ) { items(dummyNotes) { noteUri -> - val imageBitmap = loadImageBitmap(context, noteUri) - val fileName = getFileNameFromUri(context, noteUri) + val imageBitmap = loadImageBitmap(context, noteUri.images[0]) + val fileName = noteUri.title if (imageBitmap != null) { Card(