feat: M3 weighted shuffle v1 — real /api/radio with scoring #21

Merged
bvandeusen merged 262 commits from dev into main 2026-04-27 11:00:29 -04:00
Showing only changes of commit 7f6aa9482a - Show all commits
@@ -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"