ADD: Select multiple pictures as one NoteEntry
This commit is contained in:
parent
43c22ea6d6
commit
b132779730
@ -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)
|
|
||||||
}
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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(
|
||||||
|
Loading…
Reference in New Issue
Block a user