From bf87d9ca64897918525c2953bacc277a06e9fd9c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 07:38:20 +0000 Subject: [PATCH 1/3] Refactor: Move name validation to OnboardingViewModel Moved the user name validation logic from OnboardingScreen (Composable) to OnboardingViewModel. Changed validation from isNotEmpty() to isNotBlank() to prevent saving whitespace-only names. This improves separation of concerns and testability. --- .../main/java/com/example/theloop/OnboardingViewModel.kt | 6 ++++-- .../java/com/example/theloop/ui/screens/OnboardingScreen.kt | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt index cc63d54..d687b97 100644 --- a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt +++ b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt @@ -23,8 +23,10 @@ class OnboardingViewModel @Inject constructor( } fun saveName() { - viewModelScope.launch { - userPreferencesRepository.saveUserName(name.value) + if (name.value.isNotBlank()) { + viewModelScope.launch { + userPreferencesRepository.saveUserName(name.value) + } } } diff --git a/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt b/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt index 7103a82..04e93df 100644 --- a/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt +++ b/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt @@ -98,9 +98,7 @@ fun OnboardingScreen( Button(onClick = { if (currentStep == 0) { // Save Name - if (name.isNotEmpty()) { - viewModel.saveName() - } + viewModel.saveName() } if (currentStep < totalSteps - 1) { From 214e4873213a52e951287d358e6578caa9d50e83 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 23:48:56 +0000 Subject: [PATCH 2/3] Refactor: Fix silent failure in name validation Updated `OnboardingViewModel.saveName` to return a `Boolean` indicating success. Updated `OnboardingScreen` to check this return value and show a Toast message if validation fails, preventing navigation to the next step. This addresses the feedback that the previous refactoring allowed users to proceed with a blank name. --- app/src/main/java/com/example/theloop/OnboardingViewModel.kt | 4 +++- .../java/com/example/theloop/ui/screens/OnboardingScreen.kt | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt index d687b97..d65d563 100644 --- a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt +++ b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt @@ -22,12 +22,14 @@ class OnboardingViewModel @Inject constructor( _name.value = newName } - fun saveName() { + fun saveName(): Boolean { if (name.value.isNotBlank()) { viewModelScope.launch { userPreferencesRepository.saveUserName(name.value) } + return true } + return false } fun completeOnboarding() { diff --git a/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt b/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt index 04e93df..37457cb 100644 --- a/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt +++ b/app/src/main/java/com/example/theloop/ui/screens/OnboardingScreen.kt @@ -98,7 +98,10 @@ fun OnboardingScreen( Button(onClick = { if (currentStep == 0) { // Save Name - viewModel.saveName() + if (!viewModel.saveName()) { + Toast.makeText(context, "Name cannot be blank", Toast.LENGTH_SHORT).show() + return@Button + } } if (currentStep < totalSteps - 1) { From c7e93ac51e26f5dc536038840acca85965649575 Mon Sep 17 00:00:00 2001 From: Harry Barnes <145344818+harrydbarnes@users.noreply.github.com> Date: Mon, 26 Jan 2026 04:37:01 +0000 Subject: [PATCH 3/3] Update app/src/main/java/com/example/theloop/OnboardingViewModel.kt Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../main/java/com/example/theloop/OnboardingViewModel.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt index d65d563..165bae3 100644 --- a/app/src/main/java/com/example/theloop/OnboardingViewModel.kt +++ b/app/src/main/java/com/example/theloop/OnboardingViewModel.kt @@ -23,13 +23,13 @@ class OnboardingViewModel @Inject constructor( } fun saveName(): Boolean { - if (name.value.isNotBlank()) { + val isNameValid = name.value.isNotBlank() + if (isNameValid) { viewModelScope.launch { userPreferencesRepository.saveUserName(name.value) } - return true } - return false + return isNameValid } fun completeOnboarding() {