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.
This commit is contained in:
2026-09-07 11:36:54 +02:00
parent 8e079467fa
commit accfe15350
@@ -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<WhisperEngine?>(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