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 1cd0aff11..11b6d528c 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 @@ -242,6 +242,12 @@ private val Event.wrapper: EventWrapper<*>? is Event.SyncAccountSyncNow -> EventWrapper( { SyncAccount.syncNow.record(it) } ) + is Event.SignInToSendTab -> EventWrapper( + { SyncAccount.signInToSendTab.record(it) } + ) + is Event.SendTab -> EventWrapper( + { SyncAccount.sendTab.record(it) } + ) is Event.PreferenceToggled -> EventWrapper( { Events.preferenceToggled.record(it) }, { Events.preferenceToggledKeys.valueOf(it) } 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 8ca18090a..1cd13bc35 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 @@ -71,6 +71,8 @@ sealed class Event { object SyncAccountOpened : Event() object SyncAccountClosed : Event() object SyncAccountSyncNow : Event() + object SendTab : Event() + object SignInToSendTab : Event() object HistoryOpened : Event() object HistoryItemShared : Event() object HistoryItemOpened : Event() diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareController.kt b/app/src/main/java/org/mozilla/fenix/share/ShareController.kt index fb3b6b9b6..f56740289 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareController.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareController.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.share +import android.content.Context import android.content.Intent import android.content.Intent.ACTION_SEND import android.content.Intent.EXTRA_TEXT @@ -16,6 +17,8 @@ import mozilla.components.concept.sync.Device import mozilla.components.concept.sync.TabData import mozilla.components.feature.sendtab.SendTabUseCases import org.mozilla.fenix.R +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.share.listadapters.AppShareOption @@ -43,6 +46,7 @@ interface ShareController { * @param dismiss - callback signalling sharing can be closed. */ class DefaultShareController( + private val context: Context, private val fragment: Fragment, private val sharedTabs: List, private val sendTabUseCases: SendTabUseCases, @@ -73,6 +77,7 @@ class DefaultShareController( } override fun handleShareToDevice(device: Device) { + context.metrics.track(Event.SendTab) sendTabUseCases.sendToDeviceAsync(device.id, sharedTabs.toTabData()) (fragment.activity as ShareFragment.TabsSharedCallback).onTabsShared(sharedTabs.size) dismiss() @@ -85,6 +90,7 @@ class DefaultShareController( } override fun handleSignIn() { + context.metrics.track(Event.SignInToSendTab) val directions = ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment() navController.nav(R.id.shareFragment, directions) dismiss() diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt index 83b716e14..293c98773 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt @@ -86,6 +86,7 @@ class ShareFragment : AppCompatDialogFragment() { shareInteractor = ShareInteractor( DefaultShareController( + context = requireContext(), fragment = this, sharedTabs = tabs, navController = findNavController(), diff --git a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt index 22bd3d192..9cb1a9800 100644 --- a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.share +import android.content.Context import android.content.Intent import androidx.fragment.app.Fragment import androidx.navigation.NavController @@ -24,11 +25,15 @@ import mozilla.components.concept.sync.Device import mozilla.components.concept.sync.DeviceType import mozilla.components.concept.sync.TabData import mozilla.components.feature.sendtab.SendTabUseCases +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.TestApplication +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController +import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.share.listadapters.AppShareOption import org.robolectric.RobolectricTestRunner @@ -38,6 +43,8 @@ import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @Config(application = TestApplication::class) class ShareControllerTest { + private val context: Context = mockk(relaxed = true) + private val metrics: MetricController = mockk(relaxed = true) private val fragment = mockk(relaxed = true) private val shareTabs = listOf( ShareTab("url0", "title0"), @@ -52,7 +59,12 @@ class ShareControllerTest { private val sendTabUseCases = mockk(relaxed = true) private val navController = mockk(relaxed = true) private val dismiss = mockk<() -> Unit>(relaxed = true) - private val controller = DefaultShareController(fragment, shareTabs, sendTabUseCases, navController, dismiss) + private val controller = DefaultShareController(context, fragment, shareTabs, sendTabUseCases, navController, dismiss) + + @Before + fun setUp() { + every { context.metrics } returns metrics + } @Test fun `handleShareClosed should call a passed in delegate to close this`() { @@ -102,6 +114,7 @@ class ShareControllerTest { // Verify all the needed methods are called. verifyOrder { + metrics.track(Event.SendTab) sendTabUseCases.sendToDeviceAsync(capture(deviceId), capture(tabsShared)) tabSharedCallbackActivity.onTabsShared(capture(sharedTabsNumber)) dismiss() @@ -153,6 +166,7 @@ class ShareControllerTest { controller.handleSignIn() verifyOrder { + metrics.track(Event.SignInToSendTab) navController.nav( R.id.shareFragment, ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment()