From 7a3524fae590f895fcad9f682c22fde8f0d96bf9 Mon Sep 17 00:00:00 2001 From: jhugman Date: Wed, 13 Jan 2021 18:26:06 +0000 Subject: [PATCH] SDK-158 Use disabled/no-op version of Nimbus object to eliminate unnecessary Rust call (#17372) r=christian --- .../org/mozilla/fenix/components/Analytics.kt | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) 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 681260bd18..1ef9581fdd 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt @@ -15,7 +15,9 @@ import mozilla.components.lib.crash.service.CrashReporterService import mozilla.components.lib.crash.service.GleanCrashReporterService import mozilla.components.lib.crash.service.MozillaSocorroService import mozilla.components.lib.crash.service.SentryService -import mozilla.components.service.nimbus.Nimbus +import mozilla.components.service.nimbus.NimbusApi +import mozilla.components.service.nimbus.Nimbus as NimbusEnabled +import mozilla.components.service.nimbus.NimbusDisabled import mozilla.components.service.nimbus.NimbusServerSettings import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config @@ -105,32 +107,36 @@ class Analytics( ) } - val experiments by lazyMonitored { - val url: String? = BuildConfig.NIMBUS_ENDPOINT - val serverSettings = if (!url.isNullOrBlank()) { - NimbusServerSettings(url = Uri.parse(url)) - } else { - null - } - Nimbus(context, serverSettings).apply { - if (FeatureFlags.nimbusExperiments) { + val experiments: NimbusApi by lazyMonitored { + if (FeatureFlags.nimbusExperiments) { + // Eventually we'll want to use `NimbusDisabled` when we have no NIMBUS_ENDPOINT. + // but we keep this here to not mix feature flags and how we configure Nimbus. + val url: String? = BuildConfig.NIMBUS_ENDPOINT + val serverSettings = if (!url.isNullOrBlank()) { + NimbusServerSettings(url = Uri.parse(url)) + } else { + null + } + + NimbusEnabled(context, serverSettings).apply { // Global opt out state is stored in Nimbus, and shouldn't be toggled to `true` // from the app unless the user does so from a UI control. // However, the user may have opt-ed out of mako experiments already, so // we should respect that setting here. - val enabled = context.components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { - context.settings().isExperimentationEnabled - } + val enabled = + context.components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { + context.settings().isExperimentationEnabled + } if (!enabled) { globalUserParticipation = enabled } - } - }.apply { - if (FeatureFlags.nimbusExperiments) { + // Nimbus should look after downloading experiment definitions from remote settings // on another thread, and making sure we don't hit the server each time we start. updateExperiments() } + } else { + NimbusDisabled() } } }