Skip to content

Commit ea7f906

Browse files
authored
Onboarding Design Experiment Setup (#6525)
### Description This PR refactors the onboarding design experiment implementation by introducing a new `OnboardingDesignExperimentManager` that centralizes experiment-related logic. The manager handles enrollment, cohort determination, and firing experiment-specific pixels for tracking user interactions throughout the onboarding flow. Key changes include: - Added a data store to track site and SERP visit counts - Implemented comprehensive pixel tracking for onboarding interactions - Replaced direct toggle checks with manager methods for better abstraction - Added support for tracking user interactions with onboarding dialogs and options ### Steps to test this PR _Onboarding Experience_ - [ ] Verify new users see the appropriate onboarding experience based on experiment cohort - [ ] Confirm that navigating through onboarding flows works correctly - [ ] Test that site suggestions and search options function properly - [ ] Verify fire animations display correctly based on experiment cohort _Pixels_ Use Logcat to check for Pixels firing. When there are multiple options you'll need to clear data and get back to the same position. #### **Variant – Modified Control** Filter logs using: `experiment_metrics_onboardingDesignExperimentAug25_modifiedControl` * [x] Intro screen shown → `introScreenDisplayed` * [x] Comparison screen shown → `comparisonScreenDisplayed` * [x] Tap **“Choose Browser”** → `chooseBrowser` * [x] Accept system **Set as default** dialog → `setDefaultRate` * [x] Address-bar-position sheet displayed → `setAddressBarDisplayed` * [x] Select **Top** → `addressBarSetTop` * [x] Select **Bottom** → `addressBarSetBottom` * [x] “Try a search” bubble appears → `tryASearchDisplayed` * [x] Tap first suggestion → `firstSearchSuggestion` * [x] Tap second suggestion → `secondSearchSuggestion` * [x] Tap third suggestion → `thirdSearchSuggestion` * [x] Enter any other query → `searchOrNavCustom` * [x] SERP message dialog appears → `messageOnSerpDisplayed` * [x] Site-suggestion bubble (adjacent) appears → `visitSitePromptDisplayedAdjacent` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] (Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears → `visitSitePromptDisplayedNewTab` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] Trackers-blocked dialog shown → `trackersBlockedMessageDisplayed` * [x] No-trackers dialog shown → `noTrackersMessageDisplayed` * [x] Tracker-network dialog shown → `trackerNetworkMessageDisplayed` * [x] From a blockers dialog, tap privacy-shield → `privacyDashClickedFromOnboarding` * [x] Fire-button education prompt displayed → `fireButtonPromptDisplayed` * [x] Trigger Fire action from that prompt → `fireButtonClickedFromOnboarding` * [x] End-of-journey screen shown → `finalOnboardingScreenDisplayed` * [x] Second non-DDG site loads → `secondSiteVisit` * [x] Second DDG SERP loads → `secondSerpVisit` --- #### **Variant – Buck** Filter logs using: `experiment_metrics_onboardingDesignExperimentAug25_buck` * [x] Intro screen shown → `introScreenDisplayed` * [x] Comparison screen shown → `comparisonScreenDisplayed` * [x] Tap **“Choose Browser”** → `chooseBrowser` * [x] Accept system **Set as default** dialog → `setDefaultRate` * [x] Address-bar-position sheet displayed → `setAddressBarDisplayed` * [x] Select **Top** → `addressBarSetTop` * [x] Select **Bottom** → `addressBarSetBottom` * [x] “Try a search” bubble appears → `tryASearchDisplayed` * [x] Tap first suggestion → `firstSearchSuggestion` * [x] Tap second suggestion → `secondSearchSuggestion` * [x] Tap third suggestion → `thirdSearchSuggestion` * [x] Enter any other query → `searchOrNavCustom` * [x] SERP message dialog appears → `messageOnSerpDisplayed` * [x] Site-suggestion bubble (adjacent) appears → `visitSitePromptDisplayedAdjacent` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] (Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears → `visitSitePromptDisplayedNewTab` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] Trackers-blocked dialog shown → `trackersBlockedMessageDisplayed` * [x] No-trackers dialog shown → `noTrackersMessageDisplayed` * [x] Tracker-network dialog shown → `trackerNetworkMessageDisplayed` * [x] From a blockers dialog, tap privacy-shield → `privacyDashClickedFromOnboarding` * [x] Fire-button education prompt displayed → `fireButtonPromptDisplayed` * [x] Trigger Fire action from that prompt → `fireButtonClickedFromOnboarding` * [x] End-of-journey screen shown → `finalOnboardingScreenDisplayed` * [x] Second non-DDG site loads → `secondSiteVisit` * [x] Second DDG SERP loads → `secondSerpVisit` --- #### **Variant – BB** Filter logs using: `experiment_metrics_onboardingDesignExperimentAug25_bb` * [x] Intro screen shown → `introScreenDisplayed` * [x] Comparison screen shown → `comparisonScreenDisplayed` * [x] Tap **“Choose Browser”** → `chooseBrowser` * [x] Accept system **Set as default** dialog → `setDefaultRate` * [x] Address-bar-position sheet displayed → `setAddressBarDisplayed` * [x] Select **Top** → `addressBarSetTop` * [x] Select **Bottom** → `addressBarSetBottom` * [x] “Try a search” bubble appears → `tryASearchDisplayed` * [x] Tap first suggestion → `firstSearchSuggestion` * [x] Tap second suggestion → `secondSearchSuggestion` * [x] Tap third suggestion → `thirdSearchSuggestion` * [x] Enter any other query → `searchOrNavCustom` * [x] SERP message dialog appears → `messageOnSerpDisplayed` * [x] Site-suggestion bubble (adjacent) appears → `visitSitePromptDisplayedAdjacent` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] (Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears → `visitSitePromptDisplayedNewTab` * [x] Tap first site → `firstSiteSuggestion` * [x] Tap second site → `secondSiteSuggestion` * [x] Tap third site → `thirdSiteSuggestion` * [x] Trackers-blocked dialog shown → `trackersBlockedMessageDisplayed` * [x] No-trackers dialog shown → `noTrackersMessageDisplayed` * [x] Tracker-network dialog shown → `trackerNetworkMessageDisplayed` * [x] From a blockers dialog, tap privacy-shield → `privacyDashClickedFromOnboarding` * [x] Fire-button education prompt displayed → `fireButtonPromptDisplayed` * [x] Trigger Fire action from that prompt → `fireButtonClickedFromOnboarding` * [x] End-of-journey screen shown → `finalOnboardingScreenDisplayed` * [x] Second non-DDG site loads → `secondSiteVisit` * [x] Second DDG SERP loads → `secondSerpVisit` ### UI changes No UI changes in this PR - this is an internal refactoring of the experiment implementation.
1 parent 4d50b54 commit ea7f906

34 files changed

+2016
-367
lines changed

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt

Lines changed: 121 additions & 58 deletions
Large diffs are not rendered by default.

app/src/androidTest/java/com/duckduckgo/app/cta/ui/CtaViewModelTest.kt

Lines changed: 13 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import com.duckduckgo.app.onboarding.store.AppStage
3737
import com.duckduckgo.app.onboarding.store.OnboardingStore
3838
import com.duckduckgo.app.onboarding.store.UserStageStore
3939
import com.duckduckgo.app.onboarding.ui.page.extendedonboarding.ExtendedOnboardingFeatureToggles
40-
import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentToggles
40+
import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentManager
4141
import com.duckduckgo.app.pixels.AppPixelName.*
4242
import com.duckduckgo.app.privacy.db.UserAllowListRepository
4343
import com.duckduckgo.app.privacy.model.HttpsStatus
@@ -125,7 +125,7 @@ class CtaViewModelTest {
125125
private val mockSenseOfProtectionExperiment: SenseOfProtectionExperiment = mock()
126126
private val mockOnboardingHomeScreenWidgetExperiment: OnboardingHomeScreenWidgetExperiment = mock()
127127

128-
private val mockOnboardingDesignExperimentToggles: OnboardingDesignExperimentToggles = mock()
128+
private val mockOnboardingDesignExperimentManager: OnboardingDesignExperimentManager = mock()
129129

130130
private val mockRebrandingFeatureToggle: SubscriptionRebrandingFeatureToggle = mock()
131131

@@ -165,9 +165,9 @@ class CtaViewModelTest {
165165
whenever(mockBrokenSitePrompt.isFeatureEnabled()).thenReturn(false)
166166
whenever(mockBrokenSitePrompt.getUserRefreshPatterns()).thenReturn(emptySet())
167167
whenever(mockSubscriptions.isEligible()).thenReturn(false)
168-
whenever(mockOnboardingDesignExperimentToggles.modifiedControl()).thenReturn(mockDisabledToggle)
169-
whenever(mockOnboardingDesignExperimentToggles.buckOnboarding()).thenReturn(mockDisabledToggle)
170-
whenever(mockOnboardingDesignExperimentToggles.bbOnboarding()).thenReturn(mockDisabledToggle)
168+
whenever(mockOnboardingDesignExperimentManager.isModifiedControlEnrolledAndEnabled()).thenReturn(false)
169+
whenever(mockOnboardingDesignExperimentManager.isBuckEnrolledAndEnabled()).thenReturn(false)
170+
whenever(mockOnboardingDesignExperimentManager.isBbEnrolledAndEnabled()).thenReturn(false)
171171

172172
testee = CtaViewModel(
173173
appInstallStore = mockAppInstallStore,
@@ -187,7 +187,7 @@ class CtaViewModelTest {
187187
brokenSitePrompt = mockBrokenSitePrompt,
188188
senseOfProtectionExperiment = mockSenseOfProtectionExperiment,
189189
onboardingHomeScreenWidgetExperiment = mockOnboardingHomeScreenWidgetExperiment,
190-
onboardingDesignExperimentToggles = mockOnboardingDesignExperimentToggles,
190+
onboardingDesignExperimentManager = mockOnboardingDesignExperimentManager,
191191
rebrandingFeatureToggle = mockRebrandingFeatureToggle,
192192
)
193193
}
@@ -276,7 +276,7 @@ class CtaViewModelTest {
276276
fun whenCtaDismissedAndAllDaxOnboardingCtasShownThenStageCompleted() = runTest {
277277
givenDaxOnboardingActive()
278278
givenShownDaxOnboardingCtas(requiredDaxOnboardingCtas)
279-
testee.onUserDismissedCta(OnboardingDaxDialogCta.DaxSerpCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentToggles))
279+
testee.onUserDismissedCta(OnboardingDaxDialogCta.DaxSerpCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentManager))
280280
verify(mockUserStageStore).stageCompleted(AppStage.DAX_ONBOARDING)
281281
}
282282

@@ -828,14 +828,14 @@ class CtaViewModelTest {
828828

829829
@Test
830830
fun whenCtaShownIfCtaIsNotMarkedAsReadOnShowThenCtaNotInsertedInDatabase() = runTest {
831-
testee.onCtaShown(OnboardingDaxDialogCta.DaxSerpCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentToggles))
831+
testee.onCtaShown(OnboardingDaxDialogCta.DaxSerpCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentManager))
832832

833833
verify(mockDismissedCtaDao, never()).insert(DismissedCta(CtaId.DAX_DIALOG_SERP))
834834
}
835835

836836
@Test
837837
fun whenCtaShownIfCtaIsMarkedAsReadOnShowThenCtaInsertedInDatabase() = runTest {
838-
testee.onCtaShown(OnboardingDaxDialogCta.DaxEndCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentToggles))
838+
testee.onCtaShown(OnboardingDaxDialogCta.DaxEndCta(mockOnboardingStore, mockAppInstallStore, mockOnboardingDesignExperimentManager))
839839

840840
verify(mockDismissedCtaDao).insert(DismissedCta(CtaId.DAX_END))
841841
}
@@ -882,9 +882,7 @@ class CtaViewModelTest {
882882
whenever(mockSubscriptions.isEligible()).thenReturn(true)
883883
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
884884
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)
885-
whenever(mockOnboardingDesignExperimentToggles.modifiedControl()).thenReturn(mockDisabledToggle)
886-
whenever(mockOnboardingDesignExperimentToggles.buckOnboarding()).thenReturn(mockDisabledToggle)
887-
whenever(mockOnboardingDesignExperimentToggles.bbOnboarding()).thenReturn(mockDisabledToggle)
885+
whenever(mockOnboardingDesignExperimentManager.isAnyExperimentEnrolledAndEnabled()).thenReturn(false)
888886
whenever(mockExtendedOnboardingFeatureToggles.freeTrialCopy()).thenReturn(mockDisabledToggle)
889887
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO)).thenReturn(true)
890888
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO_VISIT_SITE)).thenReturn(true)
@@ -896,48 +894,11 @@ class CtaViewModelTest {
896894
}
897895

