From 01aaa792a69d244168df0057d88e3e3a2b85ce20 Mon Sep 17 00:00:00 2001 From: Super12138 <70494801+Super12138@users.noreply.github.com> Date: Wed, 5 Feb 2025 17:33:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(settings):=20=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B7=B2=E5=AE=8C=E6=88=90=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E7=9A=84=E6=98=BE=E7=A4=BA=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/super12138/todo/constants/Constants.kt | 3 + .../super12138/todo/constants/GlobalValues.kt | 4 ++ .../todo/ui/navigation/TodoNavigation.kt | 13 ++++- .../todo/ui/navigation/TodoScreen.kt | 1 + .../super12138/todo/ui/pages/main/MainPage.kt | 2 +- .../ui/pages/settings/SettingsInterface.kt | 55 +++++++++++++++++++ .../todo/ui/pages/settings/SettingsMain.kt | 10 +++- .../todo/ui/viewmodels/MainViewModel.kt | 10 +++- app/src/main/res/values-zh-rCN/strings.xml | 6 ++ app/src/main/res/values/strings.xml | 5 ++ 10 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsInterface.kt diff --git a/app/src/main/kotlin/cn/super12138/todo/constants/Constants.kt b/app/src/main/kotlin/cn/super12138/todo/constants/Constants.kt index f2392ef..28d7928 100644 --- a/app/src/main/kotlin/cn/super12138/todo/constants/Constants.kt +++ b/app/src/main/kotlin/cn/super12138/todo/constants/Constants.kt @@ -14,4 +14,7 @@ object Constants { const val PREF_CONTRAST_LEVEL = "contrast_level" const val PREF_CONTRAST_LEVEL_DEFAULT = 0f // Normal + + const val PREF_SHOW_COMPLETED = "show_completed" + const val PREF_SHOW_COMPLETED_DEFAULT = true } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/constants/GlobalValues.kt b/app/src/main/kotlin/cn/super12138/todo/constants/GlobalValues.kt index da70b05..60d07f3 100644 --- a/app/src/main/kotlin/cn/super12138/todo/constants/GlobalValues.kt +++ b/app/src/main/kotlin/cn/super12138/todo/constants/GlobalValues.kt @@ -19,4 +19,8 @@ object GlobalValues { Constants.PREF_CONTRAST_LEVEL, Constants.PREF_CONTRAST_LEVEL_DEFAULT ) + var showCompleted: Boolean by SPDelegates( + Constants.PREF_SHOW_COMPLETED, + Constants.PREF_SHOW_COMPLETED_DEFAULT + ) } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt index ce55816..277c3d7 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoNavigation.kt @@ -11,6 +11,7 @@ import cn.super12138.todo.ui.pages.main.MainPage import cn.super12138.todo.ui.pages.settings.SettingsAbout import cn.super12138.todo.ui.pages.settings.SettingsAboutLicence import cn.super12138.todo.ui.pages.settings.SettingsAppearance +import cn.super12138.todo.ui.pages.settings.SettingsInterface import cn.super12138.todo.ui.pages.settings.SettingsMain import cn.super12138.todo.ui.theme.materialSharedAxisXIn import cn.super12138.todo.ui.theme.materialSharedAxisXOut @@ -82,9 +83,10 @@ fun TodoNavigation( composable(TodoScreen.SettingsMain.name) { SettingsMain( - onNavigateUp = { navController.navigateUp() }, toAppearancePage = { navController.navigate(TodoScreen.SettingsAppearance.name) }, - toAboutPage = { navController.navigate(TodoScreen.SettingsAbout.name) } + toAboutPage = { navController.navigate(TodoScreen.SettingsAbout.name) }, + toInterfacePage = { navController.navigate(TodoScreen.SettingsInterface.name) }, + onNavigateUp = { navController.navigateUp() }, ) } @@ -95,6 +97,13 @@ fun TodoNavigation( ) } + composable(TodoScreen.SettingsInterface.name) { + SettingsInterface( + viewModel = viewModel, + onNavigateUp = { navController.navigateUp() } + ) + } + composable(TodoScreen.SettingsAbout.name) { SettingsAbout( onNavigateUp = { navController.navigateUp() }, diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoScreen.kt b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoScreen.kt index c7b4a2d..68a5837 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoScreen.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/navigation/TodoScreen.kt @@ -5,6 +5,7 @@ enum class TodoScreen { TodoEditor, SettingsMain, SettingsAppearance, + SettingsInterface, SettingsAbout, SettingsAboutLicence } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt index 4fff814..b439844 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt @@ -59,7 +59,7 @@ fun MainPage( } } - val showCompleted = true // 后续替换成用户设置 + val showCompleted = viewModel.showCompletedTodos val filteredTodoList = if (showCompleted) toDoList.value else toDoList.value.filter { item -> !item.isCompleted } diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsInterface.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsInterface.kt new file mode 100644 index 0000000..743fab5 --- /dev/null +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsInterface.kt @@ -0,0 +1,55 @@ +package cn.super12138.todo.ui.pages.settings + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Checklist +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.res.stringResource +import cn.super12138.todo.R +import cn.super12138.todo.constants.Constants +import cn.super12138.todo.ui.components.LargeTopAppBarScaffold +import cn.super12138.todo.ui.pages.settings.components.SettingsCategory +import cn.super12138.todo.ui.pages.settings.components.SwitchSettingsItem +import cn.super12138.todo.ui.viewmodels.MainViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SettingsInterface( + viewModel: MainViewModel, + onNavigateUp: () -> Unit, + modifier: Modifier = Modifier +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + LargeTopAppBarScaffold( + title = stringResource(R.string.pref_interface), + onBack = onNavigateUp, + scrollBehavior = scrollBehavior, + modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection), + ) { innerPadding -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(innerPadding) + .verticalScroll(rememberScrollState()) + ) { + SettingsCategory(stringResource(R.string.pref_category_todo_list)) + + SwitchSettingsItem( + key = Constants.PREF_SHOW_COMPLETED, + default = Constants.PREF_SHOW_COMPLETED_DEFAULT, + leadingIcon = Icons.Outlined.Checklist, + title = stringResource(R.string.pref_show_completed), + description = stringResource(R.string.pref_show_completed_desc), + onCheckedChange = { viewModel.setShowCompleted(it) }, + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsMain.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsMain.kt index 594011a..799fd94 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsMain.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsMain.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.ColorLens import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.ViewComfy import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable @@ -20,9 +21,10 @@ import cn.super12138.todo.ui.pages.settings.components.SettingsItem @OptIn(ExperimentalMaterial3Api::class) @Composable fun SettingsMain( - onNavigateUp: () -> Unit, toAppearancePage: () -> Unit, + toInterfacePage: () -> Unit, toAboutPage: () -> Unit, + onNavigateUp: () -> Unit, modifier: Modifier = Modifier ) { val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() @@ -43,6 +45,12 @@ fun SettingsMain( description = stringResource(R.string.pref_appearance_desc), onClick = toAppearancePage ) + SettingsItem( + leadingIcon = Icons.Outlined.ViewComfy, + title = stringResource(R.string.pref_interface), + description = stringResource(R.string.pref_interface_desc), + onClick = toInterfacePage + ) SettingsItem( leadingIcon = Icons.Outlined.Info, title = stringResource(R.string.pref_about), diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/viewmodels/MainViewModel.kt b/app/src/main/kotlin/cn/super12138/todo/ui/viewmodels/MainViewModel.kt index 45a6f39..265601c 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/viewmodels/MainViewModel.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/viewmodels/MainViewModel.kt @@ -20,9 +20,10 @@ import kotlinx.coroutines.launch class MainViewModel : ViewModel() { // 待办 val toDos: Flow> = Repository.getAllTodos() + val showConfetti = mutableStateOf(false) var selectedEditTodo by mutableStateOf(null) private set - val showConfetti = mutableStateOf(false) + var showCompletedTodos by mutableStateOf(GlobalValues.showCompleted) // 深色模式 var appDarkMode by mutableStateOf(DarkMode.fromId(GlobalValues.darkMode)) @@ -118,6 +119,9 @@ class MainViewModel : ViewModel() { showConfetti.value = true } + /** + * 应用设置 + */ fun setDarkMode(darkMode: DarkMode) { appDarkMode = darkMode } @@ -125,4 +129,8 @@ class MainViewModel : ViewModel() { fun setContrastLevel(contrastLevel: ContrastLevel) { appContrastLevel = contrastLevel } + + fun setShowCompleted(show: Boolean) { + showCompletedTodos = show + } } \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index efa8c2b..6e48652 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -73,4 +73,10 @@ 默认 + 更改颜色对比度 + 界面 + 待办列表、排序方式 + 显示已完成待办 + 在待办列表里显示已完成的待办 + 待办列表 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 69dbfd2..7cd8e1e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,4 +75,9 @@ Medium High Change the contrast level + Interface + To-Do List, sorting method + Show Completed Tasks + Show completed tasks in to-do list + To-Do List \ No newline at end of file