From b1bcfe7fa379e03778c09f26aae9c9a07f550447 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 26 May 2026 20:46:33 -0400 Subject: [PATCH] fix(android): detekt ReturnCount on PasswordViewModel.change (3/2) Combined the three early-bail checks (isChanging guard, empty-fields validation, mismatch validation) into one when-expression with a single return. Sentinel empty-string distinguishes "silent no-op because already changing" from "user-facing validation error". Co-Authored-By: Claude Opus 4.7 (1M context) --- .../minstrel/settings/ui/PasswordViewModel.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/settings/ui/PasswordViewModel.kt b/android/app/src/main/java/com/fabledsword/minstrel/settings/ui/PasswordViewModel.kt index c980f2ef..af087517 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/settings/ui/PasswordViewModel.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/settings/ui/PasswordViewModel.kt @@ -39,13 +39,16 @@ class PasswordViewModel @Inject constructor( fun change() { val s = internal.value - if (s.isChanging) return - if (s.current.isEmpty() || s.next.isEmpty()) { - internal.update { it.copy(message = "All fields required.") } - return + val validationError: String? = when { + s.isChanging -> "" // sentinel: silent no-op + s.current.isEmpty() || s.next.isEmpty() -> "All fields required." + s.next != s.confirm -> "New passwords do not match." + else -> null } - if (s.next != s.confirm) { - internal.update { it.copy(message = "New passwords do not match.") } + if (validationError != null) { + if (validationError.isNotEmpty()) { + internal.update { it.copy(message = validationError) } + } return } viewModelScope.launch {