diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d06ff25..3f842b6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -38,7 +38,7 @@ android { applicationId = "cn.super12138.todo" minSdk = 24 targetSdk = 36 - versionCode = 971 + versionCode = 976 versionName = "2.3.3" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/OverviewPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/OverviewPage.kt index 6c39473..414a169 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/OverviewPage.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/OverviewPage.kt @@ -20,6 +20,7 @@ import cn.super12138.todo.ui.components.TopAppBarScaffold import cn.super12138.todo.ui.pages.overview.components.RoundedCornerCardLarge import cn.super12138.todo.ui.pages.overview.components.UpcomingTaskCard import cn.super12138.todo.ui.viewmodels.MainViewModel +import java.util.Calendar @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable @@ -27,10 +28,29 @@ fun OverviewPage( viewModel: MainViewModel, modifier: Modifier = Modifier ) { + val today = Calendar.getInstance().apply { + // 将时间设置为当天的开始(00:00:00.000) + // 兼容API24 + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + val toDos by viewModel.sortedTodos.collectAsState(initial = emptyList()) val totalTasks by remember { derivedStateOf { toDos.size } } val completedTasks by remember { derivedStateOf { toDos.count { it.isCompleted } } } - val nextWeekTodo by remember { derivedStateOf { toDos.filter { it.dueDate != null && it.dueDate < System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000 } } } + val nextWeekTodo by remember { + derivedStateOf { + val now = System.currentTimeMillis() + val weekFromNow = now + 7L * 24 * 60 * 60 * 1000 + toDos.filter { todo -> + val due = todo.dueDate ?: return@filter false + due >= today.timeInMillis && due < weekFromNow + } + } + } + TopAppBarScaffold( title = stringResource(R.string.page_overview), diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/components/UpcomingTaskCard.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/components/UpcomingTaskCard.kt index 3b8e41f..51daa3e 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/components/UpcomingTaskCard.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/overview/components/UpcomingTaskCard.kt @@ -15,7 +15,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import cn.super12138.todo.R import cn.super12138.todo.logic.database.TodoEntity import cn.super12138.todo.ui.TodoDefaults import cn.super12138.todo.ui.pages.settings.components.SettingsItem @@ -23,9 +25,9 @@ import cn.super12138.todo.utils.toLocalDateString @Composable fun UpcomingTaskCard( + modifier: Modifier = Modifier, nextWeekTodo: List, - containerColor: Color = TodoDefaults.ContainerColor, - modifier: Modifier = Modifier + containerColor: Color = TodoDefaults.ContainerColor ) { Card( modifier = modifier.height(300.dp), @@ -40,7 +42,7 @@ fun UpcomingTaskCard( verticalArrangement = Arrangement.spacedBy(16.dp) ) { Text( - text = "临近的任务", + text = stringResource(R.string.title_upcoming_task), style = MaterialTheme.typography.titleMedium ) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index de789b7..ccd827b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -118,4 +118,5 @@ 概览 尽量使用简短的分类名称 清除 + 临近的任务 \ 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 20a3aff..d09da55 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,4 +119,5 @@ Overview Keep category names concise Clear + Upcoming Task \ No newline at end of file