Close #23694: Add telemetry for history search

upstream-sync
Roger Yang 2 years ago committed by mergify[bot]
parent 80a05bcb37
commit 7d8bad05cd

@ -3124,6 +3124,32 @@ history:
notification_emails:
- android-probes@mozilla.com
expires: "2022-11-01"
search_icon_tapped:
type: event
description: |
A user tapped on the search icon in history.
bugs:
- https://github.com/mozilla-mobile/fenix/issues/23694
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/23695
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2023-03-31"
search_result_tapped:
type: event
description: |
A user tapped on the search result in history.
bugs:
- https://github.com/mozilla-mobile/fenix/issues/23694
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/23695
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2023-03-31"
recently_closed_tabs:
opened:

@ -90,6 +90,8 @@ sealed class Event {
object HistorySearchTermGroupOpenTab : Event()
object HistorySearchTermGroupRemoveTab : Event()
object HistorySearchTermGroupRemoveAll : Event()
object HistorySearchIconTapped : Event()
object HistorySearchResultTapped : Event()
object RecentlyClosedTabsOpened : Event()
object RecentlyClosedTabsClosed : Event()
object RecentlyClosedTabsShowFullHistory : Event()

@ -326,6 +326,12 @@ private val Event.wrapper: EventWrapper<*>?
is Event.HistorySearchTermGroupRemoveAll -> EventWrapper<NoExtraKeys>(
{ History.searchTermGroupRemoveAll.record(it) }
)
is Event.HistorySearchIconTapped -> EventWrapper<NoExtraKeys>(
{ History.searchIconTapped.record(it) }
)
is Event.HistorySearchResultTapped -> EventWrapper<NoExtraKeys>(
{ History.searchResultTapped.record(it) }
)
is Event.RecentlyClosedTabsOpened -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.opened.record(it) }
)

@ -244,6 +244,7 @@ class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler {
true
}
R.id.history_search -> {
requireComponents.analytics.metrics.track(Event.HistorySearchIconTapped)
historyInteractor.onSearch()
true
}

@ -7,6 +7,8 @@ package org.mozilla.fenix.library.history
import mozilla.components.concept.engine.EngineSession.LoadUrlFlags
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
/**
* An interface that handles the view manipulation of the History Search, triggered by the Interactor
@ -19,6 +21,7 @@ interface HistorySearchController {
class HistorySearchDialogController(
private val activity: HomeActivity,
private val metrics: MetricController,
private val fragmentStore: HistorySearchFragmentStore,
private val clearToolbarFocus: () -> Unit,
) : HistorySearchController {
@ -32,6 +35,7 @@ class HistorySearchDialogController(
}
override fun handleUrlTapped(url: String, flags: LoadUrlFlags) {
metrics.track(Event.HistorySearchResultTapped)
clearToolbarFocus()
activity.openToBrowserAndLoad(

@ -37,6 +37,7 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.databinding.FragmentHistorySearchDialogBinding
import org.mozilla.fenix.databinding.SearchSuggestionsHintBinding
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.library.history.awesomebar.AwesomeBarView
import org.mozilla.fenix.library.history.toolbar.ToolbarView
@ -82,6 +83,7 @@ class HistorySearchDialogFragment : AppCompatDialogFragment(), UserInteractionHa
interactor = HistorySearchDialogInteractor(
HistorySearchDialogController(
activity = activity,
metrics = activity.components.analytics.metrics,
fragmentStore = store,
clearToolbarFocus = {
dialogHandledAction = true

@ -189,6 +189,14 @@ class GleanMetricsServiceTest {
assertFalse(History.searchTermGroupRemoveAll.testHasValue())
gleanService.track(Event.HistorySearchTermGroupRemoveAll)
assertTrue(History.searchTermGroupRemoveAll.testHasValue())
assertFalse(History.searchIconTapped.testHasValue())
gleanService.track(Event.HistorySearchIconTapped)
assertTrue(History.searchIconTapped.testHasValue())
assertFalse(History.searchResultTapped.testHasValue())
gleanService.track(Event.HistorySearchResultTapped)
assertTrue(History.searchResultTapped.testHasValue())
}
@Test

@ -340,6 +340,8 @@ class MetricControllerTest {
every { marketingService1.shouldTrack(Event.HistorySearchTermGroupOpenTab) } returns true
every { marketingService1.shouldTrack(Event.HistorySearchTermGroupRemoveTab) } returns true
every { marketingService1.shouldTrack(Event.HistorySearchTermGroupRemoveAll) } returns true
every { marketingService1.shouldTrack(Event.HistorySearchIconTapped) } returns true
every { marketingService1.shouldTrack(Event.HistorySearchResultTapped) } returns true
controller.start(MetricServiceType.Marketing)
@ -354,6 +356,8 @@ class MetricControllerTest {
controller.track(Event.HistorySearchTermGroupOpenTab)
controller.track(Event.HistorySearchTermGroupRemoveTab)
controller.track(Event.HistorySearchTermGroupRemoveAll)
controller.track(Event.HistorySearchIconTapped)
controller.track(Event.HistorySearchResultTapped)
verify { marketingService1.track(Event.HistoryOpenedInNewTab) }
verify { marketingService1.track(Event.HistoryOpenedInNewTabs) }
@ -366,6 +370,8 @@ class MetricControllerTest {
verify { marketingService1.track(Event.HistorySearchTermGroupOpenTab) }
verify { marketingService1.track(Event.HistorySearchTermGroupRemoveTab) }
verify { marketingService1.track(Event.HistorySearchTermGroupRemoveAll) }
verify { marketingService1.track(Event.HistorySearchIconTapped) }
verify { marketingService1.track(Event.HistorySearchResultTapped) }
}
@Test

@ -14,11 +14,14 @@ import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
class HistorySearchControllerTest {
@MockK(relaxed = true) private lateinit var activity: HomeActivity
@MockK(relaxed = true) private lateinit var store: HistorySearchFragmentStore
@MockK(relaxed = true) private lateinit var metrics: MetricController
@Before
fun setUp() {
@ -64,6 +67,7 @@ class HistorySearchControllerTest {
createController().handleUrlTapped(url)
verify {
metrics.track(Event.HistorySearchResultTapped)
activity.openToBrowserAndLoad(
searchTermOrURL = url,
newTab = true,
@ -78,6 +82,7 @@ class HistorySearchControllerTest {
): HistorySearchDialogController {
return HistorySearchDialogController(
activity = activity,
metrics = metrics,
fragmentStore = store,
clearToolbarFocus = clearToolbarFocus,
)

Loading…
Cancel
Save