diff --git a/core/presentation/src/main/res/values-zh/strings.xml b/core/presentation/src/main/res/values-zh/strings.xml index 39acf7e4..00923f3c 100644 --- a/core/presentation/src/main/res/values-zh/strings.xml +++ b/core/presentation/src/main/res/values-zh/strings.xml @@ -277,6 +277,7 @@ 选择转发器 对方呼号 模式 + 修改模式 已存入本地日志 已上传 %1$d 条, %2$d 条仍在队列 已上传 %1$d 条 diff --git a/core/presentation/src/main/res/values/strings.xml b/core/presentation/src/main/res/values/strings.xml index 4c606b05..53b9fb93 100644 --- a/core/presentation/src/main/res/values/strings.xml +++ b/core/presentation/src/main/res/values/strings.xml @@ -308,6 +308,7 @@ Select transponder Callsign Mode + Edit the mode Saved to local log Uploaded %1$d, %2$d still queued Uploaded %1$d QSO diff --git a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt index 502d819f..2d2026ef 100644 --- a/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt +++ b/feature/radar/src/main/java/com/rtbishop/look4sat/feature/radar/LogTab.kt @@ -58,6 +58,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment +import androidx.compose.ui.semantics.Role import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color @@ -279,6 +280,7 @@ private fun ExpandedLogInput( // previous one's mode and uploaded a value the operator never chose. var mode by remember(radio.uuid) { mutableStateOf(radio.uplinkMode ?: "FM") } var modeEditable by remember(radio.uuid) { mutableStateOf(false) } + val editModeLabel = stringResource(id = R.string.wavelog_mode_edit) // Calls logged during this pass, so a repeat can be mentioned without being blocked: the same // station on a later pass is a legitimate new contact. This replaces a 300ms window that // swallowed what it guessed were accidental double submissions - a guess that could discard @@ -442,7 +444,9 @@ private fun ExpandedLogInput( // 48dp is the Material Design minimum for anything tappable, and this row is // tapped to reveal the mode field. Padding alone left it around 20dp. .heightIn(min = 48.dp) - .clickable { modeEditable = true } + // Role.Button so TalkBack announces it as interactive. A bare clickable + // declares no role, so the row read as two labels and the tap was undiscoverable. + .clickable(role = Role.Button, onClickLabel = editModeLabel) { modeEditable = true } .padding(horizontal = LocalSpacing.current.extraExtraSmall) ) { Text(