diff --git a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt index 561f7856b..5c45217d3 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt @@ -17,7 +17,7 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.GleanMetricsService import org.mozilla.fenix.components.metrics.LeanplumMetricsService -import org.mozilla.fenix.components.metrics.Metrics +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.utils.Settings import org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID import org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION @@ -68,8 +68,8 @@ class Analytics( ) } - val metrics: Metrics by lazy { - Metrics( + val metrics: MetricController by lazy { + MetricController.create( listOf( GleanMetricsService(context), LeanplumMetricsService(context as Application) 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 38a39e912..493e43571 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 @@ -7,14 +7,12 @@ import android.content.Context import mozilla.components.service.glean.Glean import mozilla.components.service.glean.private.NoExtraKeys import mozilla.components.support.utils.Browsers -import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.GleanMetrics.CrashReporter import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.FindInPage import org.mozilla.fenix.GleanMetrics.ContextMenu import org.mozilla.fenix.GleanMetrics.QuickActionSheet import org.mozilla.fenix.GleanMetrics.Metrics -import org.mozilla.fenix.utils.Settings private class EventWrapper>( private val recorder: ((Map?) -> Unit), @@ -109,13 +107,19 @@ private val Event.wrapper } class GleanMetricsService(private val context: Context) : MetricsService { + private var initialized = false + override fun start() { + Glean.setUploadEnabled(true) + if (initialized) return + Glean.initialize(context) - Glean.setUploadEnabled(IsGleanEnabled) Metrics.apply { defaultBrowser.set(Browsers.all(context).isDefaultBrowser) } + + initialized = true } override fun stop() { @@ -127,10 +131,6 @@ class GleanMetricsService(private val context: Context) : MetricsService { } override fun shouldTrack(event: Event): Boolean { - return Settings.getInstance(context).isTelemetryEnabled && event.wrapper != null - } - - companion object { - private const val IsGleanEnabled = BuildConfig.TELEMETRY + return event.wrapper != null } } 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 75b50652c..2d8e60a38 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 @@ -7,6 +7,7 @@ import mozilla.components.support.base.Component import mozilla.components.support.base.facts.Fact import mozilla.components.support.base.facts.FactProcessor import mozilla.components.support.base.facts.Facts +import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.BuildConfig sealed class Event { @@ -144,7 +145,37 @@ interface MetricsService { fun shouldTrack(event: Event): Boolean } -class Metrics(private val services: List, private val isTelemetryEnabled: () -> Boolean) { +interface MetricController { + fun start() + fun stop() + fun track(event: Event) + + companion object { + fun create(services: List, isTelemetryEnabled: () -> Boolean): MetricController { + return if (BuildConfig.TELEMETRY) return ReleaseMetricController(services, isTelemetryEnabled) + else DebugMetricController() + } + } +} + +private class DebugMetricController : MetricController { + override fun start() { + Logger.debug("DebugMetricController: start") + } + + override fun stop() { + Logger.debug("DebugMetricController: stop") + } + + override fun track(event: Event) { + Logger.debug("DebugMetricController: track event: $event") + } +} + +private class ReleaseMetricController( + private val services: List, + private val isTelemetryEnabled: () -> Boolean +) : MetricController { private var initialized = false init { @@ -157,22 +188,22 @@ class Metrics(private val services: List, private val isTelemetr }) } - fun start() { - if (BuildConfig.TELEMETRY && !isTelemetryEnabled.invoke() || initialized) { return } + override fun start() { + if (!isTelemetryEnabled.invoke() || initialized) { return } services.forEach { it.start() } initialized = true } - fun stop() { + override fun stop() { if (!initialized) { return } services.forEach { it.stop() } initialized = false } - fun track(event: Event) { - if (BuildConfig.TELEMETRY && !isTelemetryEnabled.invoke() && !initialized) { return } + override fun track(event: Event) { + if (!isTelemetryEnabled.invoke() && !initialized) { return } services .filter { it.shouldTrack(event) }