diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
index a932c4089b..5f07c60957 100644
--- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
+++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
@@ -31,6 +31,7 @@ import androidx.navigation.ui.NavigationUI
import kotlinx.android.synthetic.main.activity_home.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
@@ -68,6 +69,7 @@ import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.alreadyOnDestination
import org.mozilla.fenix.ext.components
+import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.resetPoliciesAfter
import org.mozilla.fenix.ext.settings
@@ -243,12 +245,24 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
}
}
+
+ // Launch this on a background thread so as not to affect startup performance
+ lifecycleScope.launch(IO) {
+ if (settings().wasDefaultBrowserOnLastPause != settings().isDefaultBrowser()) {
+ metrics.track(Event.ChangedToDefaultBrowser)
+ }
+ }
}
final override fun onPause() {
if (settings().lastKnownMode.isPrivate) {
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
+
+ if (settings().wasDefaultBrowserOnLastPause != settings().isDefaultBrowser()) {
+ settings().wasDefaultBrowserOnLastPause = settings().isDefaultBrowser()
+ }
+
super.onPause()
// Every time the application goes into the background, it is possible that the user
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 f7cf4f5044..755a3095a1 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
@@ -666,6 +666,7 @@ private val Event.wrapper: EventWrapper<*>?
is Event.FennecToFenixMigrated -> null
is Event.AddonInstalled -> null
is Event.SearchWidgetInstalled -> null
+ is Event.ChangedToDefaultBrowser -> 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 c4b1da1ee0..8675ccb5d2 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
@@ -40,6 +40,7 @@ private val Event.name: String?
is Event.FennecToFenixMigrated -> "E_Fennec_To_Fenix_Migrated"
is Event.AddonInstalled -> "E_Addon_Installed"
is Event.SearchWidgetInstalled -> "E_Search_Widget_Added"
+ is Event.ChangedToDefaultBrowser -> "E_Changed_Default_To_Fenix"
// Do not track other events in Leanplum
else -> 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 697991068f..676ba80a0a 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
@@ -183,6 +183,7 @@ sealed class Event {
object OnboardingPrivateBrowsing : Event()
object OnboardingWhatsNew : Event()
object OnboardingFinish : Event()
+ object ChangedToDefaultBrowser : Event()
object ContextualHintETPDisplayed : Event()
object ContextualHintETPDismissed : Event()
diff --git a/app/src/main/java/org/mozilla/fenix/settings/DefaultBrowserPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/DefaultBrowserPreference.kt
index c2ef16ebb9..2aa21de6ef 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/DefaultBrowserPreference.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/DefaultBrowserPreference.kt
@@ -10,6 +10,8 @@ import android.widget.Switch
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
import org.mozilla.fenix.R
+import org.mozilla.fenix.components.metrics.Event
+import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.utils.BrowsersCache
class DefaultBrowserPreference @JvmOverloads constructor(
diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
index defa8901d3..cac21f0b5b 100644
--- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
+++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
@@ -324,6 +324,15 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = true
)
+ /**
+ * Caches the last known "is default browser" state when the app was paused.
+ * For an up to do date state use `isDefaultBrowser` instead.
+ */
+ var wasDefaultBrowserOnLastPause by booleanPreference(
+ appContext.getPreferenceKey(R.string.pref_key_default_browser),
+ default = isDefaultBrowser()
+ )
+
fun isDefaultBrowser(): Boolean {
val browsers = BrowsersCache.all(appContext)
return browsers.isDefaultBrowser
diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml
index 08f64e202e..56aba91dd5 100644
--- a/app/src/main/res/values/preference_keys.xml
+++ b/app/src/main/res/values/preference_keys.xml
@@ -186,5 +186,7 @@
pref_key_is_in_search_widget_experiment
pref_key_show_search_widget_cfr
+ pref_key_default_browser
+
pref_key_login_exceptions