ADD: Select multiple pictures as one NoteEntry

This commit is contained in:
Sebastian Böckelmann 2025-04-19 16:56:29 +02:00
parent 43c22ea6d6
commit b132779730
3 changed files with 35 additions and 31 deletions

View File

@ -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<PickVisualMediaRequest>
// Definiere notes als MutableStateList für die gesamte Aktivität
private val notes = mutableStateListOf<Uri>()
private val notes = mutableStateListOf<NoteEntry>()
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
}
}
}
@ -65,9 +64,3 @@ class MainActivity : ComponentActivity() {
}
}
}
// Funktion zum Hinzufügen von Noten zur Liste
private fun addNoteToList(notes: MutableList<Uri>, uri: Uri) {
// Hier wird das Bild zur Liste hinzugefügt
notes.add(uri)
}

View File

@ -0,0 +1,10 @@
package come.stormborntales.notevault.data.model
import android.net.Uri
class NoteEntry(images: List<Uri>) {
val title: String = "Unbenannt" // oder optional
val images: List<Uri> = images;
}

View File

@ -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<Uri>, // Liste der Notenbilder (hier als URI),
notes: MutableList<NoteEntry>, // 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(