refactor: 优化重构部分代码
This commit is contained in:
parent
fdc01f2750
commit
9eee5ead8a
22 changed files with 130 additions and 121 deletions
|
|
@ -34,7 +34,7 @@ android {
|
||||||
applicationId = "cn.super12138.todo"
|
applicationId = "cn.super12138.todo"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 647
|
versionCode = 656
|
||||||
versionName = "2.1.2"
|
versionName = "2.1.2"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ enum class Priority(val value: Float) {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromFloat(float: Float): Priority {
|
fun fromFloat(float: Float) = entries.find { it.value == float } ?: Default
|
||||||
return Priority.entries.find { it.value == float } ?: Default
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,11 +4,22 @@ import android.content.Context
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
|
|
||||||
enum class SortingMethod(val id: Int) {
|
enum class SortingMethod(val id: Int) {
|
||||||
|
// 按添加先后顺序
|
||||||
Sequential(1),
|
Sequential(1),
|
||||||
|
|
||||||
|
// 按学科
|
||||||
Subject(2),
|
Subject(2),
|
||||||
|
|
||||||
|
// 按优先级
|
||||||
Priority(3),
|
Priority(3),
|
||||||
|
|
||||||
|
// 按完成情况
|
||||||
Completion(4),
|
Completion(4),
|
||||||
|
|
||||||
|
// 按字母升序
|
||||||
AlphabeticalAscending(5),
|
AlphabeticalAscending(5),
|
||||||
|
|
||||||
|
// 按字母降序
|
||||||
AlphabeticalDescending(6);
|
AlphabeticalDescending(6);
|
||||||
|
|
||||||
fun getDisplayName(context: Context): String {
|
fun getDisplayName(context: Context): String {
|
||||||
|
|
@ -24,8 +35,6 @@ enum class SortingMethod(val id: Int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromId(id: Int): SortingMethod {
|
fun fromId(id: Int) = entries.find { it.id == id } ?: Sequential
|
||||||
return SortingMethod.entries.find { it.id == id } ?: Sequential
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -35,8 +35,6 @@ enum class Subjects(val id: Int) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
// 根据 ID 获取 Subjects
|
// 根据 ID 获取 Subjects
|
||||||
fun fromId(id: Int): Subjects {
|
fun fromId(id: Int) = entries.find { it.id == id } ?: Others
|
||||||
return entries.find { it.id == id } ?: Others
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12,4 +12,14 @@ object TodoDefaults {
|
||||||
* 待办卡片默认高度
|
* 待办卡片默认高度
|
||||||
*/
|
*/
|
||||||
val toDoCardHeight = 80.dp
|
val toDoCardHeight = 80.dp
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置项水平边距
|
||||||
|
*/
|
||||||
|
val settingsItemHorizontalPadding = 24.dp
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置项垂直边距
|
||||||
|
*/
|
||||||
|
val settingsItemVerticalPadding = 20.dp
|
||||||
}
|
}
|
||||||
|
|
@ -13,11 +13,11 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.GlobalValues
|
import cn.super12138.todo.constants.GlobalValues
|
||||||
import cn.super12138.todo.logic.model.DarkMode
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode.Dark
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode.FollowSystem
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode.Light
|
|
||||||
import cn.super12138.todo.ui.pages.crash.CrashPage
|
import cn.super12138.todo.ui.pages.crash.CrashPage
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.Dark
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.FollowSystem
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.Light
|
||||||
import cn.super12138.todo.ui.theme.PaletteStyle
|
import cn.super12138.todo.ui.theme.PaletteStyle
|
||||||
import cn.super12138.todo.ui.theme.ToDoTheme
|
import cn.super12138.todo.ui.theme.ToDoTheme
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import cn.super12138.todo.logic.model.DarkMode.Dark
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode.FollowSystem
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode.Light
|
|
||||||
import cn.super12138.todo.ui.components.Konfetti
|
import cn.super12138.todo.ui.components.Konfetti
|
||||||
import cn.super12138.todo.ui.navigation.TodoNavigation
|
import cn.super12138.todo.ui.navigation.TodoNavigation
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.Dark
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.FollowSystem
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode.Light
|
||||||
import cn.super12138.todo.ui.theme.ToDoTheme
|
import cn.super12138.todo.ui.theme.ToDoTheme
|
||||||
import cn.super12138.todo.ui.viewmodels.MainViewModel
|
import cn.super12138.todo.ui.viewmodels.MainViewModel
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ fun TodoEditorPage(
|
||||||
var subjectContent by rememberSaveable { mutableStateOf(toDo?.customSubject ?: "") }
|
var subjectContent by rememberSaveable { mutableStateOf(toDo?.customSubject ?: "") }
|
||||||
var isErrorSubject by rememberSaveable { mutableStateOf(false) }
|
var isErrorSubject by rememberSaveable { mutableStateOf(false) }
|
||||||
var priorityState by rememberSaveable { mutableFloatStateOf(toDo?.priority ?: 0f) }
|
var priorityState by rememberSaveable { mutableFloatStateOf(toDo?.priority ?: 0f) }
|
||||||
var completedSwitchState by rememberSaveable { mutableStateOf(toDo?.isCompleted ?: false) }
|
var completedSwitchState by rememberSaveable { mutableStateOf(toDo?.isCompleted == true) }
|
||||||
|
|
||||||
val isCustomSubject by remember {
|
val isCustomSubject by remember {
|
||||||
derivedStateOf { selectedSubjectId == Subjects.Custom.id }
|
derivedStateOf { selectedSubjectId == Subjects.Custom.id }
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,8 @@ fun ManagerFragment(
|
||||||
start = TodoDefaults.screenPadding,
|
start = TodoDefaults.screenPadding,
|
||||||
bottom = TodoDefaults.toDoCardHeight / 2,
|
bottom = TodoDefaults.toDoCardHeight / 2,
|
||||||
end = TodoDefaults.screenPadding
|
end = TodoDefaults.screenPadding
|
||||||
)
|
),
|
||||||
|
//verticalArrangement = Arrangement.spacedBy(5.dp)
|
||||||
) {
|
) {
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
item {
|
item {
|
||||||
|
|
@ -59,7 +60,6 @@ fun ManagerFragment(
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
items(
|
items(
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,15 @@
|
||||||
package cn.super12138.todo.ui.pages.settings.components
|
package cn.super12138.todo.ui.pages.settings.components
|
||||||
|
|
||||||
import androidx.compose.foundation.gestures.FlingBehavior
|
import androidx.compose.foundation.ScrollState
|
||||||
import androidx.compose.foundation.gestures.ScrollableDefaults
|
import androidx.compose.foundation.horizontalScroll
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.RowScope
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.wrapContentHeight
|
import androidx.compose.foundation.layout.wrapContentHeight
|
||||||
import androidx.compose.foundation.lazy.LazyListScope
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
|
||||||
import androidx.compose.foundation.lazy.LazyRow
|
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
@ -21,43 +18,38 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import cn.super12138.todo.ui.TodoDefaults
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RowSettingsItem(
|
fun RowSettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
leadingIcon: (@Composable () -> Unit)? = null,
|
leadingIcon: (@Composable () -> Unit)? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
trailingContent: (@Composable () -> Unit)? = null,
|
trailingContent: (@Composable () -> Unit)? = null,
|
||||||
shape: Shape = MaterialTheme.shapes.large,
|
shape: Shape = MaterialTheme.shapes.large,
|
||||||
modifier: Modifier = Modifier,
|
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
|
||||||
state: LazyListState = rememberLazyListState(),
|
|
||||||
contentPadding: PaddingValues = PaddingValues(0.dp),
|
|
||||||
reverseLayout: Boolean = false,
|
|
||||||
horizontalArrangement: Arrangement.Horizontal =
|
|
||||||
if (!reverseLayout) Arrangement.Start else Arrangement.End,
|
|
||||||
verticalAlignment: Alignment.Vertical = Alignment.Top,
|
verticalAlignment: Alignment.Vertical = Alignment.Top,
|
||||||
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
|
scrollState: ScrollState = rememberScrollState(),
|
||||||
userScrollEnabled: Boolean = true,
|
rowModifier: Modifier = Modifier,
|
||||||
content: LazyListScope.() -> Unit
|
content: @Composable RowScope.() -> Unit
|
||||||
) {
|
) {
|
||||||
MoreContentSettingsItem(
|
MoreContentSettingsItem(
|
||||||
leadingIcon = leadingIcon,
|
leadingIcon = leadingIcon,
|
||||||
title = title,
|
title = title,
|
||||||
description = description,
|
description = description,
|
||||||
trailingContent = trailingContent,
|
trailingContent = trailingContent,
|
||||||
shape = shape
|
shape = shape,
|
||||||
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
LazyRow(
|
Row(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier
|
||||||
state = state,
|
.fillMaxWidth()
|
||||||
contentPadding = contentPadding,
|
.horizontalScroll(scrollState)
|
||||||
reverseLayout = reverseLayout,
|
.then(rowModifier),
|
||||||
horizontalArrangement = horizontalArrangement,
|
horizontalArrangement = horizontalArrangement,
|
||||||
verticalAlignment = verticalAlignment,
|
verticalAlignment = verticalAlignment,
|
||||||
flingBehavior = flingBehavior,
|
|
||||||
userScrollEnabled = userScrollEnabled,
|
|
||||||
content = content
|
content = content
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -65,12 +57,12 @@ fun RowSettingsItem(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MoreContentSettingsItem(
|
fun MoreContentSettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
leadingIcon: (@Composable () -> Unit)? = null,
|
leadingIcon: (@Composable () -> Unit)? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
trailingContent: (@Composable () -> Unit)? = null,
|
trailingContent: (@Composable () -> Unit)? = null,
|
||||||
shape: Shape = MaterialTheme.shapes.large,
|
shape: Shape = MaterialTheme.shapes.large,
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
content: @Composable () -> Unit
|
content: @Composable () -> Unit
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
|
|
@ -78,7 +70,10 @@ fun MoreContentSettingsItem(
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.wrapContentHeight()
|
.wrapContentHeight()
|
||||||
.clip(shape)
|
.clip(shape)
|
||||||
.padding(horizontal = 24.dp, vertical = 20.dp)
|
.padding(
|
||||||
|
horizontal = TodoDefaults.settingsItemHorizontalPadding,
|
||||||
|
vertical = TodoDefaults.settingsItemVerticalPadding
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
Row {
|
Row {
|
||||||
leadingIcon?.let {
|
leadingIcon?.let {
|
||||||
|
|
@ -111,6 +106,7 @@ fun MoreContentSettingsItem(
|
||||||
it()
|
it()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
content()
|
content()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ fun RadioItem(
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
Row(
|
Row(
|
||||||
Modifier
|
modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.height(56.dp)
|
.height(56.dp)
|
||||||
.clip(MaterialTheme.shapes.large)
|
.clip(MaterialTheme.shapes.large)
|
||||||
|
|
@ -103,11 +103,11 @@ data class SettingsRadioOptions(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsDialog(
|
fun SettingsDialog(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
title: String,
|
title: String,
|
||||||
text: @Composable (() -> Unit)? = null,
|
text: @Composable (() -> Unit)? = null,
|
||||||
onDismissRequest: () -> Unit = {},
|
onDismissRequest: () -> Unit = {}
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
BasicDialog(
|
BasicDialog(
|
||||||
visible = visible,
|
visible = visible,
|
||||||
|
|
|
||||||
|
|
@ -19,16 +19,17 @@ import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import cn.super12138.todo.ui.TodoDefaults
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsItem(
|
fun SettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
leadingIcon: ImageVector? = null,
|
leadingIcon: ImageVector? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
enableClick: Boolean = true,
|
enableClick: Boolean = true,
|
||||||
onClick: () -> Unit = {},
|
onClick: () -> Unit = {}
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
leadingIcon = leadingIcon,
|
leadingIcon = leadingIcon,
|
||||||
|
|
@ -43,13 +44,13 @@ fun SettingsItem(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsItem(
|
fun SettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
leadingIcon: ImageVector? = null,
|
leadingIcon: ImageVector? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
trailingContent: (@Composable () -> Unit)? = null,
|
trailingContent: (@Composable () -> Unit)? = null,
|
||||||
enableClick: Boolean = true,
|
enableClick: Boolean = true,
|
||||||
onClick: () -> Unit = {},
|
onClick: () -> Unit = {}
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
leadingIcon = {
|
leadingIcon = {
|
||||||
|
|
@ -73,14 +74,14 @@ fun SettingsItem(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsItem(
|
fun SettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
leadingIcon: (@Composable () -> Unit)? = null,
|
leadingIcon: (@Composable () -> Unit)? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
trailingContent: (@Composable () -> Unit)? = null,
|
trailingContent: (@Composable () -> Unit)? = null,
|
||||||
shape: Shape = MaterialTheme.shapes.large,
|
shape: Shape = MaterialTheme.shapes.large,
|
||||||
enableClick: Boolean = true,
|
enableClick: Boolean = true,
|
||||||
onClick: () -> Unit = {},
|
onClick: () -> Unit = {}
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
Row(
|
Row(
|
||||||
|
|
@ -95,7 +96,10 @@ fun SettingsItem(
|
||||||
onClick()
|
onClick()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.padding(horizontal = 24.dp, vertical = 20.dp),
|
.padding(
|
||||||
|
horizontal = TodoDefaults.settingsItemHorizontalPadding,
|
||||||
|
vertical = TodoDefaults.settingsItemVerticalPadding
|
||||||
|
),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
leadingIcon?.let {
|
leadingIcon?.let {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
|
import cn.super12138.todo.ui.TodoDefaults
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsPlainBox(
|
fun SettingsPlainBox(
|
||||||
|
|
@ -26,7 +27,11 @@ fun SettingsPlainBox(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.wrapContentHeight()
|
.wrapContentHeight()
|
||||||
.padding(start = 24.dp, end = 24.dp, bottom = 20.dp),
|
.padding(
|
||||||
|
start = TodoDefaults.settingsItemHorizontalPadding,
|
||||||
|
end = TodoDefaults.settingsItemHorizontalPadding,
|
||||||
|
bottom = TodoDefaults.settingsItemVerticalPadding
|
||||||
|
),
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Info,
|
imageVector = Icons.Outlined.Info,
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,13 @@ import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SwitchSettingsItem(
|
fun SwitchSettingsItem(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
key: String,
|
key: String,
|
||||||
default: Boolean,
|
default: Boolean,
|
||||||
leadingIcon: ImageVector? = null,
|
leadingIcon: ImageVector? = null,
|
||||||
title: String,
|
title: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
onCheckedChange: (Boolean) -> Unit,
|
onCheckedChange: (Boolean) -> Unit
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
var switchState by rememberPrefBooleanState(key, default)
|
var switchState by rememberPrefBooleanState(key, default)
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,9 @@ import androidx.compose.ui.semantics.semantics
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.Constants
|
import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.logic.model.ContrastLevel
|
|
||||||
import cn.super12138.todo.ui.pages.settings.components.MoreContentSettingsItem
|
import cn.super12138.todo.ui.pages.settings.components.MoreContentSettingsItem
|
||||||
import cn.super12138.todo.ui.pages.settings.state.rememberPrefFloatState
|
import cn.super12138.todo.ui.pages.settings.state.rememberPrefFloatState
|
||||||
|
import cn.super12138.todo.ui.theme.ContrastLevel
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,9 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.Constants
|
import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.logic.model.DarkMode
|
|
||||||
import cn.super12138.todo.ui.pages.settings.components.RowSettingsItem
|
import cn.super12138.todo.ui.pages.settings.components.RowSettingsItem
|
||||||
import cn.super12138.todo.ui.pages.settings.state.rememberPrefIntState
|
import cn.super12138.todo.ui.pages.settings.state.rememberPrefIntState
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DarkModePicker(
|
fun DarkModePicker(
|
||||||
|
|
@ -33,48 +33,43 @@ fun DarkModePicker(
|
||||||
RowSettingsItem(
|
RowSettingsItem(
|
||||||
title = stringResource(R.string.pref_dark_mode),
|
title = stringResource(R.string.pref_dark_mode),
|
||||||
description = stringResource(R.string.pref_dark_mode_desc),
|
description = stringResource(R.string.pref_dark_mode_desc),
|
||||||
horizontalArrangement = Arrangement.spacedBy(5.dp)
|
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
||||||
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
item {
|
DarkModeItem(
|
||||||
DarkModeItem(
|
icon = DarkMode.FollowSystem.icon,
|
||||||
icon = DarkMode.FollowSystem.icon,
|
contentDescription = DarkMode.FollowSystem.getDisplayName(context),
|
||||||
contentDescription = DarkMode.FollowSystem.getDisplayName(context),
|
contentColor = if (isInDarkTheme) Color.White else Color.Black,
|
||||||
contentColor = if (isInDarkTheme) Color.White else Color.Black,
|
containerColor = if (isInDarkTheme) Color.Black else Color.White,
|
||||||
containerColor = if (isInDarkTheme) Color.Black else Color.White,
|
selected = DarkMode.fromId(darkModeState) == DarkMode.FollowSystem,
|
||||||
selected = DarkMode.fromId(darkModeState) == DarkMode.FollowSystem,
|
onSelect = {
|
||||||
onSelect = {
|
darkModeState = DarkMode.FollowSystem.id
|
||||||
darkModeState = DarkMode.FollowSystem.id
|
onDarkModeChange(DarkMode.FollowSystem)
|
||||||
onDarkModeChange(DarkMode.FollowSystem)
|
}
|
||||||
}
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
DarkModeItem(
|
||||||
DarkModeItem(
|
icon = DarkMode.Light.icon,
|
||||||
icon = DarkMode.Light.icon,
|
contentDescription = DarkMode.Light.getDisplayName(context),
|
||||||
contentDescription = DarkMode.Light.getDisplayName(context),
|
contentColor = Color.Black,
|
||||||
contentColor = Color.Black,
|
containerColor = Color.White,
|
||||||
containerColor = Color.White,
|
selected = DarkMode.fromId(darkModeState) == DarkMode.Light,
|
||||||
selected = DarkMode.fromId(darkModeState) == DarkMode.Light,
|
onSelect = {
|
||||||
onSelect = {
|
darkModeState = DarkMode.Light.id
|
||||||
darkModeState = DarkMode.Light.id
|
onDarkModeChange(DarkMode.Light)
|
||||||
onDarkModeChange(DarkMode.Light)
|
}
|
||||||
}
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
DarkModeItem(
|
||||||
DarkModeItem(
|
icon = DarkMode.Dark.icon,
|
||||||
icon = DarkMode.Dark.icon,
|
contentDescription = DarkMode.Dark.getDisplayName(context),
|
||||||
contentDescription = DarkMode.Dark.getDisplayName(context),
|
contentColor = Color.White,
|
||||||
contentColor = Color.White,
|
containerColor = Color.Black,
|
||||||
containerColor = Color.Black,
|
selected = DarkMode.fromId(darkModeState) == DarkMode.Dark,
|
||||||
selected = DarkMode.fromId(darkModeState) == DarkMode.Dark,
|
onSelect = {
|
||||||
onSelect = {
|
darkModeState = DarkMode.Dark.id
|
||||||
darkModeState = DarkMode.Dark.id
|
onDarkModeChange(DarkMode.Dark)
|
||||||
onDarkModeChange(DarkMode.Dark)
|
}
|
||||||
}
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -29,7 +29,7 @@ import androidx.compose.ui.semantics.Role
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.util.fastForEach
|
import androidx.compose.ui.util.fastForEach
|
||||||
import cn.super12138.todo.constants.GlobalValues
|
import cn.super12138.todo.constants.GlobalValues
|
||||||
import cn.super12138.todo.logic.model.ContrastLevel
|
import cn.super12138.todo.ui.theme.ContrastLevel
|
||||||
import cn.super12138.todo.ui.theme.PaletteStyle
|
import cn.super12138.todo.ui.theme.PaletteStyle
|
||||||
import cn.super12138.todo.ui.theme.dynamicColorScheme
|
import cn.super12138.todo.ui.theme.dynamicColorScheme
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
@ -45,8 +45,9 @@ fun PaletteItem(
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = modifier
|
||||||
.width(90.dp)
|
.width(90.dp)
|
||||||
.clip(MaterialTheme.shapes.large)
|
.clip(MaterialTheme.shapes.large)
|
||||||
.clickable(
|
.clickable(
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package cn.super12138.todo.ui.pages.settings.components.appearance.palette
|
||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.lazy.items
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
|
@ -12,10 +11,10 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constants.Constants
|
import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.logic.model.ContrastLevel
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode
|
|
||||||
import cn.super12138.todo.ui.pages.settings.components.RowSettingsItem
|
import cn.super12138.todo.ui.pages.settings.components.RowSettingsItem
|
||||||
import cn.super12138.todo.ui.pages.settings.state.rememberPrefIntState
|
import cn.super12138.todo.ui.pages.settings.state.rememberPrefIntState
|
||||||
|
import cn.super12138.todo.ui.theme.ContrastLevel
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode
|
||||||
import cn.super12138.todo.ui.theme.PaletteStyle
|
import cn.super12138.todo.ui.theme.PaletteStyle
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -40,7 +39,7 @@ fun PalettePicker(
|
||||||
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
) {
|
) {
|
||||||
items(items = paletteOptions, key = { it.id }) { paletteStyle ->
|
paletteOptions.forEach { paletteStyle ->
|
||||||
PaletteItem(
|
PaletteItem(
|
||||||
isDark = when (isDarkMode) {
|
isDark = when (isDarkMode) {
|
||||||
DarkMode.FollowSystem -> isSystemInDarkTheme()
|
DarkMode.FollowSystem -> isSystemInDarkTheme()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.logic.model
|
package cn.super12138.todo.ui.theme
|
||||||
|
|
||||||
enum class ContrastLevel(val value: Float) {
|
enum class ContrastLevel(val value: Float) {
|
||||||
VeryLow(-1f),
|
VeryLow(-1f),
|
||||||
|
|
@ -19,8 +19,6 @@ enum class ContrastLevel(val value: Float) {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromFloat(float: Float): ContrastLevel {
|
fun fromFloat(float: Float) = entries.find { it.value == float } ?: Default
|
||||||
return ContrastLevel.entries.find { it.value == float } ?: Default
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.logic.model
|
package cn.super12138.todo.ui.theme
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
|
@ -26,8 +26,6 @@ enum class DarkMode(
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromId(id: Int): DarkMode {
|
fun fromId(id: Int) = entries.find { it.id == id } ?: FollowSystem
|
||||||
return DarkMode.entries.find { it.id == id } ?: FollowSystem
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -30,8 +30,6 @@ enum class PaletteStyle(val id: Int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun fromId(id: Int): PaletteStyle {
|
fun fromId(id: Int) = entries.firstOrNull { it.id == id } ?: TonalSpot
|
||||||
return PaletteStyle.entries.find { it.id == id } ?: TonalSpot
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12,9 +12,9 @@ import cn.super12138.todo.constants.Constants
|
||||||
import cn.super12138.todo.constants.GlobalValues
|
import cn.super12138.todo.constants.GlobalValues
|
||||||
import cn.super12138.todo.logic.Repository
|
import cn.super12138.todo.logic.Repository
|
||||||
import cn.super12138.todo.logic.database.TodoEntity
|
import cn.super12138.todo.logic.database.TodoEntity
|
||||||
import cn.super12138.todo.logic.model.ContrastLevel
|
|
||||||
import cn.super12138.todo.logic.model.DarkMode
|
|
||||||
import cn.super12138.todo.logic.model.SortingMethod
|
import cn.super12138.todo.logic.model.SortingMethod
|
||||||
|
import cn.super12138.todo.ui.theme.ContrastLevel
|
||||||
|
import cn.super12138.todo.ui.theme.DarkMode
|
||||||
import cn.super12138.todo.ui.theme.PaletteStyle
|
import cn.super12138.todo.ui.theme.PaletteStyle
|
||||||
import cn.super12138.todo.utils.FileUtils
|
import cn.super12138.todo.utils.FileUtils
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue