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.content.Context
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts 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.mutableStateListOf
import androidx.compose.runtime.remember import come.stormborntales.notevault.data.model.NoteEntry
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import come.stormborntales.notevault.ui.screens.MainScreen import come.stormborntales.notevault.ui.screens.MainScreen
import come.stormborntales.notevault.ui.theme.NoteVaultTheme import come.stormborntales.notevault.ui.theme.NoteVaultTheme
import java.io.File import java.io.File
@ -27,28 +19,35 @@ import java.io.InputStream
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
private lateinit var imagePickerLauncher: ActivityResultLauncher<PickVisualMediaRequest> private lateinit var imagePickerLauncher: ActivityResultLauncher<PickVisualMediaRequest>
// Definiere notes als MutableStateList für die gesamte Aktivität // 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?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
// Launcher für die Bildauswahl einrichten // Launcher für die Bildauswahl einrichten
imagePickerLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> imagePickerLauncher = registerForActivityResult(ActivityResultContracts.PickMultipleVisualMedia()) { uris ->
uri?.let { if (!uris.isNullOrEmpty()) {
// Hier kannst du die Logik zum Speichern und Anzeigen des Bildes hinzufügen
val context: Context = applicationContext val context: Context = applicationContext
val copiedUris = uris.mapNotNull { uri ->
try {
val inputStream: InputStream? = contentResolver.openInputStream(uri) val inputStream: InputStream? = contentResolver.openInputStream(uri)
val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}.jpg") val outputFile =
File(context.filesDir, "note_${System.currentTimeMillis()}_${uri.lastPathSegment}")
inputStream?.use { input -> inputStream?.use { input ->
outputFile.outputStream().use { output -> outputFile.outputStream().use { output ->
input.copyTo(output) input.copyTo(output)
addNoteToList(notes, it) }
}
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.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import come.stormborntales.notevault.data.model.NoteEntry
import java.io.InputStream import java.io.InputStream
fun loadImageBitmap(context: Context, uri: Uri): ImageBitmap? { fun loadImageBitmap(context: Context, uri: Uri): ImageBitmap? {
@ -46,7 +47,7 @@ fun getFileNameFromUri(context: Context, uri: Uri): String? {
@Composable @Composable
fun MainScreen( fun MainScreen(
onAddNoteClicked: () -> Unit, // Übergib hier deine Logik für den Import 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 val dummyNotes = notes
// Hole den aktuellen Context // Hole den aktuellen Context
@ -73,8 +74,8 @@ fun MainScreen(
.padding(16.dp) .padding(16.dp)
) { ) {
items(dummyNotes) { noteUri -> items(dummyNotes) { noteUri ->
val imageBitmap = loadImageBitmap(context, noteUri) val imageBitmap = loadImageBitmap(context, noteUri.images[0])
val fileName = getFileNameFromUri(context, noteUri) val fileName = noteUri.title
if (imageBitmap != null) { if (imageBitmap != null) {
Card( Card(