For #21239 add telemetry for Allow users to customize their home screen

upstream-sync
Arturo Mejia 3 years ago
parent 6f7f284b55
commit 3272de1364

@ -1264,6 +1264,116 @@ metrics:
- mcomella@mozilla.com
expires: "2022-02-01"
customize_home:
most_visited_sites:
type: boolean
description: >
An indication of whether the most visited sites
are enabled to be displayed
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21239
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
jump_back_in:
type: boolean
description: >
An indication of whether the Jump back
in section is enabled to be displayed
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21239
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
recently_saved:
type: boolean
description: >
An indication of whether the recently
saved section is enabled to be displayed
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21239
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
recently_visited:
type: boolean
description: >
An indication of whether the Recently
visited section is enabled to be displayed
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21239
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
pocket:
type: boolean
description: >
An indication of whether Pocket is enabled to be displayed
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21239
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
preference_toggled:
type: event
description: >
A user toggles the preference for the home screen items.
extra_keys:
preference_key:
description: |
The preference key for the boolean (true/false) preference the user
toggled.
We currently track: most_visited_sites, jump_back_in,
recently_visited, recently_saved, and pocket.
enabled:
description: "Whether or not the preference is *now* enabled"
bugs:
- https://github.com/mozilla-mobile/fenix/issues/21095
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/1896
data_sensitivity:
- technical
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
preferences:
search_suggestions_enabled:
type: boolean
@ -4906,6 +5016,19 @@ home_screen:
notification_emails:
- android-probes@mozilla.com
expires: "2022-04-01"
customize_home_clicked:
type: event
description: A user clicked on Customize home from the home screen menu.
bugs:
- https://github.com/mozilla-mobile/fenix/pull/21344
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/21344
- https://github.com/mozilla-mobile/fenix/pull/21344#issuecomment-923198787
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-09-20"
android_keystore_experiment:
experiment_failure:

