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 b103eb0f6..6cbc8ae69 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 @@ -494,6 +494,7 @@ private val Event.wrapper: EventWrapper<*>? is Event.InteractWithSearchURLArea -> null is Event.ClearedPrivateData -> null is Event.DismissedOnboarding -> null + is Event.FennecToFenixMigrated -> null } class GleanMetricsService(private val context: Context) : MetricsService { diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/LeanplumMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/LeanplumMetricsService.kt index 3c1de96d4..8744325c8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/LeanplumMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/LeanplumMetricsService.kt @@ -30,6 +30,7 @@ private val Event.name: String? is Event.SyncAuthSignOut -> "E_Sign_Out_FxA" is Event.ClearedPrivateData -> "E_Cleared_Private_Data" is Event.DismissedOnboarding -> "E_Dismissed_Onboarding" + is Event.FennecToFenixMigrated -> "E_Fennec_To_Fenix_Migrated" // Do not track other events in Leanplum else -> "" diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt index 8a40fbd26..4e0059021 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt @@ -149,6 +149,7 @@ sealed class Event { object RightsTapped : Event() object LicensingTapped : Event() object LibrariesThatWeUseTapped : Event() + object FennecToFenixMigrated : Event() // Interaction events with extras diff --git a/app/src/main/java/org/mozilla/fenix/migration/MigrationTelemetryListener.kt b/app/src/main/java/org/mozilla/fenix/migration/MigrationTelemetryListener.kt new file mode 100644 index 000000000..ffd148426 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/migration/MigrationTelemetryListener.kt @@ -0,0 +1,32 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix + +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.collect +import mozilla.components.lib.state.ext.flowScoped +import mozilla.components.support.base.log.logger.Logger +import mozilla.components.support.migration.state.MigrationProgress +import mozilla.components.support.migration.state.MigrationStore +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController + +class MigrationTelemetryListener( + private val metrics: MetricController, + private val store: MigrationStore +) { + @UseExperimental(ExperimentalCoroutinesApi::class) + fun start() { + // Observe for migration completed. + store.flowScoped { flow -> + flow.collect { state -> + Logger("MigrationTelemetryListener").debug("Migration state: ${state.progress}") + if (state.progress == MigrationProgress.COMPLETED) { + metrics.track(Event.FennecToFenixMigrated) + } + } + } + } +} diff --git a/app/src/migration/java/org/mozilla/fenix/MigratingFenixApplication.kt b/app/src/migration/java/org/mozilla/fenix/MigratingFenixApplication.kt index 5439fddb6..8ff88f9dd 100644 --- a/app/src/migration/java/org/mozilla/fenix/MigratingFenixApplication.kt +++ b/app/src/migration/java/org/mozilla/fenix/MigratingFenixApplication.kt @@ -42,6 +42,13 @@ class MigratingFenixApplication : FenixApplication() { ) } + val migrationTelemetryListener by lazy { + MigrationTelemetryListener( + components.analytics.metrics, + components.migrationStore + ) + } + override fun setupInMainProcessOnly() { // These migrations need to run before regular initialization happens. migrateBlocking() @@ -55,6 +62,7 @@ class MigratingFenixApplication : FenixApplication() { // The rest of the migrations can happen now. migrationPushSubscriber.start() + migrationTelemetryListener.start() migrator.startMigrationIfNeeded(components.migrationStore, MigrationService::class.java) } diff --git a/docs/mma.md b/docs/mma.md index c3729b55c..26f33e1c6 100644 --- a/docs/mma.md +++ b/docs/mma.md @@ -226,6 +226,11 @@ Here is the list of current Events sent, which can be found here in the code bas The user finished onboarding. Could be triggered by pressing "start browsing," opening settings, or invoking a search. #3459 + + `E_Fennec_To_Fenix_Migrated` + The user has just migrated from Fennec to Fenix. + #8208 + Deep links