Closes #19847: Add telemetry for the default browser notification

upstream-sync
Roger Yang 3 years ago committed by mergify[bot]
parent 81849ec6d0
commit c4347a9492

@ -178,6 +178,19 @@ events:
notification_emails:
- android-probes@mozilla.com
expires: "2021-10-01"
default_browser_notif_tapped:
type: event
description: |
User tapped on the default browser notification
bugs:
- https://github.com/mozilla-mobile/fenix/issues/19847
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/20311
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: "2022-08-01"
toolbar_menu_visible:
type: event
description: |

@ -161,7 +161,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
StartSearchIntentProcessor(components.analytics.metrics),
OpenBrowserIntentProcessor(this, ::getIntentSessionId),
OpenSpecificTabIntentProcessor(this),
DefaultBrowserIntentProcessor(this)
DefaultBrowserIntentProcessor(this, components.analytics.metrics)
)
}

@ -164,6 +164,7 @@ sealed class Event {
object OnboardingPrivateBrowsing : Event()
object OnboardingFinish : Event()
object ChangedToDefaultBrowser : Event()
object DefaultBrowserNotifTapped : Event()
object LoginDialogPromptDisplayed : Event()
object LoginDialogPromptCancelled : Event()

@ -197,6 +197,9 @@ private val Event.wrapper: EventWrapper<*>?
is Event.ChangedToDefaultBrowser -> EventWrapper<NoExtraKeys>(
{ Events.defaultBrowserChanged.record(it) }
)
is Event.DefaultBrowserNotifTapped -> EventWrapper<NoExtraKeys>(
{ Events.defaultBrowserNotifTapped.record(it) }
)
is Event.OpenedBookmark -> EventWrapper<NoExtraKeys>(
{ BookmarksManagement.open.record(it) }
)

@ -7,6 +7,8 @@ package org.mozilla.fenix.home.intent
import android.content.Intent
import androidx.navigation.NavController
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.openSetDefaultBrowserOption
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker.Companion.isDefaultBrowserNotificationIntent
@ -18,13 +20,14 @@ import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker.Companion.i
* notification, [settings.shouldShowDefaultBrowserNotification] will return false
*/
class DefaultBrowserIntentProcessor(
private val activity: HomeActivity
private val activity: HomeActivity,
private val metrics: MetricController
) : HomeIntentProcessor {
override fun process(intent: Intent, navController: NavController, out: Intent): Boolean {
return if (isDefaultBrowserNotificationIntent(intent)) {
activity.openSetDefaultBrowserOption()
metrics.track(Event.DefaultBrowserNotifTapped)
true
} else {
false

@ -259,4 +259,15 @@ class GleanMetricsServiceTest {
gleanService.track(Event.TabsTrayCfrTapped)
assertTrue(TabsTrayCfr.goToSettings.testHasValue())
}
@Test
fun `default browser events are correctly recorded`() {
assertFalse(Events.defaultBrowserChanged.testHasValue())
gleanService.track(Event.ChangedToDefaultBrowser)
assertTrue(Events.defaultBrowserChanged.testHasValue())
assertFalse(Events.defaultBrowserNotifTapped.testHasValue())
gleanService.track(Event.DefaultBrowserNotifTapped)
assertTrue(Events.defaultBrowserNotifTapped.testHasValue())
}
}

@ -15,6 +15,7 @@ import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class)
@ -24,7 +25,8 @@ class DefaultBrowserIntentProcessorTest {
fun `do not process blank intents`() {
val navController: NavController = mockk()
val out: Intent = mockk()
val result = DefaultBrowserIntentProcessor(mockk()).process(Intent(), navController, out)
val result = DefaultBrowserIntentProcessor(mockk(), mockk())
.process(Intent(), navController, out)
assertFalse(result)
verify { navController wasNot Called }
@ -36,16 +38,20 @@ class DefaultBrowserIntentProcessorTest {
val navController: NavController = mockk(relaxed = true)
val out: Intent = mockk()
val activity: HomeActivity = mockk()
val metrics: MetricController = mockk()
val intent = Intent().apply {
putExtra("org.mozilla.fenix.default.browser.intent", true)
}
every { activity.startActivity(any()) } returns Unit
every { activity.applicationContext } returns testContext
every { metrics.track(any()) } returns Unit
val result = DefaultBrowserIntentProcessor(activity).process(intent, navController, out)
val result = DefaultBrowserIntentProcessor(activity, metrics)
.process(intent, navController, out)
assert(result)
verify { metrics.track(any()) }
verify { navController wasNot Called }
verify { out wasNot Called }
}

Loading…
Cancel
Save