diff --git a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerUiState.kt b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerUiState.kt index 44f2dbb00651..8f39db02d30a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerUiState.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerUiState.kt @@ -17,6 +17,7 @@ sealed class LayoutPickerUiState( override val isToolbarVisible: Boolean = false, val selectedCategoriesSlugs: ArrayList = arrayListOf(), val selectedLayoutSlug: String? = null, + val isSelectedLayoutRecommended: Boolean = false, val loadedThumbnailSlugs: ArrayList = arrayListOf(), val categories: List = listOf(), val layoutCategories: List = listOf(), diff --git a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerViewModel.kt index ef43a92b8f6e..c42a9af6b8f0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/layoutpicker/LayoutPickerViewModel.kt @@ -170,7 +170,7 @@ abstract class LayoutPickerViewModel( mShotPreview = thumbnailPreview, selected = layout.slug == state.selectedLayoutSlug, tapOpensPreview = thumbnailTapOpensPreview, - onItemTapped = { onLayoutTapped(layoutSlug = layout.slug) }, + onItemTapped = { onLayoutTapped(layoutSlug = layout.slug, category.isRecommended) }, onThumbnailReady = { onThumbnailReady(layoutSlug = layout.slug) } ) } @@ -194,7 +194,7 @@ abstract class LayoutPickerViewModel( * Layout tapped * @param layoutSlug the slug of the tapped layout */ - open fun onLayoutTapped(layoutSlug: String) { + open fun onLayoutTapped(layoutSlug: String, isRecommended: Boolean = false) { (uiState.value as? Content)?.let { state -> if (!state.loadedThumbnailSlugs.contains(layoutSlug)) return // No action if (layoutSlug == state.selectedLayoutSlug) { // deselect diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt index 33423b588c96..09f2fd446f3e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt @@ -9,6 +9,7 @@ import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.C import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.FILTER import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.LOCATION import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.PREVIEW_MODE +import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.RECOMMENDED import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.SEARCH_TERM import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.SEGMENT_ID import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker.PROPERTY.SEGMENT_NAME @@ -47,7 +48,8 @@ class SiteCreationTracker @Inject constructor(val tracker: AnalyticsTrackerWrapp SELECTED_FILTERS("selected_filters"), VERTICAL_SLUG("vertical_slug"), VARIATION("variation"), - SITE_NAME("site_name") + SITE_NAME("site_name"), + RECOMMENDED("recommended") } private var designSelectionSkipped: Boolean = false @@ -172,11 +174,11 @@ class SiteCreationTracker @Inject constructor(val tracker: AnalyticsTrackerWrapp tracker.track(AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_SKIPPED) } - fun trackSiteDesignSelected(template: String) { + fun trackSiteDesignSelected(template: String, recommended: Boolean) { designSelectionSkipped = false tracker.track( AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_SELECTED, - mapOf(TEMPLATE.key to template) + mapOf(TEMPLATE.key to template, RECOMMENDED.key to recommended) ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt index c0154afaab88..5e4416c8c1f7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt @@ -94,10 +94,10 @@ class HomePagePickerViewModel @Inject constructor( } } - override fun onLayoutTapped(layoutSlug: String) { + override fun onLayoutTapped(layoutSlug: String, isRecommended: Boolean) { (uiState.value as? Content)?.let { if (it.loadedThumbnailSlugs.contains(layoutSlug)) { - updateUiState(it.copy(selectedLayoutSlug = layoutSlug)) + updateUiState(it.copy(selectedLayoutSlug = layoutSlug, isSelectedLayoutRecommended = isRecommended)) onPreviewTapped() loadLayouts() } @@ -112,7 +112,8 @@ class HomePagePickerViewModel @Inject constructor( selectedLayout?.let { layout -> super.onPreviewChooseTapped() val template = layout.slug - analyticsTracker.trackSiteDesignSelected(template) + val isRecommended = (uiState.value as? Content)?.isSelectedLayoutRecommended == true + analyticsTracker.trackSiteDesignSelected(template, isRecommended) _onDesignActionPressed.value = DesignSelectionAction.Choose(template) return } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt index 49848a16a90c..9d71fe54a6cd 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt @@ -214,4 +214,22 @@ class HomePagePickerViewModelTest { verify(onDesignActionObserver).onChanged(captor.capture()) assertThat(captor.value.template).isEqualTo(mockedDesignSlug) } + + @Test + fun `when the user chooses a recommended design the recommended information is emitted`() = mockResponse { + viewModel.start() + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug, true) + viewModel.onPreviewChooseTapped() + verify(analyticsTracker).trackSiteDesignSelected(mockedDesignSlug, true) + } + + @Test + fun `when the user chooses a design that is not recommended the correct information is emitted`() = mockResponse { + viewModel.start() + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug, false) + viewModel.onPreviewChooseTapped() + verify(analyticsTracker).trackSiteDesignSelected(mockedDesignSlug, false) + } }