From 26e41be02edf4e854caf379e2c4782c4990392ba Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 23 Jun 2021 18:13:48 +0300 Subject: [PATCH] For #19955 #20393: Add telemetry for home screen recent tabs. --- app/metrics.yaml | 40 +++++++++++++++++++ .../mozilla/fenix/components/metrics/Event.kt | 5 +++ .../components/metrics/GleanMetricsService.kt | 13 ++++++ .../org/mozilla/fenix/home/HomeFragment.kt | 4 +- .../controller/RecentTabController.kt | 16 +++++++- .../controller/RecentTabControllerTest.kt | 9 ++++- 6 files changed, 84 insertions(+), 3 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index be95aa83f..4c0024e50 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -5781,3 +5781,43 @@ start_on_home: notification_emails: - android-probes@mozilla.com expires: "2022-06-16" +recent_tabs: + show_all_clicked: + type: event + description: | + User has clicked show all button and opened tabs tray. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/19955 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/20138 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-06-23" + recent_tab_opened: + type: event + description: | + User has opened a recent tab from homescreen. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/19955 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/20138 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-06-23" + in_progress_media_tab_opened: + type: event + description: | + User has opened a recent tab from homescreen. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/20393 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/20138 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-06-23" diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt index f1c4c87ac..07091a485 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt @@ -244,6 +244,11 @@ sealed class Event { object StartOnHomeEnterHomeScreen : Event() object StartOnHomeOpenTabsTray : Event() + // Recent tabs + object ShowAllRecentTabs : Event() + object OpenRecentTab : Event() + object OpenInProgressMediaTab : Event() + // Interaction events with extras data class TopSiteSwipeCarousel(val page: Int) : Event() { diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index fd73e6353..6a5bee9e2 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -46,6 +46,7 @@ import org.mozilla.fenix.GleanMetrics.PrivateBrowsingMode import org.mozilla.fenix.GleanMetrics.PrivateBrowsingShortcut import org.mozilla.fenix.GleanMetrics.ProgressiveWebApp import org.mozilla.fenix.GleanMetrics.ReaderMode +import org.mozilla.fenix.GleanMetrics.RecentTabs import org.mozilla.fenix.GleanMetrics.SearchShortcuts import org.mozilla.fenix.GleanMetrics.SearchSuggestions import org.mozilla.fenix.GleanMetrics.SearchWidget @@ -849,6 +850,18 @@ private val Event.wrapper: EventWrapper<*>? { StartOnHome.openTabsTray.record(it) } ) + is Event.OpenRecentTab -> EventWrapper( + { RecentTabs.recentTabOpened.record(it) } + ) + + is Event.OpenInProgressMediaTab -> EventWrapper( + { RecentTabs.inProgressMediaTabOpened.record(it) } + ) + + is Event.ShowAllRecentTabs -> EventWrapper( + { RecentTabs.showAllClicked.record(it) } + ) + // Don't record other events in Glean: is Event.AddBookmark -> null is Event.OpenedAppFirstRun -> null diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 99ec21a67..6742764a4 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -317,7 +317,9 @@ class HomeFragment : Fragment() { ), recentTabController = DefaultRecentTabsController( selectTabUseCase = components.useCases.tabsUseCases.selectTab, - navController = findNavController() + navController = findNavController(), + metrics = requireComponents.analytics.metrics, + store = components.core.store ), recentBookmarksController = DefaultRecentBookmarksController( activity = activity, diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt index 77ef1b6b5..c5b4bb400 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt @@ -5,8 +5,12 @@ package org.mozilla.fenix.home.recenttabs.controller import androidx.navigation.NavController +import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.tabs.TabsUseCases.SelectTabUseCase import org.mozilla.fenix.R +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController +import org.mozilla.fenix.ext.inProgressMediaTab import org.mozilla.fenix.ext.nav import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.recenttabs.interactor.RecentTabInteractor @@ -35,15 +39,25 @@ interface RecentTabController { */ class DefaultRecentTabsController( private val selectTabUseCase: SelectTabUseCase, - private val navController: NavController + private val navController: NavController, + private val metrics: MetricController, + private val store: BrowserStore ) : RecentTabController { override fun handleRecentTabClicked(tabId: String) { + + if (tabId == store.state.inProgressMediaTab?.id) { + metrics.track(Event.OpenInProgressMediaTab) + } else { + metrics.track(Event.OpenRecentTab) + } + selectTabUseCase.invoke(tabId) navController.navigate(R.id.browserFragment) } override fun handleRecentTabShowAllClicked() { + metrics.track(Event.ShowAllRecentTabs) navController.nav( R.id.homeFragment, HomeFragmentDirections.actionGlobalTabsTrayFragment() diff --git a/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt index 64cb38cef..09b2c5080 100644 --- a/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt @@ -23,6 +23,8 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.R +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController @OptIn(ExperimentalCoroutinesApi::class) class RecentTabControllerTest { @@ -34,6 +36,7 @@ class RecentTabControllerTest { private val navController: NavController = mockk(relaxed = true) private val selectTabUseCase: TabsUseCases = mockk(relaxed = true) + private val metrics: MetricController = mockk(relaxed = true) private lateinit var store: BrowserStore private lateinit var controller: RecentTabController @@ -45,7 +48,9 @@ class RecentTabControllerTest { ) controller = spyk(DefaultRecentTabsController( selectTabUseCase = selectTabUseCase.selectTab, - navController = navController + navController = navController, + metrics = metrics, + store = store )) every { navController.currentDestination } returns mockk { @@ -67,6 +72,7 @@ class RecentTabControllerTest { verify { selectTabUseCase.selectTab.invoke(tab.id) navController.navigate(R.id.browserFragment) + metrics.track(Event.OpenRecentTab) } } @@ -79,6 +85,7 @@ class RecentTabControllerTest { match { it.actionId == R.id.action_global_tabsTrayFragment }, null ) + metrics.track(Event.ShowAllRecentTabs) } } }