diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 005afb3..f0c6ad0 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -40,6 +40,9 @@
+
+
+
diff --git a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt
index 332389d..b98a8ca 100644
--- a/app/src/main/java/come/stormborntales/notevault/MainActivity.kt
+++ b/app/src/main/java/come/stormborntales/notevault/MainActivity.kt
@@ -2,27 +2,23 @@ package come.stormborntales.notevault
import android.net.Uri
import android.os.Bundle
-import android.webkit.MimeTypeMap
+import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
-import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.viewmodel.compose.viewModel
import come.stormborntales.notevault.data.local.AppDatabase
-import come.stormborntales.notevault.data.model.NoteEntry
+import come.stormborntales.notevault.data.local.entity.NoteEntity
import come.stormborntales.notevault.data.repository.NoteRepository
import come.stormborntales.notevault.ui.screens.AddNoteDialog
import come.stormborntales.notevault.ui.screens.MainScreen
import come.stormborntales.notevault.ui.theme.NoteVaultTheme
import come.stormborntales.notevault.ui.viewmodel.NoteViewModel
import come.stormborntales.notevault.ui.viewmodel.NoteViewModelFactory
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import java.io.File
-import java.io.InputStream
+
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -35,11 +31,6 @@ class MainActivity : ComponentActivity() {
setContent {
NoteVaultTheme {
val viewModel: NoteViewModel = viewModel(factory = viewModelFactory)
- val context = LocalContext.current
-
- // Globale Notenliste
- val notes = remember { mutableStateListOf() }
-
// Bildauswahl + Dialog-States
var selectedUris by remember { mutableStateOf>(emptyList()) }
var showDialog by remember { mutableStateOf(false) }
@@ -55,6 +46,15 @@ class MainActivity : ComponentActivity() {
}
)
+ var noteToEdit by remember { mutableStateOf(null) }
+
+ // Dialog anzeigen
+ val openDialog: (NoteEntity?) -> Unit = { note ->
+ Log.d("EditNote", "NoteEntity: " + note?.title)
+ noteToEdit = note
+ showDialog = true
+ }
+
// UI anzeigen
MainScreen(
viewModel = viewModel,
@@ -62,7 +62,8 @@ class MainActivity : ComponentActivity() {
imagePickerLauncher.launch(
arrayOf("image/*")
)
- }
+ },
+ onEditNote = openDialog
)
// Dialog bei Bedarf
@@ -72,17 +73,34 @@ class MainActivity : ComponentActivity() {
AddNoteDialog(
onDismiss = { showDialog = false },
onSave = { title, composer, year, genre, description ->
- viewModel.addNote(
- context = context,
- title = title,
- composer = composer,
- year = year,
- genre = genre,
- description = description,
- selectedUris = selectedUris,
- onDone = { showDialog = false }
- )
- }
+ if(noteToEdit == null) {
+ viewModel.addNote(
+ context = context,
+ title = title,
+ composer = composer,
+ year = year,
+ genre = genre,
+ description = description,
+ selectedUris = selectedUris,
+ onDone = { showDialog = false }
+ )
+ } else {
+ viewModel.updateNote(
+ editedNote = noteToEdit!!,
+ updatedTitle = title,
+ updatedComposer = composer,
+ updatedYear = year,
+ updatedGenre = genre,
+ updatedDescription = description,
+ onDone = { showDialog = false }
+ )
+ }
+ },
+ initialTitle = noteToEdit?.title ?: "",
+ initialComposer = noteToEdit?.composer,
+ initialYear = noteToEdit?.year,
+ initialGenre = noteToEdit?.genre,
+ initialDescription = noteToEdit?.description
)
}
}
diff --git a/app/src/main/java/come/stormborntales/notevault/data/local/dao/NoteDao.kt b/app/src/main/java/come/stormborntales/notevault/data/local/dao/NoteDao.kt
index 8fa3169..a9c55ae 100644
--- a/app/src/main/java/come/stormborntales/notevault/data/local/dao/NoteDao.kt
+++ b/app/src/main/java/come/stormborntales/notevault/data/local/dao/NoteDao.kt
@@ -5,6 +5,7 @@ import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
+import androidx.room.Update
import come.stormborntales.notevault.data.local.entity.NoteEntity
import kotlinx.coroutines.flow.Flow
@@ -18,4 +19,7 @@ interface NoteDao {
@Delete
suspend fun delete(note: NoteEntity)
+
+ @Update
+ suspend fun update(note: NoteEntity)
}
\ No newline at end of file
diff --git a/app/src/main/java/come/stormborntales/notevault/data/local/entity/NoteEntity.kt b/app/src/main/java/come/stormborntales/notevault/data/local/entity/NoteEntity.kt
index 498c3a8..9be2a13 100644
--- a/app/src/main/java/come/stormborntales/notevault/data/local/entity/NoteEntity.kt
+++ b/app/src/main/java/come/stormborntales/notevault/data/local/entity/NoteEntity.kt
@@ -6,11 +6,11 @@ import androidx.room.PrimaryKey
@Entity(tableName = "notes")
data class NoteEntity(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
- val title: String,
+ var title: String,
val images: List, // oder String + TypeConverter
- val composer: String?,
- val year: Int?,
- val genre: String?,
- val description: String?,
+ var composer: String?,
+ var year: Int?,
+ var genre: String?,
+ var description: String?,
val imagePreview: String
)
diff --git a/app/src/main/java/come/stormborntales/notevault/data/repository/NoteRepository.kt b/app/src/main/java/come/stormborntales/notevault/data/repository/NoteRepository.kt
index b0b769d..55ac247 100644
--- a/app/src/main/java/come/stormborntales/notevault/data/repository/NoteRepository.kt
+++ b/app/src/main/java/come/stormborntales/notevault/data/repository/NoteRepository.kt
@@ -9,4 +9,6 @@ class NoteRepository(private val dao: NoteDao) {
suspend fun insert(note: NoteEntity) = dao.insert(note)
suspend fun delete(note: NoteEntity) = dao.delete(note)
+
+ suspend fun update(note: NoteEntity) = dao.update(note);
}
diff --git a/app/src/main/java/come/stormborntales/notevault/ui/screens/AddNoteDialog.kt b/app/src/main/java/come/stormborntales/notevault/ui/screens/AddNoteDialog.kt
index 3bce4ce..a5ca5a7 100644
--- a/app/src/main/java/come/stormborntales/notevault/ui/screens/AddNoteDialog.kt
+++ b/app/src/main/java/come/stormborntales/notevault/ui/screens/AddNoteDialog.kt
@@ -14,15 +14,21 @@ import androidx.compose.ui.unit.dp
@Composable
fun AddNoteDialog(
onDismiss: () -> Unit,
- onSave: (title: String, composer: String?, year: Int?, genre: String?, description: String?) -> Unit
+ onSave: (title: String, composer: String?, year: Int?, genre: String?, description: String?) -> Unit,
+ initialTitle: String = "",
+ initialComposer: String? = null,
+ initialYear: Int? = null,
+ initialGenre: String? = null,
+ initialDescription: String? = null
) {
- var title by remember { mutableStateOf("") }
- var composer by remember { mutableStateOf("") }
- var yearText by remember { mutableStateOf("") }
- var genre by remember { mutableStateOf("") }
- var description by remember { mutableStateOf("") }
+ var title by remember { mutableStateOf(initialTitle) }
+ var composer by remember { mutableStateOf(initialComposer ?: "") }
+ var yearText by remember { mutableStateOf(initialYear?.toString() ?: "") }
+ var genre by remember { mutableStateOf(initialGenre ?: "") }
+ var description by remember { mutableStateOf(initialDescription ?: "") }
var showTitleError by remember { mutableStateOf(false) }
+
AlertDialog(
onDismissRequest = onDismiss,
confirmButton = {
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 1c73733..844288f 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
@@ -6,6 +6,7 @@ import android.graphics.BitmapFactory
import android.graphics.ImageDecoder
import android.media.Image
import android.net.Uri
+import android.util.Log
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
@@ -45,7 +46,7 @@ fun loadImageBitmap(context: Context, uriString: String): ImageBitmap? {
}
@Composable
-fun NoteCard(note: NoteEntity, onDeleteNote: (NoteEntity) -> Unit) {
+fun NoteCard(note: NoteEntity, onDeleteNote: (NoteEntity) -> Unit, onEditNote: (NoteEntity) -> Unit) {
val context = LocalContext.current
@@ -71,7 +72,7 @@ fun NoteCard(note: NoteEntity, onDeleteNote: (NoteEntity) -> Unit) {
modifier = Modifier
.weight(1f)
.align(Alignment.CenterVertically)
- .padding(start=16.dp)
+ .padding(start = 16.dp)
) {
Text(
text = note.title,
@@ -116,7 +117,10 @@ fun NoteCard(note: NoteEntity, onDeleteNote: (NoteEntity) -> Unit) {
Text("Anzeigen", style = MaterialTheme.typography.labelLarge)
}
OutlinedButton(
- onClick = { /* TODO */ },
+ onClick = {
+ onEditNote(note)
+ Log.d("EditNote", "on Edit Note!")
+ },
contentPadding = PaddingValues(horizontal = 12.dp, vertical = 4.dp)
) {
Text("Bearbeiten", style = MaterialTheme.typography.labelLarge)
@@ -143,7 +147,8 @@ fun NoteCard(note: NoteEntity, onDeleteNote: (NoteEntity) -> Unit) {
@Composable
fun MainScreen(
onAddNoteClicked: () -> Unit, // Übergib hier deine Logik für den Import
- viewModel: NoteViewModel
+ viewModel: NoteViewModel,
+ onEditNote: (NoteEntity) -> Unit
) {
val notes by viewModel.notes.observeAsState(emptyList())
Scaffold(
@@ -168,9 +173,9 @@ fun MainScreen(
.padding(16.dp)
) {
items(notes) { note ->
- NoteCard(note = note, onDeleteNote = {noteEntity ->
+ NoteCard(note = note, onDeleteNote = { noteEntity ->
viewModel.deleteNote(noteEntity)
- })
+ }, onEditNote = onEditNote)
}
}
}
diff --git a/app/src/main/java/come/stormborntales/notevault/ui/viewmodel/NoteViewModel.kt b/app/src/main/java/come/stormborntales/notevault/ui/viewmodel/NoteViewModel.kt
index 0e02293..e7bf8a1 100644
--- a/app/src/main/java/come/stormborntales/notevault/ui/viewmodel/NoteViewModel.kt
+++ b/app/src/main/java/come/stormborntales/notevault/ui/viewmodel/NoteViewModel.kt
@@ -14,7 +14,6 @@ import come.stormborntales.notevault.data.repository.NoteRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
-import java.io.InputStream
import androidx.core.graphics.scale
class NoteViewModel(
@@ -86,4 +85,26 @@ class NoteViewModel(
repository.delete(note)
}
}
+
+ fun updateNote(
+ editedNote: NoteEntity,
+ updatedTitle: String,
+ updatedComposer: String?,
+ updatedYear: Int?,
+ updatedGenre: String?,
+ updatedDescription: String?,
+ onDone: () -> Unit
+ ) {
+ viewModelScope.launch {
+ editedNote.title = updatedTitle
+ editedNote.year = updatedYear;
+ editedNote.composer = updatedComposer
+ editedNote.genre = updatedGenre
+ editedNote.description = updatedDescription
+
+ repository.update(editedNote)
+
+ onDone()
+ }
+ }
}