Skip to content

Onboarding Brand Design Update: Add in-context Trackers Blocked dialog#8479

Merged
mikescamell merged 5 commits into
developfrom
feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked
May 14, 2026
Merged

Onboarding Brand Design Update: Add in-context Trackers Blocked dialog#8479
mikescamell merged 5 commits into
developfrom
feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked

Conversation

@mikescamell
Copy link
Copy Markdown
Contributor

@mikescamell mikescamell commented May 7, 2026

Task/Issue URL: https://app.asana.com/1/137249556945/project/1207908166761516/task/1214598065379691?focus=true

Description

Migrates the Trackers Blocked contextual onboarding dialog to the new brand-design layout introduced in #8439, gated behind the onboardingBrandDesignUpdate feature flag.

With the flag on:

  • Trackers Blocked CTA renders in the new card chrome with title and body as distinct blocks.
  • Adds the post-page-load CTA background banner asset and animation pipeline that the Trackers Blocked, Main Network, and No Trackers dialogs all share — slides up from behind the card on appear, slides out on dismiss / content swap.
  • Title and body strings refreshed for the new layout.

Also folds in the Stage 1 foundation review feedback fixes against the brand-design contextual base class introduced in #8439.

Out of scope (still legacy / stub-only with the flag on, queued in follow-up PRs in this stack): main-network, no-trackers, fire-button, end. Their Dax*BrandDesignUpdateContextualCta classes remain as scaffolding.

Steps to test this PR

Designs

Please run all testing steps for in-context dialog changes from the contextual-end branch/PR to ease the testing burden.

To see these changes patch (Linear onboarding flag included just for continuity)

Index: app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt b/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt
--- a/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt	(revision 6fd565c8894daba16281ae9bcf3452d038ae8d6d)
+++ b/app/src/main/java/com/duckduckgo/app/onboardingbranddesignupdate/OnboardingBrandDesignUpdateToggles.kt	(date 1777967047929)
@@ -34,13 +34,13 @@
      * Main toggle for the onboarding brand design update feature.
      * Default value: false (disabled).
      */
-    @Toggle.DefaultValue(DefaultFeatureValue.FALSE)
+    @Toggle.DefaultValue(DefaultFeatureValue.TRUE)
     fun self(): Toggle
 
     /**
      * Toggle for the brand design update variant.
      * Default value: false (disabled).
      */
-    @Toggle.DefaultValue(DefaultFeatureValue.FALSE)
+    @Toggle.DefaultValue(DefaultFeatureValue.TRUE)
     fun brandDesignUpdate(): Toggle
 }
Index: app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt
--- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt	(revision 6fd565c8894daba16281ae9bcf3452d038ae8d6d)
+++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt	(date 1777657893440)
@@ -45,7 +45,7 @@
     val viewState = _viewState.asStateFlow()
 
     fun initializePages() {
-        pageLayoutManager.buildPageBlueprints()
+        pageLayoutManager.buildBrandDesignUpdatePageBlueprints()
     }
 
     fun pageCount(): Int {
@@ -69,8 +69,8 @@
         }
     }
 
