diff --git a/app/metrics.yaml b/app/metrics.yaml index 1b9c7d722afd..cd73efd1ae12 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -480,6 +480,26 @@ events: notification_emails: - android-probes@mozilla.com expires: "2021-12-10" + tab_view_changed: + type: event + description: | + Indicates that the user has changed their tab view + settings, either from the default or by personal + preference. + extra_keys: + type: + description: | + A string containing the name of the tab view the user tapped. + These items include: list or grid. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/19956 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/19959#issuecomment-859227308 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-05-10" onboarding: fxa_auto_signin: 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 261744a36c5f..acb1480339fc 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 @@ -628,6 +628,13 @@ sealed class Event { get() = mapOf(Autoplay.settingChangedKeys.autoplaySetting to setting.toString().toLowerCase(Locale.ROOT)) } + data class TabViewSettingChanged(val type: Type) : Event() { + enum class Type { LIST, GRID } + + override val extras: Map? + get() = mapOf(Events.tabViewChangedKeys.type to type.toString().toLowerCase(Locale.ROOT)) + } + sealed class Search internal open val extras: Map<*, String>? 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 01d916ea6579..ef6573dc1526 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 @@ -837,6 +837,10 @@ private val Event.wrapper: EventWrapper<*>? is Event.HomeScreenDisplayed -> EventWrapper( { HomeScreen.homeScreenDisplayed.record(it) } ) + is Event.TabViewSettingChanged -> EventWrapper( + { Events.tabViewChanged.record(it) }, + { Events.tabViewChangedKeys.valueOf(it) } + ) is Event.BrowserToolbarHomeButtonClicked -> EventWrapper( { Events.browserToolbarHomeTapped.record(it) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt index b99be769ac20..4451a90e9e3f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt @@ -32,6 +32,9 @@ open class RadioButtonPreference @JvmOverloads constructor( private var defaultValue: Boolean = false private var clickListener: (() -> Unit)? = null + val isChecked: Boolean + get() = radioButton?.isChecked == true + init { layoutResource = R.layout.preference_widget_radiobutton diff --git a/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt index 982b67e22254..cd81a01bd831 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt @@ -9,6 +9,8 @@ import android.view.View import androidx.preference.PreferenceFragmentCompat import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.Event.TabViewSettingChanged +import org.mozilla.fenix.components.metrics.Event.TabViewSettingChanged.Type import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.utils.view.addToRadioGroup @@ -60,6 +62,9 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { startOnHomeRadioAlways = requirePreference(R.string.pref_key_start_on_home_always) startOnHomeRadioNever = requirePreference(R.string.pref_key_start_on_home_never) + listRadioButton.onClickListener(::sendTabViewTelemetry) + gridRadioButton.onClickListener(::sendTabViewTelemetry) + setupRadioGroups() } @@ -82,4 +87,14 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { startOnHomeRadioNever ) } + + private fun sendTabViewTelemetry() { + val metrics = requireContext().components.analytics.metrics + + if (listRadioButton.isChecked && !gridRadioButton.isChecked) { + metrics.track(TabViewSettingChanged(Type.LIST)) + } else { + metrics.track(TabViewSettingChanged(Type.GRID)) + } + } }