MR2 Telemetry: Recent tabs section probe (#22166)

* For #22107 - Added probe to track if the Recent tabs / jump back in section is visible

* For #22107 - Fixed lint errors

* For #22107 - added data review number to metric

* For #22166 - fixed expiration date

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
upstream-sync
Noah Bond 3 years ago committed by GitHub
parent 9a53a12c57
commit a06b04ec6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5828,6 +5828,20 @@ recent_tabs:
notification_emails: notification_emails:
- android-probes@mozilla.com - android-probes@mozilla.com
expires: "2022-06-23" expires: "2022-06-23"
section_visible:
type: boolean
description: |
An indication of whether the recent tabs /
Jump Back In section is visible on the homepage.
bugs:
- https://github.com/mozilla-mobile/fenix/issues/22107
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/22166
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-11-01"
recent_bookmarks: recent_bookmarks:
shown: shown:

@ -268,6 +268,8 @@ sealed class Event {
object ShowAllRecentTabs : Event() object ShowAllRecentTabs : Event()
object OpenRecentTab : Event() object OpenRecentTab : Event()
object OpenInProgressMediaTab : Event() object OpenInProgressMediaTab : Event()
object RecentTabsSectionIsVisible : Event()
object RecentTabsSectionIsNotVisible : Event()
// Recent bookmarks // Recent bookmarks
object BookmarkClicked : Event() object BookmarkClicked : Event()

@ -799,6 +799,14 @@ private val Event.wrapper: EventWrapper<*>?
{ RecentTabs.showAllClicked.record(it) } { RecentTabs.showAllClicked.record(it) }
) )
is Event.RecentTabsSectionIsVisible -> EventWrapper<NoExtraKeys>(
{ RecentTabs.sectionVisible.set(true) }
)
is Event.RecentTabsSectionIsNotVisible -> EventWrapper<NoExtraKeys>(
{ RecentTabs.sectionVisible.set(false) }
)
is Event.BookmarkClicked -> EventWrapper<NoExtraKeys>( is Event.BookmarkClicked -> EventWrapper<NoExtraKeys>(
{ RecentBookmarks.bookmarkClicked.add() } { RecentBookmarks.bookmarkClicked.add() }
) )

@ -434,7 +434,7 @@ class HomeFragment : Fragment() {
sessionControlView?.update(homeFragmentStore.state) sessionControlView?.update(homeFragmentStore.state)
binding.root.consumeFrom(homeFragmentStore, viewLifecycleOwner) { binding.root.consumeFrom(homeFragmentStore, viewLifecycleOwner) {
sessionControlView?.update(it) sessionControlView?.update(it, shouldReportMetrics = true)
} }
} }
} }

@ -46,6 +46,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.home.HomeFragment
import org.mozilla.fenix.home.HomeFragmentAction import org.mozilla.fenix.home.HomeFragmentAction
import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.HomeFragmentDirections
import org.mozilla.fenix.home.HomeFragmentState
import org.mozilla.fenix.home.HomeFragmentStore import org.mozilla.fenix.home.HomeFragmentStore
import org.mozilla.fenix.home.Mode import org.mozilla.fenix.home.Mode
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
@ -188,6 +189,11 @@ interface SessionControlController {
* @see [OnboardingInteractor.showOnboardingDialog] * @see [OnboardingInteractor.showOnboardingDialog]
*/ */
fun handleShowOnboardingDialog() fun handleShowOnboardingDialog()
/**
* @see [SessionControlInteractor.reportSessionMetrics]
*/
fun handleReportSessionMetrics(state: HomeFragmentState)
} }
@Suppress("TooManyFunctions", "LargeClass") @Suppress("TooManyFunctions", "LargeClass")
@ -596,4 +602,11 @@ class DefaultSessionControlController(
} }
} }
} }
override fun handleReportSessionMetrics(state: HomeFragmentState) {
metrics.track(
if (state.recentTabs.isEmpty()) Event.RecentTabsSectionIsNotVisible
else Event.RecentTabsSectionIsVisible
)
}
} }