@ -70,6 +70,7 @@ import mozilla.components.feature.search.ext.waitForSelectedOrDefaultSearchEngin
import mozilla.components.service.fxa.manager.SyncEnginesStorage
import org.mozilla.fenix.GleanMetrics.Addons
import org.mozilla.fenix.GleanMetrics.AndroidAutofill
import org.mozilla.fenix.GleanMetrics.CustomizeHome
import org.mozilla.fenix.GleanMetrics.Preferences
import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine
import org.mozilla.fenix.components.Core
@ -689,6 +690,11 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
}
)
}
CustomizeHome.jumpBackIn.set(settings.showRecentTabsFeature)
CustomizeHome.recentlySaved.set(settings.showRecentBookmarksFeature)
CustomizeHome.mostVisitedSites.set(settings.showTopFrecentSites)
CustomizeHome.recentlyVisited.set(settings.historyMetadataUIFeature)
CustomizeHome.pocket.set(settings.pocketRecommendations)
}
protected fun recordOnInit() {

@ -202,6 +202,7 @@ sealed class Event {
// Home menu interaction
object HomeMenuSettingsItemClicked : Event()
object HomeScreenDisplayed : Event()
object HomeScreenCustomizedHomeClicked : Event()
// Browser Toolbar
object BrowserToolbarHomeButtonClicked : Event()
@ -337,6 +338,31 @@ sealed class Event {
}
}
data class CustomizeHomePreferenceToggled(
val preferenceKey: String,
val enabled: Boolean,
val context: Context
) : Event() {
private val booleanPreferenceTelemetryAllowList = listOf(
context.getString(R.string.pref_key_enable_top_frecent_sites),
context.getString(R.string.pref_key_recent_tabs),
context.getString(R.string.pref_key_recent_bookmarks),
context.getString(R.string.pref_key_pocket_homescreen_recommendations),
context.getString(R.string.pref_key_history_metadata_feature)
)
override val extras: Map<Events.preferenceToggledKeys, String>?
get() = mapOf(
Events.preferenceToggledKeys.preferenceKey to 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(booleanPreferenceTelemetryAllowList.contains(preferenceKey))
}
}
data class AddonsOpenInToolbarMenu(val addonId: String) : Event() {
override val extras: Map<Addons.openAddonInToolbarMenuKeys, String>?
get() = hashMapOf(Addons.openAddonInToolbarMenuKeys.addonId to addonId)

@ -22,6 +22,7 @@ import org.mozilla.fenix.GleanMetrics.ContextualMenu
import org.mozilla.fenix.GleanMetrics.CrashReporter
import org.mozilla.fenix.GleanMetrics.CreditCards
import org.mozilla.fenix.GleanMetrics.CustomTab
import org.mozilla.fenix.GleanMetrics.CustomizeHome
import org.mozilla.fenix.GleanMetrics.ErrorPage
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.ExperimentsDefaultBrowser
@ -281,6 +282,10 @@ 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<NoExtraKeys>(
{ History.opened.record(it) }
)
@ -703,6 +708,9 @@ private val Event.wrapper: EventWrapper<*>?
is Event.HomeScreenDisplayed -> EventWrapper<NoExtraKeys>(
{ HomeScreen.homeScreenDisplayed.record(it) }
)
is Event.HomeScreenCustomizedHomeClicked -> EventWrapper<NoExtraKeys>(
{ HomeScreen.customizeHomeClicked.record(it) }
)
is Event.TabViewSettingChanged -> EventWrapper(
{ Events.tabViewChanged.record(it) },
{ Events.tabViewChangedKeys.valueOf(it) }

@ -846,6 +846,7 @@ class HomeFragment : Fragment() {
requireComponents.analytics.metrics.track(Event.HomeMenuSettingsItemClicked)
}
HomeMenu.Item.CustomizeHome -> {
context.metrics.track(Event.HomeScreenCustomizedHomeClicked)
hideOnboardingIfNeeded()
nav(
R.id.homeFragment,

@ -460,6 +460,7 @@ class DefaultSessionControlController(
override fun handleCustomizeHomeTapped() {
val directions = HomeFragmentDirections.actionGlobalCustomizationFragment()
navController.nav(R.id.homeFragment, directions)
metrics.track(Event.HomeScreenCustomizedHomeClicked)
}
override fun handleWhatsNewGetAnswersClicked() {

@ -9,6 +9,7 @@ import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import org.mozilla.fenix.FeatureFlags
@ -142,31 +143,31 @@ class CustomizationFragment : PreferenceFragmentCompat() {
private fun setupHomeCategory() {
requirePreference<SwitchPreference>(R.string.pref_key_enable_top_frecent_sites).apply {
isChecked = context.settings().showTopFrecentSites
onPreferenceChangeListener = SharedPreferenceUpdater()
onPreferenceChangeListener = CustomizeHomeMetricsUpdater()
}
requirePreference<SwitchPreference>(R.string.pref_key_recent_tabs).apply {
isVisible = FeatureFlags.showRecentTabsFeature
isChecked = context.settings().showRecentTabsFeature
onPreferenceChangeListener = SharedPreferenceUpdater()
onPreferenceChangeListener = CustomizeHomeMetricsUpdater()
}
requirePreference<SwitchPreference>(R.string.pref_key_recent_bookmarks).apply {
isVisible = FeatureFlags.recentBookmarksFeature
isChecked = context.settings().showRecentBookmarksFeature
onPreferenceChangeListener = SharedPreferenceUpdater()
onPreferenceChangeListener = CustomizeHomeMetricsUpdater()
}
requirePreference<SwitchPreference>(R.string.pref_key_pocket_homescreen_recommendations).apply {
isVisible = false
isChecked = context.settings().pocketRecommendations
onPreferenceChangeListener = SharedPreferenceUpdater()
onPreferenceChangeListener = CustomizeHomeMetricsUpdater()
}
requirePreference<SwitchPreference>(R.string.pref_key_history_metadata_feature).apply {
isVisible = FeatureFlags.historyMetadataUIFeature
isChecked = context.settings().historyMetadataUIFeature
onPreferenceChangeListener = SharedPreferenceUpdater()
onPreferenceChangeListener = CustomizeHomeMetricsUpdater()
}
}
@ -185,4 +186,22 @@ class CustomizationFragment : PreferenceFragmentCompat() {
onPreferenceChangeListener = SharedPreferenceUpdater()
}
}
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)
}
}
}

@ -21,6 +21,7 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.Addons
import org.mozilla.fenix.GleanMetrics.CustomizeHome
import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.GleanMetrics.Preferences
import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine
@ -117,6 +118,11 @@ class FenixApplicationTest {
every { settings.touchExplorationIsEnabled } returns true
every { settings.shouldUseLightTheme } returns true
every { settings.signedInFxaAccount } returns true
every { settings.showRecentTabsFeature } returns true
every { settings.showRecentBookmarksFeature } returns true
every { settings.showTopFrecentSites } returns true
every { settings.historyMetadataUIFeature } returns true
every { settings.pocketRecommendations } returns true
application.setStartupMetrics(browserStore, settings, browsersCache, mozillaProductDetector)
@ -152,7 +158,11 @@ class FenixApplicationTest {
assertEquals("fixed_top", Preferences.toolbarPositionSetting.testGetValue())
assertEquals("standard", Preferences.enhancedTrackingProtection.testGetValue())
assertEquals(listOf("switch", "touch exploration"), Preferences.accessibilityServices.testGetValue())
assertEquals("light", Preferences.userTheme.testGetValue())
assertEquals(true, CustomizeHome.jumpBackIn.testGetValue())
assertEquals(true, CustomizeHome.recentlySaved.testGetValue())
assertEquals(true, CustomizeHome.mostVisitedSites.testGetValue())
assertEquals(true, CustomizeHome.recentlyVisited.testGetValue())
assertEquals(true, CustomizeHome.pocket.testGetValue())
// Verify that search engine defaults are NOT set. This test does
// not mock most of the objects telemetry is collected from.

@ -165,6 +165,7 @@ class DefaultSessionControlControllerTest {
@Test
fun handleCustomizeHomeTapped() {
createController().handleCustomizeHomeTapped()
verify { metrics.track(Event.HomeScreenCustomizedHomeClicked) }
verify {
navController.navigate(

Loading…
Cancel
Save