From 65a4442d8951fb386ec4508835798e8ac708ce90 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Wed, 23 Nov 2022 11:42:28 -0500 Subject: [PATCH] update for pr feedback and add sync login event --- app/build.gradle | 1 + .../org/mozilla/fenix/helpers/Experimentation.kt | 5 ++--- .../java/org/mozilla/fenix/ui/NimbusEventTest.kt | 16 +++++++++++++++- .../main/java/org/mozilla/fenix/HomeActivity.kt | 1 + .../fenix/components/BackgroundServices.kt | 14 ++++++++------ build.gradle | 2 ++ buildSrc/src/main/java/Dependencies.kt | 1 + 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4d5e9064d..42be1a20b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -659,6 +659,7 @@ dependencies { testImplementation 'org.apache.maven:maven-ant-tasks:2.1.3' implementation Deps.mozilla_support_rusthttp + androidTestImplementation Deps.mockk_android testImplementation Deps.mockk // For the initial release of Glean 19, we require consumer applications to diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt index c357b8f43..953549032 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt @@ -5,12 +5,11 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.TestHelper.appContext object Experimentation { - private val nimbus = + val experiments = appContext.components.analytics.experiments fun withHelper(block: GleanPlumbMessageHelper.() -> Unit) { - val helper = nimbus.createMessageHelper() + val helper = experiments.createMessageHelper() block(helper) } - } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 6ad368d05..195980a10 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -3,17 +3,21 @@ package org.mozilla.fenix.ui import android.content.Intent import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import mozilla.components.concept.sync.* import okhttp3.mockwebserver.MockWebServer import org.junit.* +import org.mozilla.fenix.components.TelemetryAccountObserver import org.mozilla.fenix.helpers.* +import org.mozilla.fenix.helpers.TestHelper.appContext import org.mozilla.fenix.ui.robots.homeScreen +import io.mockk.mockk class NimbusEventTest { private lateinit var mDevice: UiDevice private lateinit var mockWebServer: MockWebServer @get:Rule - val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() + val homeActivityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() .withIntent(Intent().apply { action = Intent.ACTION_VIEW }) @@ -45,4 +49,14 @@ class NimbusEventTest { Assert.assertTrue(evalJexl("'app_opened'|eventSum('Days', 28, 0) > 0")) } } + + @Test + fun telemetryAccountObserverTest() { + val observer = TelemetryAccountObserver(appContext) + observer.onAuthenticated(mockk(), AuthType.Signin) + + Experimentation.withHelper { + Assert.assertTrue(evalJexl("'sync_auth_sign_in'|eventSum('Days', 28, 0) > 0")) + } + } } diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index fa5b10fa7..a7adc5f26 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -278,6 +278,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { ?.let(::getIntentSource) ?.also { Events.appOpened.record(Events.AppOpenedExtra(it)) + // This will record an event in Nimbus' internal event store. Used for behavioral targeting components.analytics.experiments.recordEvent("app_opened") } } diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index 508fdd246..e4c5efa0b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -46,7 +46,6 @@ import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.StrictModeManager import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.sync.SyncedTabsIntegration -import org.mozilla.fenix.utils.Settings /** * Component group for background services. These are the components that need to be accessed from within a @@ -127,7 +126,7 @@ class BackgroundServices( } private val telemetryAccountObserver = TelemetryAccountObserver( - context.settings(), + context ) val accountAbnormalities = AccountAbnormalities(context, crashReporter, strictMode) @@ -219,13 +218,16 @@ private class AccountManagerReadyObserver( @VisibleForTesting(otherwise = PRIVATE) internal class TelemetryAccountObserver( - private val settings: Settings, + private val context: Context ) : AccountObserver { override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { - settings.signedInFxaAccount = true + context.settings().signedInFxaAccount = true when (authType) { // User signed-in into an existing FxA account. - AuthType.Signin -> SyncAuth.signIn.record(NoExtras()) + AuthType.Signin -> { + SyncAuth.signIn.record(NoExtras()) + context.components.analytics.experiments.recordEvent("sync_auth_sign_in") + } // User created a new FxA account. AuthType.Signup -> SyncAuth.signUp.record(NoExtras()) @@ -254,6 +256,6 @@ internal class TelemetryAccountObserver( override fun onLoggedOut() { SyncAuth.signOut.record(NoExtras()) - settings.signedInFxaAccount = false + context.settings().signedInFxaAccount = false } } diff --git a/build.gradle b/build.gradle index 3241aff78..0baaebd0e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ import org.mozilla.fenix.gradle.tasks.GithubDetailsTask buildscript { // This logic is duplicated in the allprojects block: I don't know how to fix that. repositories { + mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" @@ -81,6 +82,7 @@ plugins { allprojects { // This logic is duplicated in the buildscript block: I don't know how to fix that. repositories { + mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index cb1e5b7f0..2b3f7dbdc 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -227,6 +227,7 @@ object Deps { const val junit = "junit:junit:${Versions.junit}" const val mockk = "io.mockk:mockk:${Versions.mockk}" + const val mockk_android = "io.mockk:mockk-android:${Versions.mockk}" // --- START AndroidX test dependencies --- // // N.B.: the versions of these dependencies appear to be pinned together. To avoid bugs, they