From 40961c70a86380d37fffb7f0b6472bc6d8ce7cdd Mon Sep 17 00:00:00 2001
From: Super12138 <70494801+Super12138@users.noreply.github.com>
Date: Thu, 6 Feb 2025 09:33:47 +0800
Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E5=9C=A8=E7=BC=96=E8=BE=91?=
=?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=94=A8=E6=88=B7=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E5=BE=85=E5=8A=9E=E5=90=8E=E9=98=BB=E6=AD=A2=E8=BF=94=E5=9B=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../super12138/todo/ui/components/Dialog.kt | 73 +++++++++++++++++++
.../todo/ui/pages/editor/TodoEditorPage.kt | 51 ++++++++++++-
app/src/main/res/values-zh-rCN/strings.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
4 files changed, 123 insertions(+), 3 deletions(-)
create mode 100644 app/src/main/kotlin/cn/super12138/todo/ui/components/Dialog.kt
diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialog.kt b/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialog.kt
new file mode 100644
index 0000000..ca972f8
--- /dev/null
+++ b/app/src/main/kotlin/cn/super12138/todo/ui/components/Dialog.kt
@@ -0,0 +1,73 @@
+package cn.super12138.todo.ui.components
+
+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.graphics.vector.ImageVector
+
+@Composable
+fun BasicDialog(
+ visible: Boolean,
+ icon: ImageVector,
+ title: String,
+ text: @Composable (() -> Unit)? = null,
+ confirmButton: String,
+ dismissButton: String,
+ onConfirm: () -> Unit,
+ onDismiss: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ BasicDialog(
+ visible = visible,
+ icon = {
+ Icon(
+ imageVector = icon,
+ contentDescription = null // 会跟下面的文本重复,所以设置为 null
+ )
+ },
+ title = {
+ Text(title)
+ },
+ text = text,
+ confirmButton = {
+ FilledTonalButton(onClick = onConfirm) {
+ Text(confirmButton)
+ }
+ },
+ dismissButton = {
+ TextButton(onClick = onDismiss) {
+ Text(dismissButton)
+ }
+ },
+ onDismissRequest = onDismiss,
+ modifier = modifier
+ )
+}
+
+@Composable
+fun BasicDialog(
+ visible: Boolean,
+ icon: @Composable (() -> Unit)? = null,
+ title: @Composable () -> Unit,
+ text: @Composable (() -> Unit)? = null,
+ confirmButton: (@Composable () -> Unit),
+ dismissButton: (@Composable () -> Unit)? = null,
+ onDismissRequest: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ if (visible) {
+ AlertDialog(
+ icon = icon,
+ title = title,
+ text = text,
+ confirmButton = confirmButton,
+ dismissButton = dismissButton,
+ onDismissRequest = onDismissRequest,
+ modifier = modifier
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt
index ce6a413..b3ddae3 100644
--- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt
+++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/editor/TodoEditorPage.kt
@@ -20,6 +20,7 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete
+import androidx.compose.material.icons.outlined.ErrorOutline
import androidx.compose.material.icons.outlined.Save
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -52,6 +53,7 @@ import cn.super12138.todo.logic.model.Priority
import cn.super12138.todo.logic.model.Subjects
import cn.super12138.todo.ui.TodoDefaults
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
+import cn.super12138.todo.ui.components.BasicDialog
import cn.super12138.todo.ui.components.FilterChipGroup
import cn.super12138.todo.ui.components.LargeTopAppBarScaffold
@@ -66,8 +68,35 @@ fun TodoEditorPage(
animatedVisibilityScope: AnimatedVisibilityScope,
modifier: Modifier = Modifier
) {
- BackHandler { // TODO: 实现用户更改后的阻止返回
- onNavigateUp()
+ var showConfirmDialog by rememberSaveable { mutableStateOf(false) }
+
+ fun checkModifiedBeforeBack() {
+ if (toDo !== null) {
+ val newTodo = TodoEntity(
+ content = toDo.content,
+ subject = toDo.subject,
+ isCompleted = toDo.isCompleted,
+ priority = toDo.priority,
+ id = toDo.id
+ )
+ /*val newTodo = TodoEntity( // TODO: 只要用户有修改就阻止返回(当前是在编辑状态下检测)
+ content = toDo?.content ?: "",
+ subject = toDo?.subject ?: 0,
+ isCompleted = toDo?.isCompleted ?: false,
+ priority = toDo?.priority ?: 0f,
+ id = toDo?.id ?: 0
+ )*/
+ if (newTodo !== toDo) {
+ showConfirmDialog = true
+ } else {
+ onNavigateUp()
+ }
+ } else {
+ onNavigateUp()
+ }
+ }
+ BackHandler {
+ checkModifiedBeforeBack()
}
val context = LocalContext.current
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
@@ -131,7 +160,9 @@ fun TodoEditorPage(
}
}
},
- onBack = onNavigateUp,
+ onBack = {
+ checkModifiedBeforeBack()
+ },
modifier = modifier
) { innerPadding ->
Column(
@@ -225,4 +256,18 @@ fun TodoEditorPage(
Spacer(Modifier.size(40.dp))
}
}
+
+ BasicDialog(
+ visible = showConfirmDialog,
+ icon = Icons.Outlined.ErrorOutline,
+ title = stringResource(R.string.title_warning),
+ text = { Text(stringResource(R.string.tip_discard_changes)) },
+ confirmButton = stringResource(R.string.action_confirm),
+ dismissButton = stringResource(R.string.action_cancel),
+ onConfirm = {
+ showConfirmDialog = false
+ onNavigateUp()
+ },
+ onDismiss = { showConfirmDialog = false }
+ )
}
\ 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 e27e58e..d42ec87 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -81,4 +81,5 @@
待办列表
在 GitHub 上查看
查看源代码、提交错误报告和改进建议
+ 退出编辑后将无法找回你修改过的数据。确定退出编辑吗?
\ 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 3b8f158..afdf172 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -82,4 +82,5 @@
To-Do List
View On GitHub
View source code, submit bug reports, and improvement suggestions
+ After exiting edit mode, you will not be able to retrieve the data you have modified. Are you sure you want to exit editing?
\ No newline at end of file