diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88c3208..fc9ccde 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,10 @@ + + \ No newline at end of file diff --git a/app/src/main/kotlin/plus/rua/project/MainActivity.kt b/app/src/main/kotlin/plus/rua/project/MainActivity.kt index 9a7a2f0..fd0c63a 100644 --- a/app/src/main/kotlin/plus/rua/project/MainActivity.kt +++ b/app/src/main/kotlin/plus/rua/project/MainActivity.kt @@ -22,6 +22,13 @@ class MainActivity : ComponentActivity() { @Suppress("DEPRECATION") overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) } + }, + onNavigateToTools = { + startActivity(Intent(this, ToolsActivity::class.java)) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + @Suppress("DEPRECATION") + overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) + } } ) } diff --git a/app/src/main/kotlin/plus/rua/project/ToolsActivity.kt b/app/src/main/kotlin/plus/rua/project/ToolsActivity.kt new file mode 100644 index 0000000..e7b451d --- /dev/null +++ b/app/src/main/kotlin/plus/rua/project/ToolsActivity.kt @@ -0,0 +1,40 @@ +package plus.rua.project + +import android.os.Build +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import plus.rua.project.ui.ToolsScreen + +class ToolsActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() + super.onCreate(savedInstanceState) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + overrideActivityTransition( + OVERRIDE_TRANSITION_OPEN, + R.anim.slide_in_right, + R.anim.slide_out_left + ) + overrideActivityTransition( + OVERRIDE_TRANSITION_CLOSE, + R.anim.slide_in_left, + R.anim.slide_out_right + ) + } + + setContent { + ToolsScreen( + onBack = { + finish() + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + @Suppress("DEPRECATION") + overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) + } + } + ) + } + } +} diff --git a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt index a117ea9..87db486 100644 --- a/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt +++ b/core/src/main/kotlin/plus/rua/project/ui/CalendarMonthView.kt @@ -94,7 +94,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel @Composable fun CalendarMonthView( modifier: Modifier = Modifier, - onNavigateToAbout: () -> Unit = {} + onNavigateToAbout: () -> Unit = {}, + onNavigateToTools: () -> Unit = {} ) { val viewModel = viewModel() val today = remember { Clock.System.todayIn(TimeZone.currentSystemDefault()) } @@ -401,6 +402,14 @@ fun CalendarMonthView( color = MaterialTheme.colorScheme.outlineVariant, modifier = Modifier.padding(horizontal = 8.dp) ) + MenuItem( + text = "工具", + selected = false, + onClick = { + isMenuExpanded = false + onNavigateToTools() + } + ) MenuItem( text = "关于", selected = false, diff --git a/core/src/main/kotlin/plus/rua/project/ui/ToolsScreen.kt b/core/src/main/kotlin/plus/rua/project/ui/ToolsScreen.kt new file mode 100644 index 0000000..f8e5658 --- /dev/null +++ b/core/src/main/kotlin/plus/rua/project/ui/ToolsScreen.kt @@ -0,0 +1,76 @@ +package plus.rua.project.ui + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.unit.dp + +/** + * 工具页面,提供实用工具功能入口。 + * + * @param onBack 返回回调 + * @param modifier 布局修饰符 + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ToolsScreen( + onBack: () -> Unit, + modifier: Modifier = Modifier +) { + Scaffold( + topBar = { + TopAppBar( + title = { Text("工具") }, + navigationIcon = { + IconButton(onClick = onBack) { + val arrowColor = MaterialTheme.colorScheme.onSurface + Canvas(modifier = Modifier.size(24.dp)) { + val strokeWidth = 2.dp.toPx() + drawLine( + color = arrowColor, + start = Offset(size.width * 0.75f, size.height * 0.15f), + end = Offset(size.width * 0.25f, size.height * 0.5f), + strokeWidth = strokeWidth, + cap = StrokeCap.Round + ) + drawLine( + color = arrowColor, + start = Offset(size.width * 0.25f, size.height * 0.5f), + end = Offset(size.width * 0.75f, size.height * 0.85f), + strokeWidth = strokeWidth, + cap = StrokeCap.Round + ) + } + } + } + ) + }, + modifier = modifier + ) { innerPadding -> + Box( + modifier = Modifier + .fillMaxSize() + .padding(innerPadding), + contentAlignment = Alignment.Center + ) { + Text( + text = "敬请期待", + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } +}