Răsfoiți Sursa

Added delete key dialog

Vadik Sirekanyan 2 ani în urmă
părinte
comite
8b8dac7cf8

+ 17 - 4
app/src/main/java/org/sirekanyan/outline/MainActivity.kt

@@ -10,9 +10,11 @@ import androidx.compose.material3.Surface
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.core.view.WindowCompat
+import kotlinx.coroutines.launch
 import org.sirekanyan.outline.api.OutlineApi
 import org.sirekanyan.outline.db.rememberApiUrlDao
 import org.sirekanyan.outline.ui.AddServerContent
+import org.sirekanyan.outline.ui.DeleteKeyContent
 import org.sirekanyan.outline.ui.EditKeyContent
 import org.sirekanyan.outline.ui.theme.OutlineTheme
 
@@ -34,10 +36,21 @@ class MainActivity : ComponentActivity() {
                         BackHandler(state.dialog != null) {
                             state.dialog = null
                         }
-                        Surface {
-                            when (dialog) {
-                                is AddServerDialog -> AddServerContent(dao, state)
-                                is EditKeyDialog -> EditKeyContent(api, state, dialog)
+                        when (dialog) {
+                            is AddServerDialog -> Surface { AddServerContent(dao, state) }
+                            is EditKeyDialog -> Surface { EditKeyContent(api, state, dialog) }
+                            is DeleteKeyDialog -> {
+                                val (apiUrl, key) = dialog
+                                DeleteKeyContent(
+                                    key = key,
+                                    onDismiss = { state.dialog = null },
+                                    onConfirm = {
+                                        state.scope.launch {
+                                            api.deleteAccessKey(apiUrl, key.accessKey.id)
+                                            state.refreshCurrentKeys(showLoading = false)
+                                        }
+                                    }
+                                )
                             }
                         }
                     }

+ 2 - 9
app/src/main/java/org/sirekanyan/outline/MainContent.kt

@@ -114,15 +114,8 @@ fun MainContent(api: OutlineApi, dao: ApiUrlDao, state: MainState) {
                 KeyBottomSheet(
                     key = selectedKey,
                     onDismissRequest = { state.selectedKey = null },
-                    onEditClick = {
-                        state.dialog = EditKeyDialog(selected, selectedKey)
-                    },
-                    onDeleteClick = {
-                        state.scope.launch {
-                            api.deleteAccessKey(selected, selectedKey.accessKey.id)
-                            state.refreshCurrentKeys(showLoading = false)
-                        }
-                    },
+                    onEditClick = { state.dialog = EditKeyDialog(selected, selectedKey) },
+                    onDeleteClick = { state.dialog = DeleteKeyDialog(selected, selectedKey) },
                 )
             }
         }

+ 2 - 0
app/src/main/java/org/sirekanyan/outline/MainState.kt

@@ -107,3 +107,5 @@ sealed class Dialog
 data object AddServerDialog : Dialog()
 
 data class EditKeyDialog(val selected: String, val key: Key) : Dialog()
+
+data class DeleteKeyDialog(val selected: String, val key: Key) : Dialog()

+ 27 - 0
app/src/main/java/org/sirekanyan/outline/ui/DeleteKeyContent.kt

@@ -0,0 +1,27 @@
+package org.sirekanyan.outline.ui
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material3.AlertDialog
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
+import androidx.compose.runtime.Composable
+import org.sirekanyan.outline.api.model.Key
+
+@Composable
+fun DeleteKeyContent(key: Key, onDismiss: () -> Unit, onConfirm: () -> Unit) {
+    AlertDialog(
+        icon = { Icon(Icons.Default.Delete, null) },
+        title = { Text("Confirmation") },
+        text = { Text("Are you sure you want to delete the key named \"${key.accessKey.nameOrDefault}\"?") },
+        onDismissRequest = onDismiss,
+        dismissButton = { TextButton(onDismiss) { Text("Cancel") } },
+        confirmButton = {
+            TextButton(onClick = { onConfirm(); onDismiss() }) {
+                Text("Delete", color = MaterialTheme.colorScheme.error)
+            }
+        },
+    )
+}