diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d4dd776..a9de246 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { applicationId = "cn.super12138.todo" minSdk = 24 targetSdk = 36 - versionCode = 676 + versionCode = 678 versionName = "2.1.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt index 8b57894..b958784 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt @@ -47,8 +47,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.LiveRegionMode import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.liveRegion import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.unit.dp import cn.super12138.todo.R import cn.super12138.todo.constants.Constants @@ -249,7 +252,12 @@ fun TodoEditorPage( val interactionSource = remember { MutableInteractionSource() } Slider( modifier = Modifier.semantics { - contentDescription = context.getString(R.string.label_priority) + contentDescription = + context.getString(R.string.label_priority) + priorityName[Priority.fromFloat( + priorityState + ).ordinal] + stateDescription = priorityName[Priority.fromFloat(priorityState).ordinal] + liveRegion = LiveRegionMode.Polite }, value = priorityState, onValueChange = { diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsCategory.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsCategory.kt index 4a51636..4ae1d70 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsCategory.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsCategory.kt @@ -8,7 +8,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp +import cn.super12138.todo.ui.TodoDefaults @Composable fun SettingsCategory( @@ -18,7 +18,11 @@ fun SettingsCategory( Box( modifier = modifier .fillMaxWidth() - .padding(top = 12.dp, start = 24.dp, end = 24.dp) + .padding( + top = TodoDefaults.settingsItemVerticalPadding / 2, + start = TodoDefaults.settingsItemHorizontalPadding, + end = TodoDefaults.settingsItemHorizontalPadding + ) ) { Text( text = title, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsPlainBox.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsPlainBox.kt index fc532d1..3e3112c 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsPlainBox.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/SettingsPlainBox.kt @@ -14,6 +14,8 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.clearAndSetSemantics +import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.unit.dp import cn.super12138.todo.R import cn.super12138.todo.ui.TodoDefaults @@ -23,6 +25,7 @@ fun SettingsPlainBox( text: String, modifier: Modifier = Modifier ) { + val tipText = stringResource(R.string.tip_tips) Column( modifier = modifier .fillMaxWidth() @@ -35,14 +38,16 @@ fun SettingsPlainBox( ) { Icon( imageVector = Icons.Outlined.Info, - contentDescription = stringResource(R.string.tip_tips) + contentDescription = null ) Spacer(Modifier.size(20.dp)) Text( text = text, style = MaterialTheme.typography.bodyMedium.copy( color = MaterialTheme.colorScheme.onSurfaceVariant - ) + ), + modifier = Modifier + .clearAndSetSemantics { contentDescription = "$tipText $text" } ) } } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt index 3430b8c..cf5885d 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/contrast/ContrastPicker.kt @@ -18,8 +18,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.LiveRegionMode +import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.liveRegion import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.unit.dp import cn.super12138.todo.R import cn.super12138.todo.constants.Constants @@ -44,10 +48,17 @@ fun ContrastPicker( Constants.PREF_CONTRAST_LEVEL, Constants.PREF_CONTRAST_LEVEL_DEFAULT ) + val contrastLevelName = + ContrastLevel.entries.map { it.getDisplayName(context) } Slider( modifier = Modifier.semantics { - contentDescription = context.getString(R.string.tip_change_contrast_level) + contentDescription = + context.getString(R.string.pref_contrast_level) + contrastLevelName[ContrastLevel.fromFloat( + contrastState + ).ordinal] + stateDescription = contrastLevelName[ContrastLevel.fromFloat(contrastState).ordinal] + liveRegion = LiveRegionMode.Polite }, value = contrastState, onValueChange = { @@ -63,7 +74,9 @@ fun ContrastPicker( CompositionLocalProvider(LocalTextStyle provides MaterialTheme.typography.bodyMedium) { Row( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier + .fillMaxWidth() + .clearAndSetSemantics {}, horizontalArrangement = Arrangement.SpaceBetween ) { Text(stringResource(R.string.contrast_very_low)) diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/theme/ContrastLevel.kt b/app/src/main/kotlin/cn/super12138/todo/ui/theme/ContrastLevel.kt index adc1e25..5446f75 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/theme/ContrastLevel.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/theme/ContrastLevel.kt @@ -1,5 +1,8 @@ package cn.super12138.todo.ui.theme +import android.content.Context +import cn.super12138.todo.R + enum class ContrastLevel(val value: Float) { VeryLow(-1f), Low(-0.5f), @@ -7,7 +10,7 @@ enum class ContrastLevel(val value: Float) { Medium(0.5f), High(1f); - /*fun getDisplayName(context: Context): String { + fun getDisplayName(context: Context): String { val resId = when (this) { VeryLow -> R.string.contrast_very_low Low -> R.string.contrast_low @@ -16,7 +19,7 @@ enum class ContrastLevel(val value: Float) { High -> R.string.contrast_very_high } return context.getString(resId) - }*/ + } companion object { fun fromFloat(float: Float) = entries.find { it.value == float } ?: Default diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 7a4a3d8..805b94e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -73,7 +73,6 @@ 默认 极高 - 更改颜色对比度 界面与交互 待办列表、触感反馈 显示已完成待办 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c2fefa2..8e27e40 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,7 +74,6 @@ Default High Very High - Change the contrast level Interface & Interaction To-Do List, Haptic Feedback Show Completed Tasks