From 776d90ed0b0c4323e73a56135eb9be43f2690fa5 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Wed, 10 Jan 2024 11:44:59 +0100 Subject: [PATCH] Move isTelemetryEnabled to GleanMetricsService --- .../org/mozilla/focus/utils/AdjustHelper.java | 4 +- .../mozilla/focus/activity/MainActivity.kt | 1 - .../focus/fragment/UrlInputFragment.kt | 2 +- .../focus/telemetry/GleanMetricsService.kt | 41 ++++++++++++++++--- .../focus/widget/TelemetrySwitchPreference.kt | 13 +----- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/mobile/android/focus-android/app/src/focusRelease/java/org/mozilla/focus/utils/AdjustHelper.java b/mobile/android/focus-android/app/src/focusRelease/java/org/mozilla/focus/utils/AdjustHelper.java index a1c9834561a9..8181faf397d9 100644 --- a/mobile/android/focus-android/app/src/focusRelease/java/org/mozilla/focus/utils/AdjustHelper.java +++ b/mobile/android/focus-android/app/src/focusRelease/java/org/mozilla/focus/utils/AdjustHelper.java @@ -16,7 +16,7 @@ import org.mozilla.focus.BuildConfig; import org.mozilla.focus.FocusApplication; -import org.mozilla.focus.telemetry.TelemetryWrapper; +import org.mozilla.focus.telemetry.GleanMetricsService; public class AdjustHelper { public static void setupAdjustIfNeeded(FocusApplication application) { @@ -27,7 +27,7 @@ public static void setupAdjustIfNeeded(FocusApplication application) { throw new IllegalStateException("No adjust token defined for release build"); } - if (!TelemetryWrapper.isTelemetryEnabled(application)) { + if (!GleanMetricsService.isTelemetryEnabled(application)) { return; } diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/activity/MainActivity.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/activity/MainActivity.kt index 1946cecf3705..23e27b794552 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/activity/MainActivity.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/activity/MainActivity.kt @@ -309,7 +309,6 @@ open class MainActivity : LocaleAwareAppCompatActivity() { } private fun processEraseAction(intent: SafeIntent) { - val fromShortcut = intent.getBooleanExtra(EXTRA_SHORTCUT, false) val fromNotificationAction = intent.getBooleanExtra(EXTRA_NOTIFICATION, false) components.tabsUseCases.removeAllTabs() diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/UrlInputFragment.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/UrlInputFragment.kt index f3fe43ac482b..9614ab02d70b 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/UrlInputFragment.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/UrlInputFragment.kt @@ -540,7 +540,7 @@ class UrlInputFragment : private fun onSearch( query: String, - isSuggestion: Boolean = false, + @Suppress("UNUSED_PARAMETER") isSuggestion: Boolean = false, alwaysSearch: Boolean = false, ) { if (alwaysSearch) { diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt index 93f11b2aacc9..216449e9535b 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt @@ -7,8 +7,10 @@ package org.mozilla.focus.telemetry import android.content.Context import android.os.Build import android.os.RemoteException +import android.os.StrictMode import androidx.annotation.VisibleForTesting import androidx.core.app.NotificationManagerCompat +import androidx.preference.PreferenceManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers.IO @@ -23,10 +25,10 @@ import mozilla.components.support.base.log.logger.Logger import mozilla.telemetry.glean.Glean import mozilla.telemetry.glean.config.Configuration import org.mozilla.focus.BuildConfig +import org.mozilla.focus.R import org.mozilla.focus.Components import org.mozilla.focus.GleanMetrics.Browser import org.mozilla.focus.GleanMetrics.GleanBuildInfo -import org.mozilla.focus.GleanMetrics.LegacyIds import org.mozilla.focus.GleanMetrics.Metrics import org.mozilla.focus.GleanMetrics.MozillaProducts import org.mozilla.focus.GleanMetrics.Notifications @@ -36,10 +38,9 @@ import org.mozilla.focus.GleanMetrics.Shortcuts import org.mozilla.focus.GleanMetrics.TrackingProtection import org.mozilla.focus.ext.components import org.mozilla.focus.ext.settings -import org.mozilla.focus.telemetry.TelemetryWrapper.isTelemetryEnabled import org.mozilla.focus.topsites.DefaultTopSitesStorage.Companion.TOP_SITES_MAX_LIMIT +import org.mozilla.focus.utils.AppConstants import org.mozilla.focus.utils.Settings -import java.util.UUID /** * Glean telemetry service. @@ -51,6 +52,37 @@ class GleanMetricsService(context: Context) : MetricsService { @Suppress("UnusedPrivateMember") private val activationPing = ActivationPing(context) + companion object { + private val isEnabledByDefault: Boolean + get() = !AppConstants.isKlarBuild + + private fun isDeviceWithTelemetryDisabled(): Boolean { + val brand = "blackberry" + val device = "bbf100" + + return Build.BRAND == brand && Build.DEVICE == device + } + + @JvmStatic + fun isTelemetryEnabled(context: Context): Boolean { + if (isDeviceWithTelemetryDisabled()) { return false } + + // The first access to shared preferences will require a disk read. + val threadPolicy = StrictMode.allowThreadDiskReads() + try { + val resources = context.resources + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + + return preferences.getBoolean( + resources.getString(R.string.pref_key_telemetry), + isEnabledByDefault, + ) && !AppConstants.isDevBuild + } finally { + StrictMode.setThreadPolicy(threadPolicy) + } + } + } + @OptIn(DelicateCoroutinesApi::class) override fun initialize(context: Context) { val components = context.components @@ -81,9 +113,6 @@ class GleanMetricsService(context: Context) : MetricsService { // Wait for preferences to be collected before we send the activation ping. collectPrefMetricsAsync(components, settings, context).await() - // Set the client ID in Glean as part of the deletion-request. - LegacyIds.clientId.set(UUID.fromString(TelemetryWrapper.clientId)) - components.store.waitForSelectedOrDefaultSearchEngine { searchEngine -> if (searchEngine != null) { Browser.defaultSearchEngine.set(getDefaultSearchEngineIdentifierForTelemetry(context)) diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/widget/TelemetrySwitchPreference.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/widget/TelemetrySwitchPreference.kt index 5c141330ba83..10ecb0023642 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/widget/TelemetrySwitchPreference.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/widget/TelemetrySwitchPreference.kt @@ -9,9 +9,8 @@ import android.util.AttributeSet import mozilla.components.service.glean.Glean import org.mozilla.focus.R import org.mozilla.focus.settings.LearnMoreSwitchPreference -import org.mozilla.focus.telemetry.TelemetryWrapper +import org.mozilla.focus.telemetry.GleanMetricsService import org.mozilla.focus.utils.SupportUtils -import org.mozilla.telemetry.TelemetryHolder /** * Switch preference for enabling/disabling telemetry @@ -20,21 +19,13 @@ internal class TelemetrySwitchPreference(context: Context, attrs: AttributeSet?) LearnMoreSwitchPreference(context, attrs) { init { - isChecked = TelemetryWrapper.isTelemetryEnabled(context) + isChecked = GleanMetricsService.isTelemetryEnabled(context) } override fun onClick() { super.onClick() - TelemetryHolder.get() - .configuration.isUploadEnabled = isChecked Glean.setUploadEnabled(isChecked) - - if (isChecked) { - TelemetryWrapper.startSession() - } else { - TelemetryWrapper.stopSession() - } } override fun getDescription(): String {