898896
@Test
899-
fun givenPrivacyProCtaExperimentWhenRefreshCtaOnHomeTabAndModifiedControlOnboardingExperimentEnabledThenDoNotReturnPrivacyProCta() = runTest {
897+
fun givenPrivacyProCtaExperimentWhenRefreshCtaOnHomeTabAndExperimentEnabledThenDoNotReturnPrivacyProCta() = runTest {
900898
givenDaxOnboardingActive()
901-
whenever(mockOnboardingDesignExperimentToggles.modifiedControl()).thenReturn(mockEnabledToggle)
902-
whenever(mockOnboardingDesignExperimentToggles.buckOnboarding()).thenReturn(mockDisabledToggle)
903-
whenever(mockOnboardingDesignExperimentToggles.bbOnboarding()).thenReturn(mockDisabledToggle)
904-
whenever(mockOnboardingHomeScreenWidgetExperiment.isOnboardingHomeScreenWidgetExperiment()).thenReturn(false)
905-
whenever(mockSubscriptions.isEligible()).thenReturn(true)
906-
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
907-
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)
908-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO)).thenReturn(true)
909-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO_VISIT_SITE)).thenReturn(true)
910-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_END)).thenReturn(true)
911-
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true)
912-
913-
val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false, detectedRefreshPatterns = detectedRefreshPatterns)
914-
assertFalse(value is DaxBubbleCta.DaxPrivacyProCta)
915-
}
916-
917-
@Test
918-
fun givenPrivacyProCtaExperimentWhenRefreshCtaOnHomeTabAndBuckOnboardingExperimentEnabledThenDoNotReturnPrivacyProCta() = runTest {
919-
givenDaxOnboardingActive()
920-
whenever(mockOnboardingDesignExperimentToggles.buckOnboarding()).thenReturn(mockEnabledToggle)
921-
whenever(mockOnboardingDesignExperimentToggles.bbOnboarding()).thenReturn(mockDisabledToggle)
922-
whenever(mockOnboardingHomeScreenWidgetExperiment.isOnboardingHomeScreenWidgetExperiment()).thenReturn(false)
923-
whenever(mockSubscriptions.isEligible()).thenReturn(true)
924-
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
925-
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)
926-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO)).thenReturn(true)
927-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO_VISIT_SITE)).thenReturn(true)
928-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_END)).thenReturn(true)
929-
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true)
930-
931-
val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false, detectedRefreshPatterns = detectedRefreshPatterns)
932-
assertFalse(value is DaxBubbleCta.DaxPrivacyProCta)
933-
}
934-
935-
@Test
936-
fun givenPrivacyProCtaExperimentWhenRefreshCtaOnHomeTabAndBBOnboardingExperimentEnabledThenDoNotReturnPrivacyProCta() = runTest {
937-
givenDaxOnboardingActive()
938-
whenever(mockOnboardingDesignExperimentToggles.bbOnboarding()).thenReturn(mockEnabledToggle)
939-
whenever(mockOnboardingDesignExperimentToggles.buckOnboarding()).thenReturn(mockDisabledToggle)
899+
whenever(mockOnboardingDesignExperimentManager.isAnyExperimentEnrolledAndEnabled()).thenReturn(true)
940900
whenever(mockOnboardingHomeScreenWidgetExperiment.isOnboardingHomeScreenWidgetExperiment()).thenReturn(false)
901+
whenever(mockExtendedOnboardingFeatureToggles.freeTrialCopy()).thenReturn(mockDisabledToggle)
941902
whenever(mockSubscriptions.isEligible()).thenReturn(true)
942903
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
943904
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)

