From accfe153508fd9967da4b19454c7e4307f6b0274 Mon Sep 17 00:00:00 2001 From: Florian Egger Date: Mon, 7 Sep 2026 11:36:54 +0200 Subject: [PATCH] Android: replace language free-text with a dropdown (auto/en/de) Fixed list per current needs; "auto" passes null to the engine like the desktop app. Live-mode model defaults (tiny/base live, small for final) will follow with M2. --- .../java/com/meetrec/android/MainActivity.kt | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/java/com/meetrec/android/MainActivity.kt b/android/app/src/main/java/com/meetrec/android/MainActivity.kt index 9b9dcc6..6f3e752 100644 --- a/android/app/src/main/java/com/meetrec/android/MainActivity.kt +++ b/android/app/src/main/java/com/meetrec/android/MainActivity.kt @@ -67,7 +67,8 @@ fun MeetRecScreen() { var model by remember { mutableStateOf("tiny") } var modelMenu by remember { mutableStateOf(false) } - var language by remember { mutableStateOf("") } + var language by remember { mutableStateOf("auto") } + var langMenu by remember { mutableStateOf(false) } var status by remember { mutableStateOf("Select a model, download and load it.") } var busy by remember { mutableStateOf(false) } var engine by remember { mutableStateOf(null) } @@ -196,13 +197,28 @@ fun MeetRecScreen() { } } } - OutlinedTextField( - value = language, - onValueChange = { language = it.trim() }, - label = { Text("Language") }, - placeholder = { Text("auto") }, + ExposedDropdownMenuBox( + expanded = langMenu, + onExpandedChange = { langMenu = it }, modifier = Modifier.weight(1f), - ) + ) { + OutlinedTextField( + value = language, + onValueChange = {}, + readOnly = true, + label = { Text("Language") }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(langMenu) }, + modifier = Modifier.menuAnchor().fillMaxWidth(), + ) + ExposedDropdownMenu(expanded = langMenu, onDismissRequest = { langMenu = false }) { + LANGUAGES.forEach { code -> + DropdownMenuItem( + text = { Text(code) }, + onClick = { language = code; langMenu = false }, + ) + } + } + } } // model actions @@ -279,7 +295,7 @@ fun MeetRecScreen() { eng.transcribe( samples, beamSize = 5, - language = language.ifBlank { null }, + language = language.takeIf { it != "auto" }, ) } segments = segs @@ -326,6 +342,8 @@ fun MeetRecScreen() { } } +private val LANGUAGES = listOf("auto", "en", "de") + private fun fmtMs(ms: Long): String { val total = ms / 1000 val h = total / 3600