diff --git a/app/metrics.yaml b/app/metrics.yaml index 278c28d47..50735ac00 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1574,6 +1574,7 @@ customize_home: A user toggles the preference for the home screen items. extra_keys: preference_key: + type: string description: | The preference key for the boolean (true/false) preference the user toggled. @@ -1581,6 +1582,7 @@ customize_home: We currently track: most_visited_sites, jump_back_in, recently_visited, recently_saved, pocket, and contile. enabled: + type: boolean description: "Whether or not the preference is *now* enabled" bugs: - https://github.com/mozilla-mobile/fenix/issues/21095 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 5f037bb57..1fd642920 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 @@ -313,32 +313,6 @@ sealed class Event { } } - data class CustomizeHomePreferenceToggled( - val preferenceKey: String, - val enabled: Boolean, - val context: Context - ) : Event() { - private val telemetryAllowMap = mapOf( - context.getString(R.string.pref_key_show_top_sites) to "most_visited_sites", - context.getString(R.string.pref_key_recent_tabs) to "jump_back_in", - context.getString(R.string.pref_key_recent_bookmarks) to "recently_saved", - context.getString(R.string.pref_key_history_metadata_feature) to "recently_visited", - context.getString(R.string.pref_key_pocket_homescreen_recommendations) to "pocket", - context.getString(R.string.pref_key_enable_contile) to "contile", - ) - - override val extras: Map - get() = mapOf( - Events.preferenceToggledKeys.preferenceKey to (telemetryAllowMap[preferenceKey] ?: ""), - Events.preferenceToggledKeys.enabled to enabled.toString() - ) - - init { - // If the event is not in the allow list, we don't want to track it - require(telemetryAllowMap.contains(preferenceKey)) - } - } - data class AddonsOpenInToolbarMenu(val addonId: String) : Event() { override val extras: Map? get() = hashMapOf(Addons.openAddonInToolbarMenuKeys.addonId to addonId) 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 06597752f..c214ebf85 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 @@ -20,7 +20,6 @@ import org.mozilla.fenix.GleanMetrics.ContextMenu import org.mozilla.fenix.GleanMetrics.ContextualMenu import org.mozilla.fenix.GleanMetrics.CreditCards import org.mozilla.fenix.GleanMetrics.CustomTab -import org.mozilla.fenix.GleanMetrics.CustomizeHome import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.ExperimentsDefaultBrowser import org.mozilla.fenix.GleanMetrics.History @@ -249,10 +248,6 @@ private val Event.wrapper: EventWrapper<*>? { Events.preferenceToggled.record(it) }, { Events.preferenceToggledKeys.valueOf(it) } ) - is Event.CustomizeHomePreferenceToggled -> EventWrapper( - { CustomizeHome.preferenceToggled.record(it) }, - { CustomizeHome.preferenceToggledKeys.valueOf(it) } - ) is Event.HistoryOpened -> EventWrapper( { History.opened.record(it) } ) diff --git a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt index 39b099917..2d335d530 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt @@ -11,9 +11,8 @@ import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import org.mozilla.fenix.FeatureFlags +import org.mozilla.fenix.GleanMetrics.CustomizeHome import org.mozilla.fenix.R -import org.mozilla.fenix.components.metrics.Event -import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.utils.view.addToRadioGroup @@ -36,37 +35,91 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { private fun setupPreferences() { requirePreference(R.string.pref_key_show_top_sites).apply { isChecked = context.settings().showTopSitesFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + CustomizeHome.preferenceToggled.record( + CustomizeHome.PreferenceToggledExtra( + newValue as Boolean, + "most_visited_sites" + ) + ) + + return super.onPreferenceChange(preference, newValue) + } + } } requirePreference(R.string.pref_key_enable_contile).apply { isVisible = FeatureFlags.contileFeature isChecked = context.settings().showContileFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() } requirePreference(R.string.pref_key_recent_tabs).apply { isVisible = FeatureFlags.showRecentTabsFeature isChecked = context.settings().showRecentTabsFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + CustomizeHome.preferenceToggled.record( + CustomizeHome.PreferenceToggledExtra( + newValue as Boolean, + "jump_back_in" + ) + ) + + return super.onPreferenceChange(preference, newValue) + } + } } requirePreference(R.string.pref_key_recent_bookmarks).apply { isVisible = FeatureFlags.recentBookmarksFeature isChecked = context.settings().showRecentBookmarksFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + CustomizeHome.preferenceToggled.record( + CustomizeHome.PreferenceToggledExtra( + newValue as Boolean, + "recently_saved" + ) + ) + + return super.onPreferenceChange(preference, newValue) + } + } } requirePreference(R.string.pref_key_pocket_homescreen_recommendations).apply { isVisible = FeatureFlags.isPocketRecommendationsFeatureEnabled(context) isChecked = context.settings().showPocketRecommendationsFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + CustomizeHome.preferenceToggled.record( + CustomizeHome.PreferenceToggledExtra( + newValue as Boolean, + "pocket" + ) + ) + + return super.onPreferenceChange(preference, newValue) + } + } } requirePreference(R.string.pref_key_history_metadata_feature).apply { isVisible = FeatureFlags.historyMetadataUIFeature isChecked = context.settings().historyMetadataUIFeature - onPreferenceChangeListener = CustomizeHomeMetricsUpdater() + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + CustomizeHome.preferenceToggled.record( + CustomizeHome.PreferenceToggledExtra( + newValue as Boolean, + "recently_visited" + ) + ) + + return super.onPreferenceChange(preference, newValue) + } + } } val openingScreenRadioHomepage = @@ -92,22 +145,4 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { openingScreenAfterFourHours ) } - - inner class CustomizeHomeMetricsUpdater : SharedPreferenceUpdater() { - override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { - try { - val context = preference.context - context.components.analytics.metrics.track( - Event.CustomizeHomePreferenceToggled( - preference.key, - newValue as Boolean, - context - ) - ) - } catch (e: IllegalArgumentException) { - // The event is not tracked - } - return super.onPreferenceChange(preference, newValue) - } - } }