nextNoteVault #23
@ -3,22 +3,14 @@ package come.stormborntales.notevault
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.util.Log
 | 
			
		||||
import androidx.activity.ComponentActivity
 | 
			
		||||
import androidx.activity.compose.setContent
 | 
			
		||||
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.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.remember
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
import come.stormborntales.notevault.data.model.NoteEntry
 | 
			
		||||
import come.stormborntales.notevault.ui.screens.MainScreen
 | 
			
		||||
import come.stormborntales.notevault.ui.theme.NoteVaultTheme
 | 
			
		||||
import java.io.File
 | 
			
		||||
@ -27,28 +19,35 @@ import java.io.InputStream
 | 
			
		||||
class MainActivity : ComponentActivity() {
 | 
			
		||||
    private lateinit var imagePickerLauncher: ActivityResultLauncher<PickVisualMediaRequest>
 | 
			
		||||
    // 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?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
        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
 | 
			
		||||
        imagePickerLauncher = registerForActivityResult(ActivityResultContracts.PickMultipleVisualMedia()) { uris ->
 | 
			
		||||
            if (!uris.isNullOrEmpty()) {
 | 
			
		||||
                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)
 | 
			
		||||
                val copiedUris = uris.mapNotNull { uri ->
 | 
			
		||||
                    try {
 | 
			
		||||
                        val inputStream: InputStream? = contentResolver.openInputStream(uri)
 | 
			
		||||
                        val outputFile =
 | 
			
		||||
                            File(context.filesDir, "note_${System.currentTimeMillis()}_${uri.lastPathSegment}")
 | 
			
		||||
                        inputStream?.use { input ->
 | 
			
		||||
                            outputFile.outputStream().use { output ->
 | 
			
		||||
                                input.copyTo(output)
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -64,10 +63,4 @@ 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.platform.LocalContext
 | 
			
		||||
import androidx.compose.ui.unit.dp
 | 
			
		||||
import come.stormborntales.notevault.data.model.NoteEntry
 | 
			
		||||
import java.io.InputStream
 | 
			
		||||
 | 
			
		||||
fun loadImageBitmap(context: Context, uri: Uri): ImageBitmap? {
 | 
			
		||||
@ -46,7 +47,7 @@ fun getFileNameFromUri(context: Context, uri: Uri): String? {
 | 
			
		||||
@Composable
 | 
			
		||||
fun MainScreen(
 | 
			
		||||
    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
 | 
			
		||||
    // Hole den aktuellen Context
 | 
			
		||||
@ -73,8 +74,8 @@ fun MainScreen(
 | 
			
		||||
                .padding(16.dp)
 | 
			
		||||
        ) {
 | 
			
		||||
            items(dummyNotes) { noteUri ->
 | 
			
		||||
                val imageBitmap = loadImageBitmap(context, noteUri)
 | 
			
		||||
                val fileName = getFileNameFromUri(context, noteUri)
 | 
			
		||||
                val imageBitmap = loadImageBitmap(context, noteUri.images[0])
 | 
			
		||||
                val fileName = noteUri.title
 | 
			
		||||
 | 
			
		||||
                if (imageBitmap != null) {
 | 
			
		||||
                    Card(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user