app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ import com.duckduckgo.app.global.model.orderedTrackerBlockedEntities
197197
import com.duckduckgo.app.global.view.NonDismissibleBehavior
198198
import com.duckduckgo.app.global.view.launchDefaultAppActivity
199199
import com.duckduckgo.app.global.view.renderIfChanged
200-
import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentToggles
200+
import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentManager
201201
import com.duckduckgo.app.pixels.AppPixelName
202202
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
203203
import com.duckduckgo.app.settings.db.SettingsDataStore
@@ -572,7 +572,7 @@ class BrowserTabFragment :
572572
lateinit var senseOfProtectionExperiment: SenseOfProtectionExperiment
573573

574574
@Inject
575-
lateinit var onboardingDesignExperimentToggles: OnboardingDesignExperimentToggles
575+
lateinit var onboardingDesignExperimentManager: OnboardingDesignExperimentManager
576576

577577
@Inject
578578
lateinit var omnibarTypeResolver: OmnibarTypeResolver
@@ -2226,15 +2226,15 @@ class BrowserTabFragment :
22262226
}
22272227

22282228
private fun setOnboardingDialogBackgroundRes(backgroundRes: Int) {
2229-
if (onboardingDesignExperimentToggles.bbOnboarding().isEnabled()) {
2229+
if (onboardingDesignExperimentManager.isBbEnrolledAndEnabled()) {
22302230
bbDialogInContext.onboardingDaxDialogBackground.setImageResource(backgroundRes)
22312231
} else {
22322232
daxDialogInContext.onboardingDaxDialogBackground.setImageResource(backgroundRes)
22332233
}
22342234
}
22352235

22362236
private fun setOnboardingDialogBackgroundColor(@ColorRes colorRes: Int) {
2237-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
2237+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
22382238
buckDialogInContext.root.setBackgroundColor(getColor(requireContext(), colorRes))
22392239
} else {
22402240
daxDialogInContext.onboardingDaxDialogContainer.setBackgroundColor(getColor(requireContext(), colorRes))
@@ -2985,7 +2985,7 @@ class BrowserTabFragment :
29852985

29862986
@SuppressLint("SetJavaScriptEnabled")
29872987
private fun configureWebView() {
2988-
if (!onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
2988+
if (!onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
29892989
binding.daxDialogOnboardingCtaContent.layoutTransition = LayoutTransition()
29902990
binding.daxDialogOnboardingCtaContent.layoutTransition.enableTransitionType(LayoutTransition.CHANGING)
29912991

@@ -3134,10 +3134,10 @@ class BrowserTabFragment :
31343134

31353135
private fun hideOnboardingDaxDialog(onboardingCta: OnboardingDaxDialogCta) {
31363136
when {
3137-
onboardingDesignExperimentToggles.buckOnboarding().isEnabled() -> {
3137+
onboardingDesignExperimentManager.isBuckEnrolledAndEnabled() -> {
31383138
onboardingCta.hideBuckOnboardingCta(binding)
31393139
}
3140-
onboardingDesignExperimentToggles.bbOnboarding().isEnabled() -> {
3140+
onboardingDesignExperimentManager.isBbEnrolledAndEnabled() -> {
31413141
onboardingCta.hideBBOnboardingCta(binding)
31423142
}
31433143
else -> {
@@ -3153,7 +3153,7 @@ class BrowserTabFragment :
31533153
private fun hideOnboardingDaxBubbleCta(daxBubbleCta: DaxBubbleCta) {
31543154
daxBubbleCta.hideDaxBubbleCta(binding)
31553155
hideDaxBubbleCta()
3156-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
3156+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
31573157
if (daxBubbleCta is DaxBubbleCta.DaxEndCta) {
31583158
hideBuckEndAnimation()
31593159
}
@@ -3163,7 +3163,7 @@ class BrowserTabFragment :
31633163
}
31643164

31653165
private fun hideDaxBubbleCta() {
3166-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
3166+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
31673167
newBrowserTab.newTabLayout.setBackgroundColor(
31683168
requireContext().getColorFromAttr(CommonR.attr.daxColorSurface),
31693169
)
@@ -4419,7 +4419,7 @@ class BrowserTabFragment :
44194419

44204420
viewState.isOnboardingCompleteInNewTabPage && !viewState.isErrorShowing -> {
44214421
hideDaxBubbleCta()
4422-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
4422+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
44234423
hideBuckEndAnimation()
44244424
}
44254425
showNewTab()
@@ -4441,34 +4441,43 @@ class BrowserTabFragment :
44414441
hideNewTab()
44424442
configuration.apply {
44434443
when {
4444-
onboardingDesignExperimentToggles.buckOnboarding().isEnabled() -> {
4444+
onboardingDesignExperimentManager.isBuckEnrolledAndEnabled() -> {
44454445
showBuckCta(binding = buckDialogIntroBubble, configuration = configuration) {
44464446
setOnOptionClicked(
44474447
onboardingExperimentEnabled = true,
44484448
configuration = configuration,
4449-
) { userEnteredQuery(it.link) }
4449+
) { option, index ->
4450+
userEnteredQuery(option.link)
4451+
viewModel.onUserSelectedOnboardingDialogOption(configuration, index)
4452+
}
44504453
}
44514454
}
4452-
onboardingDesignExperimentToggles.bbOnboarding().isEnabled() -> {
4455+
onboardingDesignExperimentManager.isBbEnrolledAndEnabled() -> {
44534456
showBBCta(binding = bbDialogIntroBubble, configuration = configuration) {
44544457
setOnOptionClicked(
44554458
onboardingExperimentEnabled = true,
44564459
configuration = configuration,
4457-
) { userEnteredQuery(it.link) }
4460+
) { option, index ->
4461+
userEnteredQuery(option.link)
4462+
viewModel.onUserSelectedOnboardingDialogOption(configuration, index)
4463+
}
44584464
}
44594465
}
44604466
else -> {
44614467
showCta(daxDialogIntroBubble.daxCtaContainer) {
44624468
setOnOptionClicked(
4463-
onboardingExperimentEnabled = onboardingDesignExperimentToggles.modifiedControl().isEnabled(),
4469+
onboardingExperimentEnabled = onboardingDesignExperimentManager.isModifiedControlEnrolledAndEnabled(),
44644470
configuration = configuration,
4465-
) { userEnteredQuery(it.link) }
4471+
) { option, index ->
4472+
userEnteredQuery(option.link)
4473+
viewModel.onUserSelectedOnboardingDialogOption(configuration, index)
4474+
}
44664475
}
44674476
}
44684477
}
44694478

44704479
setOnPrimaryCtaClicked {
4471-
if (onboardingDesignExperimentToggles.bbOnboarding().isEnabled() && configuration is DaxBubbleCta.DaxEndCta) {
4480+
if (onboardingDesignExperimentManager.isBbEnrolledAndEnabled() && configuration is DaxBubbleCta.DaxEndCta) {
44724481
configuration.hideBBEndCta(
44734482
onAnimationEnd = {
44744483
viewModel.onUserClickCtaOkButton(configuration)
@@ -4487,7 +4496,7 @@ class BrowserTabFragment :
44874496
}
44884497
}
44894498

4490-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
4499+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
44914500
if (configuration is DaxIntroVisitSiteOptionsCta && context?.resources?.getBoolean(R.bool.show_wing_animation) == true) {
44924501
lifecycleScope.launch {
44934502
with(newBrowserTab.wingAnimation) {
@@ -4662,7 +4671,7 @@ class BrowserTabFragment :
46624671
}
46634672

46644673
private fun hideDaxCta() {
4665-
if (onboardingDesignExperimentToggles.buckOnboarding().isEnabled()) {
4674+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) {
46664675
buckDialogInContext.root.gone()
46674676
} else {
46684677
daxDialogInContext.dialogTextCta.cancelAnimation()

0 commit comments

Comments
 (0)