Issue #24522: Add telemetry for unified search

pull/543/head
Roger Yang 2 years ago committed by mergify[bot]
parent 6f0aea9fd9
commit b48123aa50

@ -645,6 +645,46 @@ search_shortcuts:
- Search
- Shortcuts
unified_search:
search_menu_tapped:
type: event
description: |
A user tapped on the unified search selector menu.
bugs:
- https://github.com/mozilla-mobile/fenix/issues/24522
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25544
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 115
metadata:
tags:
- Search
- Shortcuts
engine_selected:
type: event
description: |
A user used unified search to select a search shortcut engine to use
extra_keys:
engine:
type: string
description: |
The name of the built-in search engine the user selected as a string
bugs:
- https://github.com/mozilla-mobile/fenix/issues/24522
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25544
notification_emails:
- android-probes@mozilla.com
expires: 115
metadata:
tags:
- Search
- Shortcuts
experiments_default_browser:
toolbar_menu_clicked:
type: event

@ -21,9 +21,13 @@ import mozilla.components.support.ktx.kotlin.isUrl
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.SearchShortcuts
import org.mozilla.fenix.GleanMetrics.UnifiedSearch
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Core
import org.mozilla.fenix.components.Core.Companion.BOOKMARKS_SEARCH_ENGINE_ID
import org.mozilla.fenix.components.Core.Companion.HISTORY_SEARCH_ENGINE_ID
import org.mozilla.fenix.components.Core.Companion.TABS_SEARCH_ENGINE_ID
import org.mozilla.fenix.components.metrics.MetricsUtils
import org.mozilla.fenix.crashes.CrashListActivity
import org.mozilla.fenix.ext.navigateSafe
@ -218,10 +222,21 @@ class SearchDialogController(
val engine = when (searchEngine.type) {
SearchEngine.Type.CUSTOM -> "custom"
SearchEngine.Type.APPLICATION -> "application"
SearchEngine.Type.APPLICATION ->
when (searchEngine.id) {
HISTORY_SEARCH_ENGINE_ID -> "history"
BOOKMARKS_SEARCH_ENGINE_ID -> "bookmarks"
TABS_SEARCH_ENGINE_ID -> "tabs"
else -> "application"
}
else -> searchEngine.name
}
SearchShortcuts.selected.record(SearchShortcuts.SelectedExtra(engine))
if (settings.showUnifiedSearchFeature) {
UnifiedSearch.engineSelected.record(UnifiedSearch.EngineSelectedExtra(engine))
} else {
SearchShortcuts.selected.record(SearchShortcuts.SelectedExtra(engine))
}
}
override fun handleSearchShortcutsButtonClicked() {

@ -18,6 +18,8 @@ import mozilla.components.concept.toolbar.Toolbar
import mozilla.components.lib.state.ext.flowScoped
import mozilla.components.support.ktx.android.content.res.resolveAttribute
import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.UnifiedSearch
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.search.SearchDialogFragmentStore
@ -62,6 +64,7 @@ class SearchSelectorToolbarAction(
Orientation.DOWN
}
UnifiedSearch.searchMenuTapped.record(NoExtras())
menu.menuController.show(anchor = it, orientation = orientation)
}

