From 46ae76024caebbfda062e91edf646031e88243e7 Mon Sep 17 00:00:00 2001 From: Super12138 <70494801+Super12138@users.noreply.github.com> Date: Fri, 1 Aug 2025 13:16:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E8=80=85=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../todo/ui/navigation/TodoNavigation.kt | 17 ++++- .../todo/ui/navigation/TodoScreen.kt | 5 +- .../todo/ui/pages/settings/SettingsAbout.kt | 10 +++ .../settings/SettingsDeveloperOptions.kt | 46 ++++++++++++ .../SettingsDeveloperOptionsPadding.kt | 74 +++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 8 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptions.kt create mode 100644 app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptionsPadding.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0709ca3..3ba5533 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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" 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 69c7025..7a8d72a 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 @@ -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() }) + } } } } \ No newline at end of file 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 16f7d7e..0ebb9cf 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 @@ -9,6 +9,9 @@ enum class TodoScreen { SettingsData, SettingsDataCategory, SettingsAbout, + //SettingsAboutSpecial, - SettingsAboutLicence + SettingsAboutLicence, + SettingsDev, + SettingsDevPadding } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt index 443321b..5b36327 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAbout.kt @@ -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 + ) + } } } } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptions.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptions.kt new file mode 100644 index 0000000..490fd75 --- /dev/null +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptions.kt @@ -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 + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptionsPadding.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptionsPadding.kt new file mode 100644 index 0000000..72ec748 --- /dev/null +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsDeveloperOptionsPadding.kt @@ -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") } + } + } + } + } + + } + } +} \ 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 3fa491f..862ecdf 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -112,4 +112,7 @@ 当前暂无自定义分类 默认分类,请修改 自定义 + 开发者选项 + 一些调试选项,仅供开发使用 + 边距 \ 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 1806a66..0c3f4bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,4 +113,7 @@ There are no custom categories at the moment. Default Category, please modify Customization + Developer Options + Some debugging options, only for DEVELOPMENT use + Padding \ No newline at end of file