From 29007c3885b5d6985f6536befa67feb8c09fd96b Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Wed, 29 Apr 2026 16:24:38 +0700 Subject: [PATCH] feat: per-mode voice-master hint copy in settings - Add mode-specific voice hint messages (player vs master mode). - Update VoiceToggles to show contextual hint based on current mode. - Improve UX clarity in settings sheet. Upstream: a60ea08 --- .../miti99/loto/ui/settings/VoiceToggles.kt | 52 +++++++++++++------ app/src/main/res/values/strings.xml | 2 + 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/miti99/loto/ui/settings/VoiceToggles.kt b/app/src/main/java/com/miti99/loto/ui/settings/VoiceToggles.kt index dc8705a..28af097 100644 --- a/app/src/main/java/com/miti99/loto/ui/settings/VoiceToggles.kt +++ b/app/src/main/java/com/miti99/loto/ui/settings/VoiceToggles.kt @@ -4,6 +4,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.material3.Text @@ -11,14 +12,16 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import com.miti99.loto.R import com.miti99.loto.settings.SettingsState /** - * Three voice-announcement toggle rows. + * Voice-announcement toggle rows. Mirrors `SettingsButton.svelte` gating: * - * The "đọc số khi Chờ" switch is only visible when [state.voiceEnabledPlayer] is on - * (matching web's conditional render at SettingsButton.svelte). + * - Master row visible when mode != PLAYER. Hint copy varies by mode + * (BOTH includes "+ báo Chờ/Kinh", MASTER-only just "Đọc số đã xổ."). + * - Player + waiting-number rows visible when mode != MASTER. */ @Composable internal fun VoiceToggles( @@ -29,22 +32,37 @@ internal fun VoiceToggles( modifier: Modifier = Modifier, ) { Column(modifier = modifier) { - SwitchRow( - label = stringResource(R.string.voice_enabled_master), - checked = state.voiceEnabledMaster, - onCheckedChange = onSetVoiceEnabledMaster, - ) - SwitchRow( - label = stringResource(R.string.voice_enabled_player), - checked = state.voiceEnabledPlayer, - onCheckedChange = onSetVoiceEnabledPlayer, - ) - AnimatedVisibility(visible = state.voiceEnabledPlayer) { + if (state.mode != SettingsState.Mode.PLAYER) { SwitchRow( - label = stringResource(R.string.voice_waiting_number), - checked = state.voiceWaitingNumber, - onCheckedChange = onSetVoiceWaitingNumber, + label = stringResource(R.string.voice_enabled_master), + checked = state.voiceEnabledMaster, + onCheckedChange = onSetVoiceEnabledMaster, ) + val hintRes = if (state.mode == SettingsState.Mode.BOTH) + R.string.voice_master_hint_both + else + R.string.voice_master_hint_master_only + Text( + text = stringResource(hintRes), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(start = 4.dp, top = 2.dp, bottom = 8.dp), + ) + } + + if (state.mode != SettingsState.Mode.MASTER) { + SwitchRow( + label = stringResource(R.string.voice_enabled_player), + checked = state.voiceEnabledPlayer, + onCheckedChange = onSetVoiceEnabledPlayer, + ) + AnimatedVisibility(visible = state.voiceEnabledPlayer) { + SwitchRow( + label = stringResource(R.string.voice_waiting_number), + checked = state.voiceWaitingNumber, + onCheckedChange = onSetVoiceWaitingNumber, + ) + } } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 837ba00..c96ca28 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,6 +62,8 @@ Quản trò: đọc số Người chơi: đọc Chờ / Kinh Đọc số khi Chờ + Đọc số đã xổ + báo Chờ/Kinh. + Đọc số đã xổ. Chọn giọng Màu ô trống Tùy chỉnh