feat: 工具页面添加"日期检查器"入口,支持跳转详情页

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
xfy 2026-05-25 10:24:12 +08:00
parent e30540b2dc
commit 93c02810bf
5 changed files with 169 additions and 9 deletions

View File

@ -30,6 +30,10 @@
<activity <activity
android:name=".ToolsActivity" android:name=".ToolsActivity"
android:exported="false" /> android:exported="false" />
<activity
android:name=".DateCheckerActivity"
android:exported="false" />
</application> </application>
</manifest> </manifest>

View File

@ -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.DateCheckerScreen
class DateCheckerActivity : 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 {
DateCheckerScreen(
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)
}
}
)
}
}
}

View File

@ -1,5 +1,6 @@
package plus.rua.project package plus.rua.project
import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
@ -33,6 +34,13 @@ class ToolsActivity : ComponentActivity() {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)
} }
},
onNavigateToDateChecker = {
startActivity(Intent(this, DateCheckerActivity::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)
}
} }
) )
} }

View File

@ -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 DateCheckerScreen(
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
)
}
}
}

View File

@ -1,10 +1,17 @@
package plus.rua.project.ui package plus.rua.project.ui
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -12,7 +19,6 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.StrokeCap
@ -22,12 +28,14 @@ import androidx.compose.ui.unit.dp
* 工具页面提供实用工具功能入口 * 工具页面提供实用工具功能入口
* *
* @param onBack 返回回调 * @param onBack 返回回调
* @param onNavigateToDateChecker 跳转到日期检查器回调
* @param modifier 布局修饰符 * @param modifier 布局修饰符
*/ */
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun ToolsScreen( fun ToolsScreen(
onBack: () -> Unit, onBack: () -> Unit,
onNavigateToDateChecker: () -> Unit,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
Scaffold( Scaffold(
@ -60,17 +68,41 @@ fun ToolsScreen(
}, },
modifier = modifier modifier = modifier
) { innerPadding -> ) { innerPadding ->
Box( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(innerPadding), .padding(innerPadding)
contentAlignment = Alignment.Center .padding(horizontal = 16.dp, vertical = 12.dp)
) { ) {
Text( ToolItem(
text = "敬请期待", title = "日期检查器",
style = MaterialTheme.typography.bodyLarge, onClick = onNavigateToDateChecker
color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }
} }
@Composable
private fun ToolItem(
title: String,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
Card(
shape = RoundedCornerShape(16.dp),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh
),
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp),
modifier = modifier
.fillMaxWidth()
.clickable(onClick = onClick)
) {
Text(
text = title,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(horizontal = 20.dp, vertical = 18.dp)
)
}
}