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 295d163..498c3a8 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 @@ -11,5 +11,6 @@ data class NoteEntity( val composer: String?, val year: Int?, val genre: String?, - val description: String? + val description: String?, + val imagePreview: String ) 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 9ade2e9..4988234 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 @@ -57,22 +57,20 @@ fun NoteCard(note: NoteEntity) { ) { Row(modifier = Modifier.padding(16.dp)) { // Linkes Vorschaubild - - note.images.firstOrNull()?.let { uriString -> - AsyncImage( - model = uriString, - contentDescription = "Vorschaubild", - modifier = Modifier - .size(120.dp) - .clip(RoundedCornerShape(12.dp)) - ) - } + AsyncImage( + model = note.imagePreview, + contentDescription = "Vorschaubild", + modifier = Modifier + .size(120.dp) + .clip(RoundedCornerShape(12.dp)) + ) // Rechte Info-Spalte Column( modifier = Modifier .weight(1f) .align(Alignment.CenterVertically) + .padding(start=16.dp) ) { Text( text = note.title, 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 43527c0..0e02293 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 @@ -1,6 +1,8 @@ package come.stormborntales.notevault.ui.viewmodel import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.net.Uri import android.util.Log import android.webkit.MimeTypeMap @@ -12,12 +14,31 @@ 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( private val repository: NoteRepository, ) : ViewModel() { val notes = repository.allNotes.asLiveData() + fun createPreviewImage(context: Context, uri: Uri): File? { + return try { + val inputStream = context.contentResolver.openInputStream(uri) + val originalBitmap = BitmapFactory.decodeStream(inputStream) ?: return null + + val previewBitmap = originalBitmap.scale(128, 128, false) + val previewFile = File(context.filesDir, "preview_${System.currentTimeMillis()}.jpg") + previewFile.outputStream().use { out -> + previewBitmap.compress(Bitmap.CompressFormat.JPEG, 75, out) + } + previewFile + } catch (e: Exception) { + e.printStackTrace() + null + } + } + fun addNote(context: Context, title: String, composer: String?, year: Int?, genre: String?, description: String?, selectedUris: List, onDone:() -> Unit) { viewModelScope.launch(Dispatchers.IO) { val copiedUris = selectedUris.mapNotNull { uri -> @@ -41,13 +62,16 @@ class NoteViewModel( } if (copiedUris.isNotEmpty()) { + val preview_image_path = createPreviewImage(context, uri = selectedUris[0]) + val note = NoteEntity( title = title, images = copiedUris, // muss als List gespeichert sein composer = composer, year = year, genre = genre, - description = description + description = description, + imagePreview = preview_image_path.toString() ) repository.insert(note)