Migrate BrandDesignUpdatePageViewModel onto LinearOnboardingOrchestrator#8845
Merged
LukasPaczos merged 4 commits intoJun 17, 2026
Merged
Conversation
Contributor
Author
|
bugbot run |
Contributor
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit c5865a4. Configure here.
c5865a4 to
5d1f335
Compare
catalinradoiu
approved these changes
Jun 12, 2026
catalinradoiu
left a comment
Contributor
There was a problem hiding this comment.
Looks good and works as expected! 👍
Base automatically changed from
feature/lpaczos/linear-onboarding-orchestrator
to
develop
June 15, 2026 11:12
3db4691 to
396d5c0
Compare
396d5c0 to
d92688f
Compare
0b3d336 to
aaa4c4f
Compare
Contributor
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit aaa4c4f. Configure here.
…and-design-view-model-orchestrator # Conflicts: # app/src/main/java/com/duckduckgo/app/launch/LaunchViewModel.kt # app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt # app/src/test/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModelTest.kt
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.

Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1215622484916139?focus=true
Tech Design URL (if applicable): https://app.asana.com/1/137249556945/project/481882893211075/task/1214772963645835
Description
Stacked on #8840. This change moves the new-user linear onboarding flow onto that orchestrator, behind a kill switch, with no behaviour change.
It composes the new-user flow as a plan in
NewUserOnboardingPlanProvider(the ordered steps, their preconditions, side effects, and the skip / quick-setup side plans), starts it fromLaunchViewModelviaNewUserOnboardingPlanBootstrapper, and routesBrandDesignUpdatePageViewModelthrough it. The page ViewModel picks one of two flow strategies at construction:OrchestratorFlowtranslates fragment callbacks into orchestrator events and renders the current step.LegacyFlowkeeps the existing in-ViewModel state machine unchanged.The
linearOnboardingOrchestratorfeature flag selects between them (enabled by default). Intra-dialog interactions (quick-setup rows, widgets, notification callbacks) stay in the ViewModel in both modes.Pixels were verified to match across the base, skip, and skip-then-resume, quick-setup, and sync restore scenarios for three builds: the pre-change baseline, flag off, and flag on.
Steps to test this PR
Base flow via orchestrator
Skip->return flow via orchestrator
Skip flow via orchestrator
Restore sync flow via orchestrator
Quick setup flow via orchestrator
Apply below diff:
Apply below diff:
Base flow via VM
Skip->return flow via VM
Skip flow via VM
Restore sync flow via VM
Quick setup flow via VM
Apply below diff:
UI changes
No changes expected.
Note
Medium Risk
First-run onboarding is a critical path with a large dual-path refactor; rollback relies on the remote flag, and orchestrator mode intentionally differs from legacy in at least one default-browser edge case covered by tests.
Overview
New-user onboarding is wired to the shared LinearOnboardingOrchestrator behind remote toggle
linearOnboardingOrchestrator(on by default). When enabled,LaunchViewModelstarts the run viaNewUserOnboardingPlanBootstrapperbefore openingOnboardingActivity; when disabled, behavior stays on the existing in-VM flow.The PR adds
NewUserOnboardingPlanProvider, which defines the full linear plan (intro, notifications, sync restore / reinstall / initial forks, comparison chart, default browser, address bar, input mode + preview, skip and quick-setup side plans), step events, pixels, and completion results (launch search/chat).BrandDesignUpdatePageViewModelpicksOrchestratorFloworLegacyFlowat construction: orchestrator mode maps UI callbacks to events and rendersresolveDialog()output; legacy mode keeps the prior state machine unchanged.OnboardingViewModelandOnboardingActivitydefer terminalAppStage/ skip writes and dev-skip navigation when the orchestrator is driving the run.onboarding-api/onboarding-implare added as app dependencies; lint baselines record temporary*-implimports in tests and orchestrator code.Reviewed by Cursor Bugbot for commit 5ce61f5. Bugbot is set up for automated code reviews on this repo. Configure here.