UPD: Select files from nextcloud o.ä.

This commit is contained in:
Fawkes100 2025-04-29 17:38:40 +02:00
parent 2f089bd3c4
commit 646e2a5f1a
2 changed files with 45 additions and 25 deletions

View File

@ -4,6 +4,14 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-04-29T15:21:34.999046322Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=R52N50NLGRT" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState> </SelectionState>
</selectionStates> </selectionStates>
</component> </component>

View File

@ -2,6 +2,7 @@ package come.stormborntales.notevault
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.webkit.MimeTypeMap
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
@ -13,6 +14,8 @@ import come.stormborntales.notevault.data.model.NoteEntry
import come.stormborntales.notevault.ui.screens.AddNoteDialog import come.stormborntales.notevault.ui.screens.AddNoteDialog
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 kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File import java.io.File
import java.io.InputStream import java.io.InputStream
@ -33,7 +36,7 @@ class MainActivity : ComponentActivity() {
// Launcher innerhalb von Compose // Launcher innerhalb von Compose
val imagePickerLauncher = rememberLauncherForActivityResult( val imagePickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickMultipleVisualMedia(), contract = ActivityResultContracts.OpenMultipleDocuments(),
onResult = { uris -> onResult = { uris ->
if (uris.isNotEmpty()) { if (uris.isNotEmpty()) {
selectedUris = uris selectedUris = uris
@ -47,46 +50,55 @@ class MainActivity : ComponentActivity() {
notes = notes, notes = notes,
onAddNoteClicked = { onAddNoteClicked = {
imagePickerLauncher.launch( imagePickerLauncher.launch(
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageAndVideo) arrayOf("image/*")
) )
} }
) )
// Dialog bei Bedarf // Dialog bei Bedarf
if (showDialog) { if (showDialog) {
val context = LocalContext.current;
val scope = rememberCoroutineScope();
AddNoteDialog( AddNoteDialog(
onDismiss = { showDialog = false }, onDismiss = { showDialog = false },
onSave = { title, composer, year, genre, description -> onSave = { title, composer, year, genre, description ->
val copiedUris = selectedUris.mapNotNull { uri -> scope.launch(Dispatchers.IO) {
try { val copiedUris = selectedUris.mapNotNull { uri ->
val inputStream: InputStream? = context.contentResolver.openInputStream(uri) try {
val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}_${uri.lastPathSegment}") val inputStream: InputStream? = context.contentResolver.openInputStream(uri)
inputStream?.use { input -> val extension = MimeTypeMap.getSingleton()
outputFile.outputStream().use { output -> .getExtensionFromMimeType(context.contentResolver.getType(uri)) ?: "jpg" // Fallback
input.copyTo(output)
val outputFile = File(context.filesDir, "note_${System.currentTimeMillis()}.$extension")
inputStream?.use { input ->
outputFile.outputStream().use { output ->
input.copyTo(output)
}
} }
Uri.fromFile(outputFile)
} catch (e: Exception) {
e.printStackTrace()
null
} }
Uri.fromFile(outputFile)
} catch (e: Exception) {
e.printStackTrace()
null
} }
}
if (copiedUris.isNotEmpty()) { if (copiedUris.isNotEmpty()) {
notes.add( notes.add(
NoteEntry( NoteEntry(
title = title, title = title,
images = copiedUris, images = copiedUris,
composer = composer, composer = composer,
year = year, year = year,
genre = genre, genre = genre,
description = description description = description
)
) )
) }
showDialog = false
} }
showDialog = false
} }
) )
} }