refactor: 重构代码
This commit is contained in:
parent
63665c64a3
commit
28763176cf
5 changed files with 113 additions and 65 deletions
|
|
@ -34,7 +34,7 @@ android {
|
|||
applicationId = "cn.super12138.todo"
|
||||
minSdk = 24
|
||||
targetSdk = 36
|
||||
versionCode = 719
|
||||
versionCode = 726
|
||||
versionName = "2.1.2"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
|
|
|||
|
|
@ -102,17 +102,11 @@ fun TodoNavigation(
|
|||
}
|
||||
|
||||
composable(TodoScreen.SettingsAppearance.name) {
|
||||
SettingsAppearance(
|
||||
viewModel = viewModel,
|
||||
onNavigateUp = { navController.navigateUp() }
|
||||
)
|
||||
SettingsAppearance(onNavigateUp = { navController.navigateUp() })
|
||||
}
|
||||
|
||||
composable(TodoScreen.SettingsInterface.name) {
|
||||
SettingsInterface(
|
||||
viewModel = viewModel,
|
||||
onNavigateUp = { navController.navigateUp() }
|
||||
)
|
||||
SettingsInterface(onNavigateUp = { navController.navigateUp() })
|
||||
}
|
||||
|
||||
composable(TodoScreen.SettingsData.name) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
package cn.super12138.todo.ui.pages.editor
|
||||
|
||||
import android.view.HapticFeedbackConstants
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.AnimatedVisibilityScope
|
||||
import androidx.compose.animation.ExperimentalSharedTransitionApi
|
||||
import androidx.compose.animation.SharedTransitionScope
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
|
|
@ -16,8 +14,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.sizeIn
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
|
|
@ -25,11 +21,7 @@ import androidx.compose.material.icons.automirrored.outlined.Undo
|
|||
import androidx.compose.material.icons.outlined.Delete
|
||||
import androidx.compose.material.icons.outlined.Save
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Label
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.PlainTooltip
|
||||
import androidx.compose.material3.Slider
|
||||
import androidx.compose.material3.SliderDefaults
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
|
|
@ -48,16 +40,10 @@ 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
|
||||
import cn.super12138.todo.logic.database.TodoEntity
|
||||
import cn.super12138.todo.logic.model.Priority
|
||||
import cn.super12138.todo.logic.model.Subjects
|
||||
import cn.super12138.todo.ui.TodoDefaults
|
||||
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
|
||||
|
|
@ -65,6 +51,8 @@ import cn.super12138.todo.ui.components.ChipItem
|
|||
import cn.super12138.todo.ui.components.ConfirmDialog
|
||||
import cn.super12138.todo.ui.components.FilterChipGroup
|
||||
import cn.super12138.todo.ui.components.LargeTopAppBarScaffold
|
||||
import cn.super12138.todo.ui.pages.editor.components.TodoContentTextField
|
||||
import cn.super12138.todo.ui.pages.editor.components.TodoPrioritySlider
|
||||
import cn.super12138.todo.utils.VibrationUtils
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class)
|
||||
|
|
@ -175,16 +163,10 @@ fun TodoEditorPage(
|
|||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
with(sharedTransitionScope) {
|
||||
TextField(
|
||||
TodoContentTextField(
|
||||
value = toDoContent,
|
||||
onValueChange = { toDoContent = it },
|
||||
label = { Text(stringResource(R.string.placeholder_add_todo)) },
|
||||
isError = isErrorContent,
|
||||
supportingText = {
|
||||
AnimatedVisibility(isErrorContent) {
|
||||
Text(stringResource(R.string.error_no_content_entered))
|
||||
}
|
||||
},
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.sharedBounds(
|
||||
|
|
@ -251,42 +233,9 @@ fun TodoEditorPage(
|
|||
|
||||
Spacer(Modifier.size(5.dp))
|
||||
|
||||
val priorityName =
|
||||
Priority.entries.map { it.getDisplayName(context) } // 要不要用 remember 呢
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
Slider(
|
||||
modifier = Modifier.semantics {
|
||||
contentDescription =
|
||||
context.getString(R.string.label_priority) + priorityName[Priority.fromFloat(
|
||||
priorityState
|
||||
).ordinal]
|
||||
stateDescription = priorityName[Priority.fromFloat(priorityState).ordinal]
|
||||
liveRegion = LiveRegionMode.Polite
|
||||
},
|
||||
TodoPrioritySlider(
|
||||
value = priorityState,
|
||||
onValueChange = {
|
||||
VibrationUtils.performHapticFeedback(view, HapticFeedbackConstants.LONG_PRESS)
|
||||
priorityState = it
|
||||
},
|
||||
valueRange = -2f..2f,
|
||||
steps = 3,
|
||||
interactionSource = interactionSource,
|
||||
thumb = {
|
||||
Label(
|
||||
label = {
|
||||
PlainTooltip(
|
||||
modifier = Modifier
|
||||
.sizeIn(45.dp, 25.dp)
|
||||
.wrapContentWidth()
|
||||
) {
|
||||
Text(priorityName[Priority.fromFloat(priorityState).ordinal])
|
||||
}
|
||||
},
|
||||
interactionSource = interactionSource
|
||||
) {
|
||||
SliderDefaults.Thumb(interactionSource)
|
||||
}
|
||||
}
|
||||
onValueChange = { priorityState = it },
|
||||
)
|
||||
|
||||
Spacer(Modifier.size(10.dp))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package cn.super12138.todo.ui.pages.editor.components
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import cn.super12138.todo.R
|
||||
|
||||
@Composable
|
||||
fun TodoContentTextField(
|
||||
value: String,
|
||||
onValueChange: (String) -> Unit,
|
||||
isError: Boolean,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
TextField(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
label = { Text(stringResource(R.string.placeholder_add_todo)) },
|
||||
isError = isError,
|
||||
supportingText = {
|
||||
AnimatedVisibility(isError) {
|
||||
Text(stringResource(R.string.error_no_content_entered))
|
||||
}
|
||||
},
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package cn.super12138.todo.ui.pages.editor.components
|
||||
|
||||
import android.view.HapticFeedbackConstants
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.sizeIn
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Label
|
||||
import androidx.compose.material3.PlainTooltip
|
||||
import androidx.compose.material3.Slider
|
||||
import androidx.compose.material3.SliderDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
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.logic.model.Priority
|
||||
import cn.super12138.todo.utils.VibrationUtils
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TodoPrioritySlider(
|
||||
value: Float,
|
||||
onValueChange: (Float) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
val view = LocalView.current
|
||||
val context = LocalContext.current
|
||||
|
||||
val priorityName = remember { Priority.entries.map { it.getDisplayName(context) } }
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
|
||||
Slider(
|
||||
value = value,
|
||||
onValueChange = {
|
||||
VibrationUtils.performHapticFeedback(view, HapticFeedbackConstants.LONG_PRESS)
|
||||
onValueChange(it)
|
||||
},
|
||||
valueRange = -2f..2f,
|
||||
steps = 3,
|
||||
interactionSource = interactionSource,
|
||||
thumb = {
|
||||
Label(
|
||||
label = {
|
||||
PlainTooltip(
|
||||
modifier = Modifier
|
||||
.sizeIn(45.dp, 25.dp)
|
||||
.wrapContentWidth()
|
||||
) {
|
||||
Text(priorityName[Priority.fromFloat(value).ordinal])
|
||||
}
|
||||
},
|
||||
interactionSource = interactionSource
|
||||
) {
|
||||
SliderDefaults.Thumb(interactionSource)
|
||||
}
|
||||
},
|
||||
modifier = modifier.semantics {
|
||||
contentDescription =
|
||||
context.getString(R.string.label_priority) + priorityName[Priority.fromFloat(
|
||||
value
|
||||
).ordinal]
|
||||
stateDescription = priorityName[Priority.fromFloat(value).ordinal]
|
||||
liveRegion = LiveRegionMode.Polite
|
||||
}
|
||||
)
|
||||
}
|
||||
Loading…
Reference in a new issue