-    fun initializeOnboardingSkipper() {
-        if (!appBuildConfig.canSkipOnboarding) return
+    fun initializeOnboardingSkipper() { 
+        return
 
         // delay showing skip button until privacy config downloaded
         viewModelScope.launch {

UI changes

Screenshots


Note

Medium Risk
Changes onboarding CTA selection/rendering for the Trackers Blocked dialog behind the brand-design flag and adds new UI wiring that could affect CTA sequencing and privacy-shield highlighting/pixels.

Overview
When the onboarding brand-design update flag is enabled, the Trackers Blocked in-context DAX dialog now uses DaxTrackersBlockedBrandDesignUpdateContextualCta instead of the legacy DaxTrackersBlockedCta.

The new CTA is no longer a stub: it selects the brand-design content include, sets the trackers-blocked background, populates the description from the legacy trackers text, wires the primary button click handler, and triggers the typing-animation-settled callback (to keep the existing privacy-shield highlight/dismiss behavior aligned). A new unit test verifies the flag-gated CTA selection and that shown/OK/close pixels and dismissal persistence behave as expected.

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

@mikescamell mikescamell changed the base branch from feature/mike/onboarding-brand-design-updates/contextual-serp to graphite-base/8479 May 7, 2026 17:13
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from abdc187 to d5674d7 Compare May 7, 2026 17:13
@mikescamell mikescamell changed the base branch from graphite-base/8479 to feature/mike/onboarding-brand-design-updates/contextual-site-suggestions May 7, 2026 17:13
@mikescamell mikescamell changed the base branch from feature/mike/onboarding-brand-design-updates/contextual-site-suggestions to graphite-base/8479 May 7, 2026 17:38
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from d5674d7 to b9a5cda Compare May 7, 2026 17:39
@mikescamell mikescamell force-pushed the graphite-base/8479 branch from 9207123 to 7335178 Compare May 7, 2026 17:39
@mikescamell mikescamell changed the base branch from graphite-base/8479 to feature/mike/onboarding-brand-design-updates/contextual-site-suggestions May 7, 2026 17:39
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from b9a5cda to 7d9b64a Compare May 8, 2026 16:14
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from 7335178 to 1451253 Compare May 8, 2026 16:14
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 7d9b64a to c23d1ca Compare May 11, 2026 11:42
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from 1451253 to 3698120 Compare May 11, 2026 11:42
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from c23d1ca to 6d41103 Compare May 11, 2026 12:06
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from 3698120 to 7263236 Compare May 11, 2026 12:06
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 6d41103 to 6909efc Compare May 12, 2026 16:44
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch 2 times, most recently from 364e7bc to fd1d514 Compare May 12, 2026 17:14
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 6909efc to 7079813 Compare May 12, 2026 17:14
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from fd1d514 to c0ff122 Compare May 12, 2026 17:38
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 7079813 to 3d6239a Compare May 12, 2026 17:38
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from c0ff122 to ea30049 Compare May 13, 2026 07:20
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 3d6239a to 8a4cb8c Compare May 13, 2026 07:20
@mikescamell mikescamell marked this pull request as ready for review May 13, 2026 13:22
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from ea30049 to 67d0384 Compare May 13, 2026 13:39
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 8a4cb8c to 0717262 Compare May 13, 2026 13:39
Comment on lines +66 to +68
override fun onTypingAnimationSettled(onTypingAnimationFinished: () -> Unit) {
onTypingAnimationFinished()
}
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.

The onTypingAnimationSettled contract seems entirely misplaced. I understand it re-uses the mechanism that was established before, but it's a function override with a set of criteria applicable to only one view. On top of that, at this call site it has nothing to do with the typing animation - it's actually controlled entirely in the parent class.

Could you create a follow-up task to give this a pass separately and see how it could be cleaned up after we ship?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from 0717262 to d1078f6 Compare May 14, 2026 11:12
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-site-suggestions branch from 67d0384 to b7e3dc9 Compare May 14, 2026 11:12
Base automatically changed from feature/mike/onboarding-brand-design-updates/contextual-site-suggestions to develop May 14, 2026 12:02
- base class onTypingAnimationSettled defaults to no-op so only
  DaxTrackersBlocked triggers the privacy-shield highlight, matching
  legacy single-CTA gating (C1)
- TrackersBlocked stub docstring reflects the no-op default (C2)
- hideOnboardingCta cancels the typing animation defensively (I3)
- base-class tests cover the empty-title branch and assert
  titleView.alpha on mid-animation tap-to-skip (I2)
- renamed rapidDoubleTap test to respectsAlreadySettledFlag (M1)
- Skill 2 preconditions table uses actual sentinel hint names (I1)
…xtual dialog

Populate the Stage-1 stub with the dynamic trackers description helper and
the onTypingAnimationSettled override, replace sentinels across
CtaViewModel and BrowserTabViewModel, and add the per-dialog unit test.
8 WebP variants (4 densities × light/dark) at 90% quality. Used by the
TrackersBlocked CTA and shared by MainNetwork and NoTrackers when their
banners land in subsequent stack branches.
@mikescamell mikescamell force-pushed the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch from d1078f6 to c93d5b5 Compare May 14, 2026 12:08
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

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.

There are 2 total unresolved issues (including 1 from previous review).

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 c93d5b5. Configure here.

@mikescamell mikescamell merged commit 54cf2d7 into develop May 14, 2026
20 checks passed
@mikescamell mikescamell deleted the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch May 14, 2026 12:45
@mikescamell mikescamell restored the feature/mike/onboarding-brand-design-updates/contextual-trackers-blocked branch May 14, 2026 16:07
mikescamell added a commit that referenced this pull request May 14, 2026
…g v2 (#8565)

Task/Issue URL:
https://app.asana.com/1/137249556945/project/1207908166761516/task/1214598065379691?focus=true

This was accidentally removed from develop.

See #8479 for description.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes onboarding CTA selection/rendering for the trackers-blocked
flow and its interaction timing, which could affect when dialogs show
and how the privacy shield highlight is triggered. Risk is mitigated by
added unit tests around toggle behavior and pixel/dismissal side
effects.
> 
> **Overview**
> Routes the *trackers blocked* onboarding CTA to a new
`DaxTrackersBlockedBrandDesignUpdateContextualCta` when the brand-design
update is enabled, while keeping the legacy
`OnboardingDaxDialogCta.DaxTrackersBlockedCta` path as fallback.
> 
> Fills in the previously-stubbed brand-design CTA to render the
trackers-blocked description, apply a dedicated background, wire the
primary button click, and trigger the post-typing callback used to
mirror the legacy privacy-shield highlight behavior.
> 
> Adds a focused test suite covering toggle-based CTA selection plus
pixel firing and dismissal persistence for the new CTA.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
a1c4212. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
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