@ -14,6 +14,7 @@ import org.mozilla.fenix.components.tips.Tip
import org.mozilla.fenix.historymetadata.HistoryMetadataGroup import org.mozilla.fenix.historymetadata.HistoryMetadataGroup
import org.mozilla.fenix.historymetadata.controller.HistoryMetadataController import org.mozilla.fenix.historymetadata.controller.HistoryMetadataController
import org.mozilla.fenix.historymetadata.interactor.HistoryMetadataInteractor import org.mozilla.fenix.historymetadata.interactor.HistoryMetadataInteractor
import org.mozilla.fenix.home.HomeFragmentState
import org.mozilla.fenix.home.recentbookmarks.controller.RecentBookmarksController import org.mozilla.fenix.home.recentbookmarks.controller.RecentBookmarksController
import org.mozilla.fenix.home.recentbookmarks.interactor.RecentBookmarksInteractor import org.mozilla.fenix.home.recentbookmarks.interactor.RecentBookmarksInteractor
import org.mozilla.fenix.home.recenttabs.controller.RecentTabController import org.mozilla.fenix.home.recenttabs.controller.RecentTabController
@ -36,6 +37,13 @@ interface TabSessionInteractor {
* Called when a user clicks on the Private Mode button on the homescreen. * Called when a user clicks on the Private Mode button on the homescreen.
*/ */
fun onPrivateModeButtonClicked(newMode: BrowsingMode, userHasBeenOnboarded: Boolean) fun onPrivateModeButtonClicked(newMode: BrowsingMode, userHasBeenOnboarded: Boolean)
/**
* Called when there is an update to the session state and updated metrics need to be reported
*
* * @param state The state the homepage from which to report desired metrics.
*/
fun reportSessionMetrics(state: HomeFragmentState)
} }
/** /**
@ -410,4 +418,8 @@ class SessionControlInteractor(
override fun onDiscoverMoreClicked(link: String) { override fun onDiscoverMoreClicked(link: String) {
pocketStoriesController.handleDiscoverMoreClicked(link) pocketStoriesController.handleDiscoverMoreClicked(link)
} }
override fun reportSessionMetrics(state: HomeFragmentState) {
controller.handleReportSessionMetrics(state)
}
} }

@ -215,11 +215,13 @@ class SessionControlView(
} }
} }
fun update(state: HomeFragmentState) { fun update(state: HomeFragmentState, shouldReportMetrics: Boolean = false) {
if (state.shouldShowHomeOnboardingDialog(view.context.settings())) { if (state.shouldShowHomeOnboardingDialog(view.context.settings())) {
interactor.showOnboardingDialog() interactor.showOnboardingDialog()
} }
if (shouldReportMetrics) interactor.reportSessionMetrics(state)
val stateAdapterList = state.toAdapterList() val stateAdapterList = state.toAdapterList()
if (homeScreenViewModel.shouldScrollToTopSites) { if (homeScreenViewModel.shouldScrollToTopSites) {
sessionControlAdapter.submitList(stateAdapterList) { sessionControlAdapter.submitList(stateAdapterList) {

@ -55,6 +55,7 @@ import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.components.tips.Tip import org.mozilla.fenix.components.tips.Tip
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.recenttabs.RecentTab
import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -107,6 +108,7 @@ class DefaultSessionControlControllerTest {
) )
private lateinit var store: BrowserStore private lateinit var store: BrowserStore
private val homeFragmentState: HomeFragmentState = mockk(relaxed = true)
@Before @Before
fun setup() { fun setup() {
@ -816,6 +818,31 @@ class DefaultSessionControlControllerTest {
} }
} }
@Test
fun `WHEN handleReportSessionMetrics is called AND there are zero recent tabs THEN report Event#RecentTabsSectionIsNotVisible`() {
every { homeFragmentState.recentTabs } returns emptyList()
createController().handleReportSessionMetrics(homeFragmentState)
verify(exactly = 0) {
metrics.track(Event.RecentTabsSectionIsVisible)
}
verify {
metrics.track(Event.RecentTabsSectionIsNotVisible)
}
}
@Test
fun `WHEN handleReportSessionMetrics is called AND there is at least one recent tab THEN report Event#RecentTabsSectionIsVisible`() {
val recentTab: RecentTab = mockk(relaxed = true)
every { homeFragmentState.recentTabs } returns listOf(recentTab)
createController().handleReportSessionMetrics(homeFragmentState)
verify(exactly = 0) {
metrics.track(Event.RecentTabsSectionIsNotVisible)
}
verify {
metrics.track(Event.RecentTabsSectionIsVisible)
}
}
private fun createController( private fun createController(
hideOnboarding: () -> Unit = { }, hideOnboarding: () -> Unit = { },
registerCollectionStorageObserver: () -> Unit = { }, registerCollectionStorageObserver: () -> Unit = { },

@ -4,6 +4,7 @@
package org.mozilla.fenix.home package org.mozilla.fenix.home
import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.concept.storage.BookmarkNode import mozilla.components.concept.storage.BookmarkNode
@ -259,4 +260,12 @@ class SessionControlInteractorTest {
verify { pocketStoriesController.handleLearnMoreClicked(link) } verify { pocketStoriesController.handleLearnMoreClicked(link) }
} }
@Test
fun reportSessionMetrics() {
val homeFragmentState: HomeFragmentState = mockk(relaxed = true)
every { homeFragmentState.recentBookmarks } returns emptyList()
interactor.reportSessionMetrics(homeFragmentState)
verify { controller.handleReportSessionMetrics(homeFragmentState) }
}
} }

Loading…
Cancel
Save