/* 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.components import android.app.Application import android.app.PendingIntent import android.content.Context import android.content.Intent import mozilla.components.lib.crash.CrashReporter 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 org.mozilla.fenix.BuildConfig import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.AdjustMetricsService import org.mozilla.fenix.components.metrics.GleanMetricsService import org.mozilla.fenix.components.metrics.LeanplumMetricsService import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.settings import org.mozilla.fenix.test.Mockable import org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID import org.mozilla.geckoview.BuildConfig.MOZ_APP_VENDOR import org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION /** * Component group for all functionality related to analytics e.g. crash reporting and telemetry. */ @Mockable class Analytics( private val context: Context ) { val crashReporter: CrashReporter by lazy { val services = mutableListOf() if (isSentryEnabled()) { val sentryService = SentryService( context, BuildConfig.SENTRY_TOKEN, tags = mapOf("geckoview" to "$MOZ_APP_VERSION-$MOZ_APP_BUILDID"), environment = BuildConfig.BUILD_TYPE, sendEventForNativeCrashes = true ) services.add(sentryService) } services.add(GleanCrashReporterService(context)) // The name "Fenix" here matches the product name on Socorro and is unrelated to the actual app name: // https://bugzilla.mozilla.org/show_bug.cgi?id=1523284 val socorroService = MozillaSocorroService(context, appName = "Fenix", version = MOZ_APP_VERSION, buildId = MOZ_APP_BUILDID, vendor = MOZ_APP_VENDOR) services.add(socorroService) val intent = Intent(context, HomeActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP } val pendingIntent = PendingIntent.getActivity( context, 0, intent, 0 ) CrashReporter( services = services, shouldPrompt = CrashReporter.Prompt.ALWAYS, promptConfiguration = CrashReporter.PromptConfiguration( appName = context.getString(R.string.app_name), organizationName = "Mozilla" ), enabled = true, nonFatalCrashIntent = pendingIntent ) } val metrics: MetricController by lazy { MetricController.create( listOf( GleanMetricsService(context), LeanplumMetricsService(context as Application), AdjustMetricsService(context) ), isDataTelemetryEnabled = { context.settings().isTelemetryEnabled }, isMarketingDataTelemetryEnabled = { context.settings().isMarketingTelemetryEnabled } ) } } fun isSentryEnabled() = !BuildConfig.SENTRY_TOKEN.isNullOrEmpty()