Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions PixelDefinitions/pixels/onboarding.json5
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"m_preonboarding_choose_search_experience_impressions_unique": {
"description": "Fires during onboarding when the Search Experience view appears",
"owners": ["joshliebe"],
"triggers": ["other"],
"suffixes": ["form_factor"],
"parameters": ["appVersion"]
},
"m_preonboarding_aichat_selected": {
"description": "Fires when the user selects the 'Search & Duck.ai' option during onboarding",
"owners": ["joshliebe"],
"triggers": ["other"],
"suffixes": ["form_factor"],
"parameters": ["appVersion"]
},
"m_preonboarding_search_only_selected": {
"description": "Fires when the user selects the 'Search Only' option during onboarding",
"owners": ["joshliebe"],
"triggers": ["other"],
"suffixes": ["form_factor"],
"parameters": ["appVersion"]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ object PixelInterceptorPixelsRequiringDataCleaning : PixelParamRemovalPlugin {
AppPixelName.PREONBOARDING_SKIP_ONBOARDING_PRESSED.pixelName to PixelParameter.removeAtb(),
AppPixelName.PREONBOARDING_CONFIRM_SKIP_ONBOARDING_PRESSED.pixelName to PixelParameter.removeAtb(),
AppPixelName.PREONBOARDING_RESUME_ONBOARDING_PRESSED.pixelName to PixelParameter.removeAtb(),
AppPixelName.PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE.pixelName to PixelParameter.removeAtb(),
AppPixelName.PREONBOARDING_AICHAT_SELECTED.pixelName to PixelParameter.removeAtb(),
AppPixelName.PREONBOARDING_SEARCH_ONLY_SELECTED.pixelName to PixelParameter.removeAtb(),
AppPixelName.SEARCH_AND_FAVORITES_WIDGET_ADDED.pixelName to PixelParameter.removeAtb(),
AppPixelName.SEARCH_AND_FAVORITES_WIDGET_DELETED.pixelName to PixelParameter.removeAtb(),
AppPixelName.SEARCH_WIDGET_ADDED.pixelName to PixelParameter.removeAtb(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,16 @@ import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentM
import com.duckduckgo.app.pixels.AppPixelName
import com.duckduckgo.app.pixels.AppPixelName.NOTIFICATION_RUNTIME_PERMISSION_SHOWN
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_ADDRESS_BAR_POSITION_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_AICHAT_SELECTED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_BOTTOM_ADDRESS_BAR_SELECTED_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CHOOSE_BROWSER_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_COMPARISON_CHART_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CONFIRM_SKIP_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_INTRO_REINSTALL_USER_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_INTRO_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_RESUME_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SEARCH_ONLY_SELECTED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SKIP_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SKIP_ONBOARDING_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
Expand Down Expand Up @@ -192,6 +195,11 @@ class WelcomePageViewModel @Inject constructor(

INPUT_SCREEN -> {
viewModelScope.launch(dispatchers.io()) {
if (inputScreenSelected) {
pixel.fire(PREONBOARDING_AICHAT_SELECTED)
} else {
pixel.fire(PREONBOARDING_SEARCH_ONLY_SELECTED)
}
onboardingStore.storeInputScreenSelection(inputScreenSelected)
_commands.send(Finish)
}
Expand Down Expand Up @@ -290,7 +298,7 @@ class WelcomePageViewModel @Inject constructor(
}
}
INPUT_SCREEN -> {
// no-op
pixel.fire(PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE, type = Unique())
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/duckduckgo/app/pixels/AppPixelName.kt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ enum class AppPixelName(override val pixelName: String) : Pixel.PixelName {
PREONBOARDING_ADDRESS_BAR_POSITION_SHOWN_UNIQUE("m_preonboarding_address_bar_position_dialog_shown_unique"),
PREONBOARDING_BOTTOM_ADDRESS_BAR_SELECTED_UNIQUE("m_preonboarding_bottom_address_bar_selected_unique"),
PREONBOARDING_SKIP_ONBOARDING_SHOWN_UNIQUE("m_preonboarding_skip_onboarding_shown_unique"),
PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE("m_preonboarding_choose_search_experience_impressions_unique"),
PREONBOARDING_AICHAT_SELECTED("m_preonboarding_aichat_selected"),
PREONBOARDING_SEARCH_ONLY_SELECTED("m_preonboarding_search_only_selected"),
PREONBOARDING_SKIP_ONBOARDING_PRESSED("m_preonboarding_skip-onboarding-pressed"),
PREONBOARDING_CONFIRM_SKIP_ONBOARDING_PRESSED("m_preonboarding_confirm-skip-onboarding-pressed"),
PREONBOARDING_RESUME_ONBOARDING_PRESSED("m_preonboarding_resume-onboarding-pressed"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,16 @@ import com.duckduckgo.app.onboarding.ui.page.WelcomePageViewModel.Command.ShowSk
import com.duckduckgo.app.onboardingdesignexperiment.OnboardingDesignExperimentManager
import com.duckduckgo.app.pixels.AppPixelName
import com.duckduckgo.app.pixels.AppPixelName.NOTIFICATION_RUNTIME_PERMISSION_SHOWN
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_AICHAT_SELECTED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_BOTTOM_ADDRESS_BAR_SELECTED_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CHOOSE_BROWSER_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_COMPARISON_CHART_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_CONFIRM_SKIP_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_INTRO_REINSTALL_USER_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_INTRO_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_RESUME_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SEARCH_ONLY_SELECTED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SKIP_ONBOARDING_PRESSED
import com.duckduckgo.app.pixels.AppPixelName.PREONBOARDING_SKIP_ONBOARDING_SHOWN_UNIQUE
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
Expand Down Expand Up @@ -414,7 +417,7 @@ class WelcomePageViewModelTest {
}

@Test
fun whenOnPrimaryCtaClickedWithInputScreenSelectedThenStoreSelectionAndFinish() =
fun whenOnPrimaryCtaClickedWithInputScreenSelectedThenFireAiChatSelectedPixelAndStoreSelectionAndFinish() =
runTest {
mockAndroidBrowserConfigFeature.showInputScreenOnboarding().setRawStoredState(Toggle.State(enable = true))
testee.onInputScreenOptionSelected(true)
Expand All @@ -424,11 +427,12 @@ class WelcomePageViewModelTest {
val command = awaitItem()
Assert.assertTrue(command is Finish)
}
verify(mockPixel).fire(PREONBOARDING_AICHAT_SELECTED)
verify(mockOnboardingStore).storeInputScreenSelection(true)
}

@Test
fun whenOnPrimaryCtaClickedWithInputScreenNotSelectedThenStoreSelectionAndFinish() =
fun whenOnPrimaryCtaClickedWithInputScreenNotSelectedThenFireSearchOnlySelectedPixelAndStoreSelectionAndFinish() =
runTest {
mockAndroidBrowserConfigFeature.showInputScreenOnboarding().setRawStoredState(Toggle.State(enable = true))
testee.onInputScreenOptionSelected(false)
Expand All @@ -438,6 +442,7 @@ class WelcomePageViewModelTest {
val command = awaitItem()
Assert.assertTrue(command is Finish)
}
verify(mockPixel).fire(PREONBOARDING_SEARCH_ONLY_SELECTED)
verify(mockOnboardingStore).storeInputScreenSelection(false)
}

Expand All @@ -458,4 +463,11 @@ class WelcomePageViewModelTest {

Assert.assertEquals(2, viewModel.getMaxPageCount())
}

@Test
fun whenInputScreenDialogIsShownThenFireChooseSearchExperienceImpressionsUniquePixel() {
testee.onDialogShown(PreOnboardingDialogType.INPUT_SCREEN)

verify(mockPixel).fire(PREONBOARDING_CHOOSE_SEARCH_EXPERIENCE_IMPRESSIONS_UNIQUE, type = Unique())
}
}
Loading