From 3855caf3cb5f2d2e03cf3439811caaa2ec463833 Mon Sep 17 00:00:00 2001
From: Super12138 <70494801+Super12138@users.noreply.github.com>
Date: Wed, 15 Jan 2025 21:01:39 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E5=BE=85=E5=8A=9E?=
=?UTF-8?q?=E5=89=8D=E4=BA=8C=E6=AC=A1=E7=A1=AE=E8=AE=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../super12138/todo/ui/pages/main/MainPage.kt | 31 ++++++++----
.../components/TodoDeleteConfirmDialog.kt | 47 +++++++++++++++++++
app/src/main/res/values-zh-rCN/strings.xml | 3 ++
app/src/main/res/values/strings.xml | 3 ++
4 files changed, 76 insertions(+), 8 deletions(-)
create mode 100644 app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoDeleteConfirmDialog.kt
diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt
index 32f6347..3ede27b 100644
--- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt
+++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/MainPage.kt
@@ -27,6 +27,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.window.core.layout.WindowWidthSizeClass
import cn.super12138.todo.logic.database.TodoEntity
+import cn.super12138.todo.ui.pages.main.components.TodoDeleteConfirmDialog
import cn.super12138.todo.ui.pages.main.components.TodoFAB
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
import cn.super12138.todo.ui.viewmodels.MainViewModel
@@ -45,7 +46,8 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
val selectedEditTodoItem = viewModel.selectedEditTodo
val selectedTodoIds = viewModel.selectedTodoIds.collectAsState()
- var openBottomSheet by rememberSaveable { mutableStateOf(false) }
+ var showBottomSheet by rememberSaveable { mutableStateOf(false) }
+ var showDeleteConfirmDialog by rememberSaveable { mutableStateOf(false) }
val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val scope = rememberCoroutineScope()
@@ -73,7 +75,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
selectedMode = !isSelectedIdsEmpty,
onCancelSelect = { viewModel.clearAllTodoSelection() },
onSelectAll = { viewModel.toggleAllSelected() },
- onDeleteSelectedTodo = { viewModel.deleteSelectedTodo() },
+ onDeleteSelectedTodo = { showDeleteConfirmDialog = true },
toSettingsPage = {}
)
},
@@ -85,7 +87,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
) {
TodoFAB(
expanded = isExpanded,
- onClick = { openBottomSheet = true }
+ onClick = { showBottomSheet = true }
)
}
},
@@ -106,7 +108,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
list = filteredTodoList,
onItemClick = { item ->
if (isSelectedIdsEmpty) {
- openBottomSheet = true
+ showBottomSheet = true
viewModel.setEditTodoItem(item)
} else {
viewModel.toggleTodoSelection(item)
@@ -148,7 +150,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
list = filteredTodoList,
onItemClick = { item ->
if (isSelectedIdsEmpty) {
- openBottomSheet = true
+ showBottomSheet = true
viewModel.setEditTodoItem(item)
} else {
viewModel.toggleTodoSelection(item)
@@ -178,11 +180,11 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
}
}
}
- if (openBottomSheet) {
+ if (showBottomSheet) {
TodoBottomSheet(
sheetState = bottomSheetState,
onDismissRequest = {
- openBottomSheet = false
+ showBottomSheet = false
viewModel.setEditTodoItem(null)
},
toDo = selectedEditTodoItem,
@@ -195,7 +197,7 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
.launch { bottomSheetState.hide() }
.invokeOnCompletion {
if (!bottomSheetState.isVisible) {
- openBottomSheet = false
+ showBottomSheet = false
}
}
},
@@ -204,4 +206,17 @@ fun MainPage(viewModel: MainViewModel, modifier: Modifier = Modifier) {
}
)
}
+ if (showDeleteConfirmDialog) {
+ TodoDeleteConfirmDialog(
+ onConfirm = {
+ showDeleteConfirmDialog = false
+ viewModel.apply {
+ deleteSelectedTodo()
+ clearAllTodoSelection()
+ }
+ },
+ onDismiss = { showDeleteConfirmDialog = false },
+ deleteTodoCount = selectedTodoIds.value.size
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoDeleteConfirmDialog.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoDeleteConfirmDialog.kt
new file mode 100644
index 0000000..27c5817
--- /dev/null
+++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/main/components/TodoDeleteConfirmDialog.kt
@@ -0,0 +1,47 @@
+package cn.super12138.todo.ui.pages.main.components
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Delete
+import androidx.compose.material3.AlertDialog
+import androidx.compose.material3.FilledTonalButton
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import cn.super12138.todo.R
+
+@Composable
+fun TodoDeleteConfirmDialog(
+ onConfirm: () -> Unit,
+ onDismiss: () -> Unit,
+ deleteTodoCount: Int,
+ modifier: Modifier = Modifier
+) {
+ AlertDialog(
+ icon = {
+ Icon(
+ imageVector = Icons.Outlined.Delete,
+ contentDescription = stringResource(R.string.action_delete)
+ )
+ },
+ title = {
+ Text(stringResource(R.string.title_warning))
+ },
+ text = {
+ Text(stringResource(R.string.tip_delete_task, deleteTodoCount))
+ },
+ confirmButton = {
+ FilledTonalButton(onClick = onConfirm) {
+ Text(stringResource(R.string.action_confirm))
+ }
+ },
+ dismissButton = {
+ TextButton(onClick = onDismiss) {
+ Text(stringResource(R.string.action_cancel))
+ }
+ },
+ onDismissRequest = onDismiss
+ )
+}
\ 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 af8fb82..791e1fb 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -29,4 +29,7 @@
清除已选择的项目
全选
已选择 %s 项
+ 确定
+ 警告
+ 即将删除你选择的 %s 项待办。删除后将无法恢复这些待办,确定删除?
\ 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 182fe72..ce0e087 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -28,4 +28,7 @@
Clear selected items
Select all
%s selected
+ Confirm
+ Warning
+ You are about to delete the %s selected tasks. Once deleted, these tasks cannot be recovered. Are you sure you want to delete them?
\ No newline at end of file