From 940af156ebb2886be1ae2adbff534a376cb8917f Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Wed, 27 Oct 2021 17:40:35 -0400 Subject: [PATCH] For #22192 add telemetry for studies --- app/metrics.yaml | 29 +++++++++++++++++++ .../org/mozilla/fenix/FenixApplication.kt | 1 + .../mozilla/fenix/components/metrics/Event.kt | 1 + .../components/metrics/GleanMetricsService.kt | 3 ++ .../fenix/settings/studies/StudiesFragment.kt | 4 ++- .../fenix/settings/studies/StudiesView.kt | 6 +++- .../org/mozilla/fenix/FenixApplicationTest.kt | 2 ++ .../fenix/settings/studies/StudiesViewTest.kt | 10 +++---- 8 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 8fc52d776..f76b0b813 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1413,6 +1413,35 @@ customize_home: expires: "2022-09-20" preferences: + studies_enabled: + type: boolean + description: > + A metric indicating whether or not the user has studies enabled + default: true + send_in_pings: + - metrics + bugs: + - https://github.com/mozilla-mobile/fenix/issues/22192 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/22193 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-11-01" + studies_preference_enabled: + type: event + description: > + An event indicating whether or not the user has studies enabled. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/22192 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/22193 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-11-01" search_suggestions_enabled: type: boolean description: | diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 17ef09e88..a83cc23fe 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -652,6 +652,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { with(Preferences) { searchSuggestionsEnabled.set(settings.shouldShowSearchSuggestions) remoteDebuggingEnabled.set(settings.isRemoteDebuggingEnabled) + studiesEnabled.set(settings.isExperimentationEnabled) telemetryEnabled.set(settings.isTelemetryEnabled) browsingHistorySuggestion.set(settings.shouldShowHistorySuggestions) bookmarksSuggestion.set(settings.shouldShowBookmarkSuggestions) 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 b4e7df8dc..b23191450 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 @@ -162,6 +162,7 @@ sealed class Event { } object FennecToFenixMigrated : Event() object AddonsOpenInSettings : Event() + object StudiesSettings : Event() object VoiceSearchTapped : Event() object SearchWidgetInstalled : Event() object OnboardingAutoSignIn : Event() 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 ad3955c03..91f94de4d 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 @@ -524,6 +524,9 @@ private val Event.wrapper: EventWrapper<*>? is Event.AddonsOpenInSettings -> EventWrapper( { Addons.openAddonsInSettings.record(it) } ) + is Event.StudiesSettings -> EventWrapper( + { Preferences.studiesPreferenceEnabled.record(it) } + ) is Event.AddonsOpenInToolbarMenu -> EventWrapper( { Addons.openAddonInToolbarMenu.record(it) }, { Addons.openAddonInToolbarMenuKeys.valueOf(it) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesFragment.kt index f45c0344b..1a168f741 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesFragment.kt @@ -12,6 +12,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.databinding.SettingsStudiesBinding +import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings @@ -39,7 +40,8 @@ class StudiesFragment : Fragment() { interactor, requireContext().settings(), experiments, - ::isAttached + ::isAttached, + requireContext().metrics ).bind() return binding.root diff --git a/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesView.kt b/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesView.kt index 362b010c3..b5ac2a38f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/studies/StudiesView.kt @@ -24,6 +24,8 @@ import mozilla.components.service.nimbus.NimbusApi import mozilla.components.support.base.log.logger.Logger import org.mozilla.experiments.nimbus.internal.EnrolledExperiment import org.mozilla.fenix.R +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.databinding.SettingsStudiesBinding import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.settings @@ -40,7 +42,8 @@ class StudiesView( private val interactor: StudiesInteractor, private val settings: Settings, private val experiments: NimbusApi, - private val isAttached: () -> Boolean + private val isAttached: () -> Boolean, + private val metrics: MetricController ) : StudiesAdapterDelegate { private val logger = Logger("StudiesView") @@ -53,6 +56,7 @@ class StudiesView( provideStudiesSwitch().isChecked = settings.isExperimentationEnabled provideStudiesSwitch().setOnClickListener { val isChecked = provideStudiesSwitch().isChecked + metrics.track(Event.StudiesSettings) provideStudiesTitle().text = getSwitchCheckedTitle() val builder = AlertDialog.Builder(context) .setPositiveButton( diff --git a/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt b/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt index dab743caa..4ba2fa27c 100644 --- a/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt +++ b/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt @@ -108,6 +108,7 @@ class FenixApplicationTest { every { settings.shouldUseTrackingProtection } returns true every { settings.isRemoteDebuggingEnabled } returns true every { settings.isTelemetryEnabled } returns true + every { settings.isExperimentationEnabled } returns true every { settings.shouldShowHistorySuggestions } returns true every { settings.shouldShowBookmarkSuggestions } returns true every { settings.shouldShowClipboardSuggestions } returns true @@ -154,6 +155,7 @@ class FenixApplicationTest { assertEquals(true, Preferences.searchSuggestionsEnabled.testGetValue()) assertEquals(true, Preferences.remoteDebuggingEnabled.testGetValue()) assertEquals(true, Preferences.telemetryEnabled.testGetValue()) + assertEquals(true, Preferences.studiesEnabled.testGetValue()) assertEquals(true, Preferences.browsingHistorySuggestion.testGetValue()) assertEquals(true, Preferences.bookmarksSuggestion.testGetValue()) assertEquals(true, Preferences.clipboardSuggestionsEnabled.testGetValue()) diff --git a/app/src/test/java/org/mozilla/fenix/settings/studies/StudiesViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/studies/StudiesViewTest.kt index d1ced96f2..3fc1b094d 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/studies/StudiesViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/studies/StudiesViewTest.kt @@ -18,6 +18,7 @@ import io.mockk.verify import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.TestCoroutineScope import mozilla.components.service.nimbus.NimbusApi +import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.After @@ -26,15 +27,12 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.experiments.nimbus.internal.EnrolledExperiment -import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.databinding.SettingsStudiesBinding import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class StudiesViewTest { - @RelaxedMockK - private lateinit var activity: HomeActivity @RelaxedMockK private lateinit var experiments: NimbusApi @@ -65,8 +63,10 @@ class StudiesViewTest { binding, interactor, settings, - experiments - ) { true } + experiments, + isAttached = { true }, + metrics = mock() + ) ) }