@ -41,6 +41,7 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.SearchShortcuts
import org.mozilla.fenix.GleanMetrics.UnifiedSearch
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Core
@ -362,6 +363,9 @@ class SearchDialogControllerTest {
val searchEngine: SearchEngine = mockk(relaxed = true)
every { searchEngine.type } returns SearchEngine.Type.APPLICATION
every { searchEngine.id } returns Core.HISTORY_SEARCH_ENGINE_ID
every { settings.showUnifiedSearchFeature } returns true
assertFalse(UnifiedSearch.engineSelected.testHasValue())
var focusToolbarInvoked = false
createController(
@ -373,13 +377,13 @@ class SearchDialogControllerTest {
assertTrue(focusToolbarInvoked)
verify { store.dispatch(SearchFragmentAction.SearchHistoryEngineSelected(searchEngine)) }
assertTrue(SearchShortcuts.selected.testHasValue())
val recordedEvents = SearchShortcuts.selected.testGetValue()
assertTrue(UnifiedSearch.engineSelected.testHasValue())
val recordedEvents = UnifiedSearch.engineSelected.testGetValue()
assertEquals(1, recordedEvents.size)
val eventExtra = recordedEvents.single().extra
assertNotNull(eventExtra)
assertTrue(eventExtra!!.containsKey("engine"))
assertEquals("application", eventExtra["engine"])
assertEquals("history", eventExtra["engine"])
}
@Test
@ -387,6 +391,9 @@ class SearchDialogControllerTest {
val searchEngine: SearchEngine = mockk(relaxed = true)
every { searchEngine.type } returns SearchEngine.Type.APPLICATION
every { searchEngine.id } returns Core.BOOKMARKS_SEARCH_ENGINE_ID
every { settings.showUnifiedSearchFeature } returns true
assertFalse(UnifiedSearch.engineSelected.testHasValue())
var focusToolbarInvoked = false
createController(
@ -398,13 +405,13 @@ class SearchDialogControllerTest {
assertTrue(focusToolbarInvoked)
verify { store.dispatch(SearchFragmentAction.SearchBookmarksEngineSelected(searchEngine)) }
assertTrue(SearchShortcuts.selected.testHasValue())
val recordedEvents = SearchShortcuts.selected.testGetValue()
assertTrue(UnifiedSearch.engineSelected.testHasValue())
val recordedEvents = UnifiedSearch.engineSelected.testGetValue()
assertEquals(1, recordedEvents.size)
val eventExtra = recordedEvents.single().extra
assertNotNull(eventExtra)
assertTrue(eventExtra!!.containsKey("engine"))
assertEquals("application", eventExtra["engine"])
assertEquals("bookmarks", eventExtra["engine"])
}
@Test
@ -412,6 +419,9 @@ class SearchDialogControllerTest {
val searchEngine: SearchEngine = mockk(relaxed = true)
every { searchEngine.type } returns SearchEngine.Type.APPLICATION
every { searchEngine.id } returns Core.TABS_SEARCH_ENGINE_ID
every { settings.showUnifiedSearchFeature } returns true
assertFalse(UnifiedSearch.engineSelected.testHasValue())
var focusToolbarInvoked = false
createController(
@ -423,13 +433,13 @@ class SearchDialogControllerTest {
assertTrue(focusToolbarInvoked)
verify { store.dispatch(SearchFragmentAction.SearchTabsEngineSelected(searchEngine)) }
assertTrue(SearchShortcuts.selected.testHasValue())
val recordedEvents = SearchShortcuts.selected.testGetValue()
assertTrue(UnifiedSearch.engineSelected.testHasValue())
val recordedEvents = UnifiedSearch.engineSelected.testGetValue()
assertEquals(1, recordedEvents.size)
val eventExtra = recordedEvents.single().extra
assertNotNull(eventExtra)
assertTrue(eventExtra!!.containsKey("engine"))
assertEquals("application", eventExtra["engine"])
assertEquals("tabs", eventExtra["engine"])
}
@Test

@ -15,12 +15,16 @@ import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import io.mockk.verify
import mozilla.components.concept.menu.Orientation
import mozilla.components.service.glean.testing.GleanTestRule
import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.test.rule.MainCoroutineRule
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.UnifiedSearch
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.search.SearchDialogFragmentStore
@ -43,6 +47,9 @@ class SearchSelectorToolbarActionTest {
@get:Rule
val coroutinesTestRule = MainCoroutineRule()
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
internal class MockedLifecycleOwner(initialState: Lifecycle.State) : LifecycleOwner {
val lifecycleRegistry = LifecycleRegistry(this).apply {
currentState = initialState
@ -69,10 +76,12 @@ class SearchSelectorToolbarActionTest {
)
)
val view = action.createView(LinearLayout(testContext) as ViewGroup) as SearchSelector
assertFalse(UnifiedSearch.searchMenuTapped.testHasValue())
every { settings.shouldUseBottomToolbar } returns false
view.performClick()
assertTrue(UnifiedSearch.searchMenuTapped.testHasValue())
verify {
menu.menuController.show(view, Orientation.DOWN)
}
@ -80,6 +89,7 @@ class SearchSelectorToolbarActionTest {
every { settings.shouldUseBottomToolbar } returns true
view.performClick()
assertTrue(UnifiedSearch.searchMenuTapped.testHasValue())
verify {
menu.menuController.show(view, Orientation.UP)
}

Loading…
Cancel
Save