From fbb17595a10a265eb1bc5c312f920d93976cad0b Mon Sep 17 00:00:00 2001 From: Jeremy Massel <1123407+jkmassel@users.noreply.github.com> Date: Fri, 7 Aug 2026 14:33:39 -0600 Subject: [PATCH] CMM-2213: Attach selected site to My Site dashboard card impressions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `MY_SITE_DASHBOARD_CARD_SHOWN` fired through the bare `AnalyticsTrackerWrapper.track(stat, properties)`, so `jpandroid_my_site_dashboard_card_shown` and its WordPress twin carried `type` and `subtype` but no `blog_id` — 0.0% coverage across a 14-day window, versus 96.8% on the sibling `my_site_tab_accessed` fired from the same screen. Route the call through the site-aware `track(stat, site, properties)` overload, reading the currently selected site from `SelectedSiteRepository`. The My Site tab always shows exactly one site, and `trackWithSiteDetails` attaches `blog_id`, `is_jetpack`, and `site_type` for WP.com and Jetpack-connected sites. One shared call site, so both the Jetpack and WordPress Android apps are fixed at once. --- .../ui/mysite/cards/dashboard/CardsShownTracker.kt | 5 ++++- .../mysite/cards/dashboard/CardsShownTrackerTest.kt | 13 ++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTracker.kt index ee1fc3f09135..3d62ab81db9e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTracker.kt @@ -10,6 +10,7 @@ import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard.PostCardWithPostItems import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.TodaysStatsCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.TodaysStatsCard.TodaysStatsCardWithData +import org.wordpress.android.ui.mysite.SelectedSiteRepository import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.BlazeSubtype import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.StatsSubtype import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.Type @@ -17,7 +18,8 @@ import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import javax.inject.Inject class CardsShownTracker @Inject constructor( - private val analyticsTrackerWrapper: AnalyticsTrackerWrapper + private val analyticsTrackerWrapper: AnalyticsTrackerWrapper, + private val selectedSiteRepository: SelectedSiteRepository ) { private val cardsShownTracked = mutableListOf>() @@ -121,6 +123,7 @@ class CardsShownTracker @Inject constructor( cardsShownTracked.add(pair) analyticsTrackerWrapper.track( Stat.MY_SITE_DASHBOARD_CARD_SHOWN, + selectedSiteRepository.getSelectedSite(), mapOf( CardsTracker.TYPE to pair.first, CardsTracker.SUBTYPE to pair.second diff --git a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTrackerTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTrackerTest.kt index 10f25256cba8..acdf751c1ee1 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTrackerTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/mysite/cards/dashboard/CardsShownTrackerTest.kt @@ -7,11 +7,14 @@ import org.mockito.Mock import org.mockito.junit.MockitoJUnitRunner import org.mockito.kotlin.mock import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever import org.wordpress.android.analytics.AnalyticsTracker.Stat +import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ActivityCard.ActivityCardWithItems import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.ErrorCard import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card import org.wordpress.android.ui.mysite.MySiteCardAndItem.Card.PostCard.PostCardWithPostItems +import org.wordpress.android.ui.mysite.SelectedSiteRepository import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.ActivityLogSubtype import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.PostSubtype import org.wordpress.android.ui.mysite.cards.dashboard.CardsTracker.Type @@ -23,11 +26,17 @@ import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper class CardsShownTrackerTest { @Mock lateinit var analyticsTracker: AnalyticsTrackerWrapper + + @Mock + lateinit var selectedSiteRepository: SelectedSiteRepository + + private val site: SiteModel = mock() private lateinit var cardsShownTracker: CardsShownTracker @Before fun setUp() { - cardsShownTracker = CardsShownTracker(analyticsTracker) + cardsShownTracker = CardsShownTracker(analyticsTracker, selectedSiteRepository) + whenever(selectedSiteRepository.getSelectedSite()).thenReturn(site) } @Test @@ -50,6 +59,7 @@ class CardsShownTrackerTest { verify(analyticsTracker).track( Stat.MY_SITE_DASHBOARD_CARD_SHOWN, + site, mapOf(CardsTracker.TYPE to Type.ERROR.label, CardsTracker.SUBTYPE to Type.ERROR.label) ) } @@ -64,6 +74,7 @@ class CardsShownTrackerTest { private fun verifyCardShownTracked(type: String, subtype: String) { verify(analyticsTracker).track( Stat.MY_SITE_DASHBOARD_CARD_SHOWN, + site, mapOf(CardsTracker.TYPE to type, CardsTracker.SUBTYPE to subtype) ) }