feat: onboarding - #67
Merged
Merged
Conversation
This reverts commit 862f193.
There was a problem hiding this comment.
Pull request overview
This PR introduces a first-run onboarding flow and adjusts app/navigation and supporting features (TOTP deep-link handling, import flow seeding, and shared UI error modeling) to integrate it cleanly into the existing KeyGo architecture.
Changes:
- Added a new
:feature:onboardingmodule (screens, ViewModel, navigation graph, DI, strings) and wired it into app startup. - Enhanced the backup import wizard to support host-preselected files (for onboarding), improved back/exit handling, and added an “unsupported format” error path.
- Centralized field-level password errors (
UiFieldError) and pending TOTP-import route data (PendingTotpImport) in:core:ui, and updated auth/settings/change-password flows accordingly.
Reviewed changes
Copilot reviewed 64 out of 66 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| settings.gradle.kts | Registers the new :feature:onboarding module. |
| gradle/libs.versions.toml | Adds SplashScreen + Navigation testing dependencies/versions. |
| feature/settings/src/test/kotlin/de/davis/keygo/feature/settings/presentation/changepassword/ChangePasswordViewModelTest.kt | Updates tests to the new UiFieldError-based error model. |
| feature/settings/src/main/res/values/strings.xml | Removes change-password-specific error strings (now centralized). |
| feature/settings/src/main/kotlin/de/davis/keygo/feature/settings/presentation/changepassword/ChangePasswordViewModel.kt | Switches to UiFieldError and nullable errors in state. |
| feature/settings/src/main/kotlin/de/davis/keygo/feature/settings/presentation/changepassword/ChangePasswordState.kt | Replaces local FieldError with shared UiFieldError?. |
| feature/settings/src/main/kotlin/de/davis/keygo/feature/settings/presentation/changepassword/ChangePasswordScreen.kt | Renders errors via UiFieldError.error instead of local string resources. |
| feature/onboarding/src/test/kotlin/de/davis/keygo/feature/onboarding/presentation/model/OnboardingStepTest.kt | Adds unit tests for onboarding step progression/back behavior. |
| feature/onboarding/src/test/kotlin/de/davis/keygo/feature/onboarding/presentation/model/AutofillSetupTest.kt | Adds unit tests for autofill-step action/step-list logic. |
| feature/onboarding/src/main/res/values/strings.xml | Adds onboarding UI copy. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/WelcomeContent.kt | Implements welcome step UI. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/OnboardingViewModel.kt | Adds onboarding orchestration, step skipping, and create-access flow. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/OnboardingScreen.kt | Hosts onboarding UI, biometric/autofill interactions, import wizard handoff. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/OnboardingGraph.kt | Adds onboarding navigation route + graph entry. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/model/OnboardingUiState.kt | Defines onboarding UI state models (including autofill setup state). |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/model/OnboardingStepProgress.kt | Adds progress model for step indicator. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/model/OnboardingStep.kt | Defines step ordering and skip-aware navigation. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/model/AutofillSetup.kt | Implements autofill-setup step list/status logic. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/MainPasswordContent.kt | Implements main-password setup step UI. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/ImportVaultContent.kt | Implements import step UI wrapper for the backup chooser card. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/EnableBiometricsContent.kt | Implements biometrics step UI. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/EnableAutofillContent.kt | Implements autofill setup step UI. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/component/OnboardingScaffold.kt | Adds shared onboarding scaffold + icon container components. |
| feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/di/FeatureOnboardingModule.kt | Adds Koin module for onboarding feature scanning. |
| feature/onboarding/build.gradle.kts | Adds onboarding module Gradle configuration and dependencies. |
| feature/backup/src/testFixtures/kotlin/de/davis/keygo/feature/backup/data/FakeBackupDestinationResolver.kt | Improves fake resolver to track calls and support gating for concurrency tests. |
| feature/backup/src/test/kotlin/de/davis/keygo/feature/backup/presentation/import/model/ImportWizardUiStateTest.kt | Adds tests for back-enabled behavior across phases. |
| feature/backup/src/test/kotlin/de/davis/keygo/feature/backup/presentation/import/model/ImportWizardStepTest.kt | Expands tests for lane/step behavior (host-owned file step). |
| feature/backup/src/test/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportWizardViewModelTest.kt | Adds tests for seeded-file flows and unsupported format handling. |
| feature/backup/src/main/res/values/strings.xml | Adds user-facing unsupported-format import error string. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/model/ImportWizardUiState.kt | Adds fileChosenByHost and derives steps/format/backEnabled via getters. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/model/ImportWizardStep.kt | Adds lane helpers + skip-file-step logic and previousStep(). |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/model/ImportWizardEvent.kt | Adds Exit event for host-owned back/exit flow. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportWizardViewModel.kt | Adds seeding, exit/reset behavior, and unsupported-format error handling. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportWizardScreen.kt | Adds preselected-file seeding and host-owned back handling. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportWizardContent.kt | Adds onFinished hook so hosts can control “Done” behavior. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportPhaseContent.kt | Renders unsupported-format error message. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/import/ImportFilePicker.kt | Extracts and reuses file picker logic with shared MIME type list. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/presentation/component/BackupFileChooser.kt | Exposes chooser card publicly for onboarding import step. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/domain/model/ImportError.kt | Adds UnsupportedFormat error variant. |
| feature/backup/src/main/kotlin/de/davis/keygo/feature/backup/domain/model/FileFormat.kt | Adds fromFileName() helper for extension-based format detection. |
| feature/autofill/src/testFixtures/kotlin/de/davis/keygo/core/feature/autofill/FakeChromeAutofillRepository.kt | Updates fake for new Chrome availability/enabled API. |
| feature/autofill/src/main/kotlin/de/davis/keygo/feature/autofill/domain/repository/ChromeAutofillRepository.kt | Makes Chrome state reads suspendable and adds isAvailable(). |
| feature/autofill/src/main/kotlin/de/davis/keygo/feature/autofill/data/repository/ChromeAutofillRepositoryImpl.kt | Moves provider query to IO + adds availability detection + logging. |
| feature/auth/src/main/res/values/strings.xml | Removes password error strings (now centralized) and adds pending-TOTP subtitle. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/RouteDestination.kt | Refactors pending TOTP import into PendingTotpImport model. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/model/UIPasswordError.kt | Removes local password error type in favor of UiFieldError. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/model/AuthState.kt | Removes CreateAccess flow and adopts UiFieldError? for password errors. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/model/AuthEvent.kt | Removes unused/legacy auth event model. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/AuthViewModel.kt | Removes CreateAccess path, adds pending-TOTP flag, updates error wiring. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/AuthScreen.kt | Passes pending-TOTP flag through to UI. |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/AuthGraph.kt | Removes deep link handling (moved to redirect destination). |
| feature/auth/src/main/kotlin/de/davis/keygo/feature/auth/presentation/AuthContent.kt | Uses UiFieldError rendering and shows pending-TOTP subtitle. |
| core/ui/src/test/kotlin/de/davis/keygo/core/ui/model/PendingTotpImportTest.kt | Adds tests for pending TOTP-import URI construction. |
| core/ui/src/main/res/values/strings.xml | Centralizes password error strings for reuse. |
| core/ui/src/main/kotlin/de/davis/keygo/core/ui/model/UiFieldError.kt | Introduces shared field error model + string mapping. |
| core/ui/src/main/kotlin/de/davis/keygo/core/ui/model/PendingTotpImport.kt | Adds serializable model for passing pending TOTP import through nav. |
| core/ui/build.gradle.kts | Adds Kotlin serialization plugin for PendingTotpImport. |
| app/src/test/kotlin/de/davis/keygo/app/presentation/TotpImportNavGraphTest.kt | Adds Robolectric/nav tests for TOTP deep link redirect routing. |
| app/src/main/kotlin/de/davis/keygo/app/presentation/TotpImportRedirect.kt | Adds deep link redirect destination that routes to Auth/Onboarding. |
| app/src/main/kotlin/de/davis/keygo/app/presentation/MainActivity.kt | Adds SplashScreen + access-check gating + onboarding start destination. |
| app/src/main/kotlin/de/davis/keygo/app/presentation/AppViewModel.kt | Adds startup access/migration detection for choosing start graph. |
| app/src/main/kotlin/de/davis/keygo/app/di/AppModule.kt | Enables component scanning for app-level Koin annotations. |
| app/build.gradle.kts | Adds onboarding module + splashscreen + nav-testing/robolectric deps. |
| .gitignore | Ignores .worktrees/. |
Suppressed comments (1)
feature/onboarding/src/main/kotlin/de/davis/keygo/feature/onboarding/presentation/OnboardingScreen.kt:341
- Typo in helper name:
isOutlinedButonCandidateshould beisOutlinedButtonCandidate(Button).
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.