WIP: Visualize Loaded Notes
This commit is contained in:
parent
bf26411ae1
commit
40fd227092
@ -1,39 +1,81 @@
|
|||||||
package come.stormborntales.notevault
|
package come.stormborntales.notevault
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
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.PickVisualMediaRequest
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateListOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
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.InputStream
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
private lateinit var imagePickerLauncher: ActivityResultLauncher<PickVisualMediaRequest>
|
||||||
|
// Definiere notes als MutableStateList für die gesamte Aktivität
|
||||||
|
private val notes = mutableStateListOf<Uri>()
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
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
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d("MainActivity", "Bild gespeichert: ${outputFile.absolutePath}")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
|
// Initialisiere die Notenliste als State
|
||||||
|
val notes = remember { mutableStateListOf<Uri>() }
|
||||||
|
// Launcher für die Bildauswahl einrichten
|
||||||
|
|
||||||
|
|
||||||
NoteVaultTheme {
|
NoteVaultTheme {
|
||||||
MainScreen(
|
MainScreen(
|
||||||
onAddNoteClicked = {
|
onAddNoteClicked = {
|
||||||
// Hier kommt später deine Logik zum Öffnen der Galerie oder eines Dialogs.
|
// Öffne die Galerie zum Auswählen eines Bildes
|
||||||
// Zum Beispiel kannst du hier später ein Intent einbauen, um ein Bild zu wählen.
|
imagePickerLauncher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo))
|
||||||
Log.d("MainActivity", "FAB geklickt! Hier könnte die Galerie geöffnet werden.")
|
},
|
||||||
}
|
notes = notes,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Greeting(name: String, modifier: Modifier = Modifier) {
|
fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
package come.stormborntales.notevault.ui.screens
|
package come.stormborntales.notevault.ui.screens
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
|
import android.graphics.ImageDecoder
|
||||||
|
import android.media.Image
|
||||||
|
import android.net.Uri
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
@ -8,17 +14,34 @@ import androidx.compose.foundation.lazy.items
|
|||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Add
|
import androidx.compose.material.icons.filled.Add
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
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 androidx.compose.ui.unit.dp
|
||||||
|
import java.io.InputStream
|
||||||
|
|
||||||
|
fun loadImageBitmap(context: Context, uri: Uri): ImageBitmap? {
|
||||||
|
return try {
|
||||||
|
val inputStream: InputStream? = context.contentResolver.openInputStream(uri)
|
||||||
|
val bitmap = BitmapFactory.decodeStream(inputStream)
|
||||||
|
bitmap?.asImageBitmap()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@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),
|
||||||
) {
|
) {
|
||||||
val dummyNotes = listOf("Notenblatt 1", "Notenblatt 2", "Notenblatt 3")
|
val dummyNotes = remember { mutableStateListOf<Uri>().apply { addAll(notes) } }
|
||||||
|
// Hole den aktuellen Context
|
||||||
|
val context = LocalContext.current
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
@ -40,19 +63,22 @@ fun MainScreen(
|
|||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.padding(16.dp)
|
.padding(16.dp)
|
||||||
) {
|
) {
|
||||||
items(dummyNotes) { note ->
|
items(dummyNotes) { noteUri ->
|
||||||
Card(
|
// Lade das Bild mit der Hilfsfunktion
|
||||||
|
val imageBitmap = loadImageBitmap(context, noteUri)
|
||||||
|
if (imageBitmap != null) {
|
||||||
|
Image(
|
||||||
|
bitmap = imageBitmap,
|
||||||
|
contentDescription = "Notenblatt",
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 8.dp),
|
.padding(8.dp)
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
|
|
||||||
) {
|
|
||||||
Text(
|
|
||||||
text = note,
|
|
||||||
modifier = Modifier.padding(16.dp)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user