diff --git a/android/app/src/main/java/com/fabledsword/minstrel/admin/ui/AdminUsersScreen.kt b/android/app/src/main/java/com/fabledsword/minstrel/admin/ui/AdminUsersScreen.kt index c8d77543..d10e63b5 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/admin/ui/AdminUsersScreen.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/admin/ui/AdminUsersScreen.kt @@ -512,18 +512,41 @@ private fun DeleteConfirmDialog( onDismiss: () -> Unit, onConfirm: () -> Unit, ) { + var typed by remember { mutableStateOf("") } + val confirmed = typed.trim().equals(DELETE_CONFIRM_WORD, ignoreCase = true) AlertDialog( onDismissRequest = onDismiss, title = { Text("Delete user?") }, text = { - Text("Delete @${user.username}? This removes the account and all their data.") + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text( + "Delete @${user.username}? This removes the account and all " + + "their data. Type $DELETE_CONFIRM_WORD to confirm.", + ) + OutlinedTextField( + value = typed, + onValueChange = { typed = it }, + label = { Text("Type $DELETE_CONFIRM_WORD") }, + singleLine = true, + modifier = Modifier.fillMaxWidth(), + ) + } }, confirmButton = { - TextButton(onClick = onConfirm) { - Text("Delete", color = MaterialTheme.colorScheme.error) + TextButton(onClick = onConfirm, enabled = confirmed) { + Text( + "Delete", + color = if (confirmed) { + MaterialTheme.colorScheme.error + } else { + MaterialTheme.colorScheme.onSurfaceVariant + }, + ) } }, dismissButton = { TextButton(onClick = onDismiss) { Text("Cancel") } }, ) } +private const val DELETE_CONFIRM_WORD = "DELETE" +