diff --git a/app/metrics.yaml b/app/metrics.yaml index 6e68a0a55..2d260371f 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -64,6 +64,23 @@ events: notification_emails: - telemetry-client-dev@mozilla.com expires: "2020-03-01" + browser_menu_action: + type: event + description: > + A browser menu item was tapped + extra_keys: + item: + description: > + A string containing the name of the item the user tapped. These items include: + Settings, Your library, Help, Desktop Site toggle on/off, Find in Page, New Tab, + Private Tab, Share, Report Site Issue, Back/Forward button, Reload Button + bugs: + - 1024 + data_reviews: + - TBD + notification_emails: + - telemetry-client-dev@mozilla.com + expires: "2020-03-01" ss_menu_opened: type: event description: > diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index bfd6470f2..dd04b83ae 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -49,6 +49,7 @@ import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.FindInPageIntegration import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.Event.BrowserMenuItemTapped.Item import org.mozilla.fenix.components.toolbar.SearchAction import org.mozilla.fenix.components.toolbar.SearchState import org.mozilla.fenix.components.toolbar.ToolbarComponent @@ -279,7 +280,10 @@ class BrowserFragment : Fragment(), BackHandler { Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER) ) } - is SearchAction.ToolbarMenuItemTapped -> handleToolbarItemInteraction(it) + is SearchAction.ToolbarMenuItemTapped -> { + trackToolbarItemInteraction(it) + handleToolbarItemInteraction(it) + } } } @@ -352,6 +356,29 @@ class BrowserFragment : Fragment(), BackHandler { promptsFeature.withFeature { it.onActivityResult(requestCode, resultCode, data) } } + // This method triggers the complexity warning. However it's actually not that hard to understand. + @SuppressWarnings("ComplexMethod") + private fun trackToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) { + val item = when (action.item) { + ToolbarMenu.Item.Back -> Item.BACK + ToolbarMenu.Item.Forward -> Item.FORWARD + ToolbarMenu.Item.Reload -> Item.RELOAD + ToolbarMenu.Item.Stop -> Item.STOP + ToolbarMenu.Item.Settings -> Item.SETTINGS + ToolbarMenu.Item.Library -> Item.LIBRARY + is ToolbarMenu.Item.RequestDesktop -> + if (action.item.isChecked) Item.DESKTOP_VIEW_ON else Item.DESKTOP_VIEW_OFF + ToolbarMenu.Item.NewPrivateTab -> Item.NEW_PRIVATE_TAB + ToolbarMenu.Item.FindInPage -> Item.FIND_IN_PAGE + ToolbarMenu.Item.ReportIssue -> Item.REPORT_SITE_ISSUE + ToolbarMenu.Item.Help -> Item.HELP + ToolbarMenu.Item.NewTab -> Item.NEW_TAB + ToolbarMenu.Item.OpenInFenix -> Item.OPEN_IN_FENIX + ToolbarMenu.Item.Share -> Item.SHARE + } + + requireComponents.analytics.metrics.track(Event.BrowserMenuItemTapped(item)) + } // This method triggers the complexity warning. However it's actually not that hard to understand. @SuppressWarnings("ComplexMethod") private fun handleToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) { 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 fa9eaa3dc..7f87246ae 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 @@ -8,7 +8,10 @@ import mozilla.components.service.glean.Glean import mozilla.components.service.glean.metrics.NoExtraKeys import mozilla.components.support.utils.Browsers import org.mozilla.fenix.BuildConfig -import org.mozilla.fenix.GleanMetrics.* +import org.mozilla.fenix.GleanMetrics.CrashReporter +import org.mozilla.fenix.GleanMetrics.Events +import org.mozilla.fenix.GleanMetrics.FindInPage +import org.mozilla.fenix.GleanMetrics.ContextMenu import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.utils.Settings @@ -35,7 +38,6 @@ private class EventWrapper>( private val Event.wrapper get() = when (this) { - is Event.OpenedApp -> EventWrapper( { Events.appOpened.record(it) }, { Events.appOpenedKeys.valueOf(it) } @@ -78,6 +80,10 @@ private val Event.wrapper { CrashReporter.closed }, { CrashReporter.closedKeys.valueOf(it) } ) + is Event.BrowserMenuItemTapped -> EventWrapper( + { Events.browserMenuAction }, + { Events.browserMenuActionKeys.valueOf(it) } + ) // Don't track other events with Glean else -> null diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt index a8beb52fa..b0e1f52e0 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt @@ -105,6 +105,16 @@ sealed class Event { get() = mapOf("crash_submitted" to crashSubmitted.toString()) } + data class BrowserMenuItemTapped(val item: Item) : Event() { + enum class Item { + SETTINGS, LIBRARY, HELP, DESKTOP_VIEW_ON, DESKTOP_VIEW_OFF, FIND_IN_PAGE, NEW_TAB, + NEW_PRIVATE_TAB, SHARE, REPORT_SITE_ISSUE, BACK, FORWARD, RELOAD, STOP, OPEN_IN_FENIX + } + + override val extras: Map? + get() = mapOf("item" to item.toString().toLowerCase()) + } + open val extras: Map? get() = null }