feat(settings): 支持自定义已完成待办的显示模式
This commit is contained in:
parent
086e0ce447
commit
01aaa792a6
10 changed files with 104 additions and 5 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
|
@ -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() },
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ enum class TodoScreen {
|
|||
TodoEditor,
|
||||
SettingsMain,
|
||||
SettingsAppearance,
|
||||
SettingsInterface,
|
||||
SettingsAbout,
|
||||
SettingsAboutLicence
|
||||
}
|
||||
|
|
@ -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 }
|
||||
|
||||
|
|
|
|||
|
|
@ -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) },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -20,9 +20,10 @@ import kotlinx.coroutines.launch
|
|||
class MainViewModel : ViewModel() {
|
||||
// 待办
|
||||
val toDos: Flow<List<TodoEntity>> = Repository.getAllTodos()
|
||||
val showConfetti = mutableStateOf(false)
|
||||
var selectedEditTodo by mutableStateOf<TodoEntity?>(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
|
||||
}
|
||||
}
|
||||
|
|
@ -73,4 +73,10 @@
|
|||
<string name="contrast_default">默认</string>
|
||||
<string name="contrast_medium">中</string>
|
||||
<string name="contrast_high">高</string>
|
||||
<string name="tip_change_contrast_level">更改颜色对比度</string>
|
||||
<string name="pref_interface">界面</string>
|
||||
<string name="pref_interface_desc">待办列表、排序方式</string>
|
||||
<string name="pref_show_completed">显示已完成待办</string>
|
||||
<string name="pref_show_completed_desc">在待办列表里显示已完成的待办</string>
|
||||
<string name="pref_category_todo_list">待办列表</string>
|
||||
</resources>
|
||||
|
|
@ -75,4 +75,9 @@
|
|||
<string name="contrast_medium">Medium</string>
|
||||
<string name="contrast_high">High</string>
|
||||
<string name="tip_change_contrast_level">Change the contrast level</string>
|
||||
<string name="pref_interface">Interface</string>
|
||||
<string name="pref_interface_desc">To-Do List, sorting method</string>
|
||||
<string name="pref_show_completed">Show Completed Tasks</string>
|
||||
<string name="pref_show_completed_desc">Show completed tasks in to-do list</string>
|
||||
<string name="pref_category_todo_list">To-Do List</string>
|
||||
</resources>
|
||||
Loading…
Reference in a new issue