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