Skip to content

[Config-driven linear onboarding dialogs] Port existing screens (skip flow + dock/widget steps) - #9404

Open
LukasPaczos wants to merge 9 commits into
refactor/lpaczos/config-driven-linear-onboarding-dialogs/welcome-input-screensfrom
refactor/lpaczos/config-driven-linear-onboarding-dialogs/quick-setup-dock-widget
Open

[Config-driven linear onboarding dialogs] Port existing screens (skip flow + dock/widget steps)#9404
LukasPaczos wants to merge 9 commits into
refactor/lpaczos/config-driven-linear-onboarding-dialogs/welcome-input-screensfrom
refactor/lpaczos/config-driven-linear-onboarding-dialogs/quick-setup-dock-widget

Conversation

@LukasPaczos

@LukasPaczos LukasPaczos commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1217183142109150?focus=true
Tech Design URL (if applicable): https://app.asana.com/1/137249556945/project/481882893211075/task/1216854264994244
API Proposals URL(s) (if applicable):

Description

Step 3 of the tech design: ports the remaining screens to the config-driven onboarding renderer. This PR covers below binders:

  • Add to dock
  • Add widget
  • Quick Setup

Steps to test this PR

  • Apply below patch:
diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/orchestrator/NewUserOnboardingPlanProvider.kt b/app/src/main/java/com/duckduckgo/app/onboarding/orchestrator/NewUserOnboardingPlanProvider.kt
index df50491818..446dd61735 100644
--- a/app/src/main/java/com/duckduckgo/app/onboarding/orchestrator/NewUserOnboardingPlanProvider.kt
+++ b/app/src/main/java/com/duckduckgo/app/onboarding/orchestrator/NewUserOnboardingPlanProvider.kt
@@ -155,10 +155,10 @@ class NewUserOnboardingPlanProvider @Inject constructor(
                 add(initialStep(firstDialog))
                 add(comparisonChartStep())
                 add(defaultBrowserPromptStep())
-                if (showDock) {
+                if (true) {
                     add(addToDockStep())
                 }
-                if (showWidget) {
+                if (true) {
                     add(widgetPromptStep(ctx))
                     add(addWidgetStep(ctx))
                 }
diff --git a/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt b/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt
index b6a1e4d352..41a8d85ad4 100644
--- a/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt
+++ b/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt
@@ -58,6 +58,6 @@ interface OnboardingBrandDesignUpdateToggles {
     /**
      * Selects the config-driven renderer for the brand-design onboarding dialogs.
      */
-    @Toggle.DefaultValue(DefaultFeatureValue.FALSE)
+    @Toggle.DefaultValue(DefaultFeatureValue.TRUE)
     fun configDrivenDialogs(): Toggle
 }

base flow

  • Clean install.
  • Verify add to dock step:
    • Transitions to a card that has no arrow/Dax but doesn't sink to the middle/bottom of the screen, including on tablets.
    • Renders video correctly, also after rotation
  • Verify add widget step:
    • Opens the system dialog on primary click.
    • Skips on secondary click.

skip flow

  • Clean install.
  • Click "I've been here before".
  • Verify quick setup step:
    • Toggle both switches (declining the system prompt reverts the switch),
    • Open the address bar and search options bottom sheets
    • Confirm configuration and verify it's applied.

Note

Medium Risk
User-facing onboarding changes that drive default browser, widgets, and omnibar/search preferences, with substantial new interaction logic; coverage is strong in view model and resolver tests.

Overview
Ports add to dock, widget prompt, and quick setup into the config-driven onboarding renderer instead of auto-skipping or stubbing those steps.

Add to dock and widget prompt get new ContentConfig types, resolver entries, and binders (dock includes looping tutorial video on a TextureView). Quick setup is a stateful screen: toggles for default browser and widget, rows for address bar position and search/AI options, with state held in the view model and synced from the OS on resume.

The view model wires quick-setup interactions to commands (system default-browser prompt vs settings, add-widget prompt vs remove-widget instructions, existing quick-setup bottom sheets) and updates QuickSetupContentState before side effects so declined dialogs can revert switches without StateFlow deduping blocking the binder. Quick-setup default-browser results update install store state but do not advance the plan or fire the standalone default-browser onboarding pixels.

The welcome fragment handles the new commands, a separate activity result for quick-setup default browser, bottom-sheet result listeners, and syncQuickSetupSwitches when default app settings cannot be opened.

Reviewed by Cursor Bugbot for commit b2208b0. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ 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 d6b0a7c. Configure here.

@LukasPaczos
LukasPaczos force-pushed the refactor/lpaczos/config-driven-linear-onboarding-dialogs/quick-setup-dock-widget branch from ce4cc4a to 0fbbd40 Compare August 5, 2026 15:02
A declined system dialog arrives before onResume, so the default browser switch
has to correct itself from that result alone.
Every dialog with a card now resolves a config, so the fallback no longer has to
advance past any of them.
@LukasPaczos
LukasPaczos force-pushed the refactor/lpaczos/config-driven-linear-onboarding-dialogs/quick-setup-dock-widget branch from 0fbbd40 to b2208b0 Compare August 5, 2026 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants