Initial commit: InTono — app KMP per l'apprendimento musicale
App Kotlin Multiplatform (Android/iOS/Desktop) con Compose Multiplatform: controllo intonazione (YIN), pratica guidata, metronomo, ear training, sfide, scansione spartiti via AI, spartiti bundled e pentagramma con glifi tipografici, travature, battute e spaziatura proporzionale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
commit
21ad969b10
245 files changed
+28963
No files matched your search
@@ -0,0 +1,35 @@
|
||||
package com.notemusicali.ui.components
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import com.notemusicali.scores.extractMusicXmlFromBytes
|
||||
|
||||
@Composable
|
||||
actual fun rememberFilePickerLauncher(
|
||||
mimeTypes: List<String>,
|
||||
onFileContent: (String) -> Unit,
|
||||
): () -> Unit {
|
||||
val context = LocalContext.current
|
||||
val launcher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.OpenDocument()
|
||||
) { uri: Uri? ->
|
||||
uri?.let {
|
||||
try {
|
||||
context.contentResolver.openInputStream(it)?.use { stream ->
|
||||
val bytes = stream.readBytes()
|
||||
val content = extractMusicXmlFromBytes(bytes)
|
||||
if (content != null) {
|
||||
onFileContent(content)
|
||||
}
|
||||
}
|
||||
} catch (_: Exception) {
|
||||
// File read failed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { launcher.launch(mimeTypes.toTypedArray()) }
|
||||
}
|
||||
Reference in new issue
Block a user