feat: 增加开发者选项

This commit is contained in:
Super12138 2025-08-01 13:16:25 +08:00
parent 4d855879c8
commit 46ae76024c
8 changed files with 156 additions and 4 deletions

View file

@ -37,7 +37,7 @@ android {
applicationId = "cn.super12138.todo"
minSdk = 24
targetSdk = 36
versionCode = 782
versionCode = 783
versionName = "2.3.2"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

View file

@ -15,6 +15,8 @@ import cn.super12138.todo.ui.pages.settings.SettingsAboutLicence
import cn.super12138.todo.ui.pages.settings.SettingsAppearance
import cn.super12138.todo.ui.pages.settings.SettingsData
import cn.super12138.todo.ui.pages.settings.SettingsDataCategory
import cn.super12138.todo.ui.pages.settings.SettingsDeveloperOptions
import cn.super12138.todo.ui.pages.settings.SettingsDeveloperOptionsPadding
import cn.super12138.todo.ui.pages.settings.SettingsInterface
import cn.super12138.todo.ui.pages.settings.SettingsMain
import cn.super12138.todo.ui.theme.materialSharedAxisXIn
@ -112,19 +114,20 @@ fun TodoNavigation(
composable(TodoScreen.SettingsData.name) {
SettingsData(
viewModel = viewModel,
toCategoryManager = {navController.navigate(TodoScreen.SettingsDataCategory.name)},
toCategoryManager = { navController.navigate(TodoScreen.SettingsDataCategory.name) },
onNavigateUp = { navController.navigateUp() }
)
}
composable(TodoScreen.SettingsDataCategory.name) {
SettingsDataCategory(onNavigateUp = {navController.navigateUp()})
SettingsDataCategory(onNavigateUp = { navController.navigateUp() })
}
composable(TodoScreen.SettingsAbout.name) {
SettingsAbout(
//toSpecialPage = { navController.navigate(TodoScreen.SettingsAboutSpecial.name) },
toLicencePage = { navController.navigate(TodoScreen.SettingsAboutLicence.name) },
toDevPage = { navController.navigate(TodoScreen.SettingsDev.name) },
onNavigateUp = { navController.navigateUp() },
)
}
@ -136,6 +139,16 @@ fun TodoNavigation(
composable(TodoScreen.SettingsAboutLicence.name) {
SettingsAboutLicence(onNavigateUp = { navController.navigateUp() })
}
composable(TodoScreen.SettingsDev.name) {
SettingsDeveloperOptions(
toPaddingPage = { navController.navigate(TodoScreen.SettingsDevPadding.name) },
onNavigateUp = { navController.navigateUp() }
)
}
composable(TodoScreen.SettingsDevPadding.name) {
SettingsDeveloperOptionsPadding(onNavigateUp = { navController.navigateUp() })
}
}
}
}

View file

@ -9,6 +9,9 @@ enum class TodoScreen {
SettingsData,
SettingsDataCategory,
SettingsAbout,
//SettingsAboutSpecial,
SettingsAboutLicence
SettingsAboutLicence,
SettingsDev,
SettingsDevPadding
}

View file

@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Balance
import androidx.compose.material.icons.outlined.DeveloperMode
import androidx.compose.material.icons.outlined.Numbers
import androidx.compose.material.icons.outlined.Person4
import androidx.compose.material3.ExperimentalMaterial3Api
@ -35,6 +36,7 @@ import kotlinx.coroutines.delay
fun SettingsAbout(
//toSpecialPage: () -> Unit,
toLicencePage: () -> Unit,
toDevPage: () -> Unit,
onNavigateUp: () -> Unit,
modifier: Modifier = Modifier
) {
@ -110,6 +112,14 @@ fun SettingsAbout(
onClick = toLicencePage
)
}
item {
SettingsItem(
leadingIcon = Icons.Outlined.DeveloperMode,
title = stringResource(R.string.pref_developer_options),
description = stringResource(R.string.pref_developer_options_desc),
onClick = toDevPage
)
}
}
}
}

View file

@ -0,0 +1,46 @@
package cn.super12138.todo.ui.pages.settings
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Padding
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.ui.components.LargeTopAppBarScaffold
import cn.super12138.todo.ui.pages.settings.components.SettingsItem
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SettingsDeveloperOptions(
toPaddingPage: () -> Unit,
onNavigateUp: () -> Unit,
modifier: Modifier = Modifier
) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
LargeTopAppBarScaffold(
title = stringResource(R.string.pref_developer_options),
onBack = onNavigateUp,
scrollBehavior = scrollBehavior,
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
) { innerPadding ->
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(innerPadding)
) {
item {
SettingsItem(
leadingIcon = Icons.Outlined.Padding,
title = stringResource(R.string.pref_padding),
onClick = toPaddingPage
)
}
}
}
}

View file

@ -0,0 +1,74 @@
package cn.super12138.todo.ui.pages.settings
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.captionBar
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.isCaptionBarVisible
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.safeGestures
import androidx.compose.foundation.layout.safeGesturesPadding
import androidx.compose.foundation.text.selection.DisableSelection
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalView
import cn.super12138.todo.utils.VibrationUtils
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable
fun SettingsDeveloperOptionsPadding(
onNavigateUp: () -> Unit,
modifier: Modifier = Modifier
) {
val view = LocalView.current
Box(
modifier
.fillMaxSize()
.background(MaterialTheme.colorScheme.tertiaryContainer)
) {
Box(
Modifier
.safeGesturesPadding()
.fillMaxSize()
.background(MaterialTheme.colorScheme.secondaryContainer)
) {
Box(
Modifier
.safeDrawingPadding()
.fillMaxSize()
.background(MaterialTheme.colorScheme.errorContainer)
) {
SelectionContainer {
Column {
DisableSelection {
Text("Direction: Left Top Right Bottom\n")
}
Text("Gestures Padding: \n${WindowInsets.safeGestures}\n")
Text("Drawing Padding: \n${WindowInsets.safeDrawing}\n")
Text("Caption Bar: ${WindowInsets.isCaptionBarVisible}, ${WindowInsets.captionBar}")
Text("Navigation Bar: ${WindowInsets.navigationBars}")
DisableSelection {
Button(
onClick = {
VibrationUtils.performHapticFeedback(view)
onNavigateUp()
}
) { Text("Back") }
}
}
}
}
}
}
}

View file

@ -112,4 +112,7 @@
<string name="tip_no_category_page">当前暂无自定义分类</string>
<string name="tip_default_category">默认分类,请修改</string>
<string name="label_customization">自定义</string>
<string name="pref_developer_options">开发者选项</string>
<string name="pref_developer_options_desc">一些调试选项,仅供开发使用</string>
<string name="pref_padding">边距</string>
</resources>

View file

@ -113,4 +113,7 @@
<string name="tip_no_category_page">There are no custom categories at the moment.</string>
<string name="tip_default_category">Default Category, please modify</string>
<string name="label_customization">Customization</string>
<string name="pref_developer_options">Developer Options</string>
<string name="pref_developer_options_desc">Some debugging options, only for DEVELOPMENT use</string>
<string name="pref_padding">Padding</string>
</resources>