1
0
Fork 0

For #4908: Adds telemetry for send tab

master
Sawyer Blatz 2019-09-04 08:46:34 -07:00 committed by Emily Kager
parent d0ef2d40c2
commit e240de7e31
5 changed files with 30 additions and 1 deletions

View File

@ -242,6 +242,12 @@ private val Event.wrapper: EventWrapper<*>?
is Event.SyncAccountSyncNow -> EventWrapper<NoExtraKeys>( is Event.SyncAccountSyncNow -> EventWrapper<NoExtraKeys>(
{ SyncAccount.syncNow.record(it) } { SyncAccount.syncNow.record(it) }
) )
is Event.SignInToSendTab -> EventWrapper<NoExtraKeys>(
{ SyncAccount.signInToSendTab.record(it) }
)
is Event.SendTab -> EventWrapper<NoExtraKeys>(
{ SyncAccount.sendTab.record(it) }
)
is Event.PreferenceToggled -> EventWrapper( is Event.PreferenceToggled -> EventWrapper(
{ Events.preferenceToggled.record(it) }, { Events.preferenceToggled.record(it) },
{ Events.preferenceToggledKeys.valueOf(it) } { Events.preferenceToggledKeys.valueOf(it) }

View File

@ -71,6 +71,8 @@ sealed class Event {
object SyncAccountOpened : Event() object SyncAccountOpened : Event()
object SyncAccountClosed : Event() object SyncAccountClosed : Event()
object SyncAccountSyncNow : Event() object SyncAccountSyncNow : Event()
object SendTab : Event()
object SignInToSendTab : Event()
object HistoryOpened : Event() object HistoryOpened : Event()
object HistoryItemShared : Event() object HistoryItemShared : Event()
object HistoryItemOpened : Event() object HistoryItemOpened : Event()

View File

@ -4,6 +4,7 @@
package org.mozilla.fenix.share package org.mozilla.fenix.share
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.Intent.ACTION_SEND import android.content.Intent.ACTION_SEND
import android.content.Intent.EXTRA_TEXT 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.concept.sync.TabData
import mozilla.components.feature.sendtab.SendTabUseCases import mozilla.components.feature.sendtab.SendTabUseCases
import org.mozilla.fenix.R 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.ext.nav
import org.mozilla.fenix.share.listadapters.AppShareOption import org.mozilla.fenix.share.listadapters.AppShareOption
@ -43,6 +46,7 @@ interface ShareController {
* @param dismiss - callback signalling sharing can be closed. * @param dismiss - callback signalling sharing can be closed.
*/ */
class DefaultShareController( class DefaultShareController(
private val context: Context,
private val fragment: Fragment, private val fragment: Fragment,
private val sharedTabs: List<ShareTab>, private val sharedTabs: List<ShareTab>,
private val sendTabUseCases: SendTabUseCases, private val sendTabUseCases: SendTabUseCases,
@ -73,6 +77,7 @@ class DefaultShareController(
} }
override fun handleShareToDevice(device: Device) { override fun handleShareToDevice(device: Device) {
context.metrics.track(Event.SendTab)
sendTabUseCases.sendToDeviceAsync(device.id, sharedTabs.toTabData()) sendTabUseCases.sendToDeviceAsync(device.id, sharedTabs.toTabData())
(fragment.activity as ShareFragment.TabsSharedCallback).onTabsShared(sharedTabs.size) (fragment.activity as ShareFragment.TabsSharedCallback).onTabsShared(sharedTabs.size)
dismiss() dismiss()
@ -85,6 +90,7 @@ class DefaultShareController(
} }
override fun handleSignIn() { override fun handleSignIn() {
context.metrics.track(Event.SignInToSendTab)
val directions = ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment() val directions = ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment()
navController.nav(R.id.shareFragment, directions) navController.nav(R.id.shareFragment, directions)
dismiss() dismiss()

View File

@ -86,6 +86,7 @@ class ShareFragment : AppCompatDialogFragment() {
shareInteractor = ShareInteractor( shareInteractor = ShareInteractor(
DefaultShareController( DefaultShareController(
context = requireContext(),
fragment = this, fragment = this,
sharedTabs = tabs, sharedTabs = tabs,
navController = findNavController(), navController = findNavController(),

View File

@ -4,6 +4,7 @@
package org.mozilla.fenix.share package org.mozilla.fenix.share
import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.NavController 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.DeviceType
import mozilla.components.concept.sync.TabData import mozilla.components.concept.sync.TabData
import mozilla.components.feature.sendtab.SendTabUseCases import mozilla.components.feature.sendtab.SendTabUseCases
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.TestApplication 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.ext.nav
import org.mozilla.fenix.share.listadapters.AppShareOption import org.mozilla.fenix.share.listadapters.AppShareOption
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
@ -38,6 +43,8 @@ import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(application = TestApplication::class) @Config(application = TestApplication::class)
class ShareControllerTest { class ShareControllerTest {
private val context: Context = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true)
private val fragment = mockk<Fragment>(relaxed = true) private val fragment = mockk<Fragment>(relaxed = true)
private val shareTabs = listOf( private val shareTabs = listOf(
ShareTab("url0", "title0"), ShareTab("url0", "title0"),
@ -52,7 +59,12 @@ class ShareControllerTest {
private val sendTabUseCases = mockk<SendTabUseCases>(relaxed = true) private val sendTabUseCases = mockk<SendTabUseCases>(relaxed = true)
private val navController = mockk<NavController>(relaxed = true) private val navController = mockk<NavController>(relaxed = true)
private val dismiss = mockk<() -> Unit>(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 @Test
fun `handleShareClosed should call a passed in delegate to close this`() { fun `handleShareClosed should call a passed in delegate to close this`() {
@ -102,6 +114,7 @@ class ShareControllerTest {
// Verify all the needed methods are called. // Verify all the needed methods are called.
verifyOrder { verifyOrder {
metrics.track(Event.SendTab)
sendTabUseCases.sendToDeviceAsync(capture(deviceId), capture(tabsShared)) sendTabUseCases.sendToDeviceAsync(capture(deviceId), capture(tabsShared))
tabSharedCallbackActivity.onTabsShared(capture(sharedTabsNumber)) tabSharedCallbackActivity.onTabsShared(capture(sharedTabsNumber))
dismiss() dismiss()
@ -153,6 +166,7 @@ class ShareControllerTest {
controller.handleSignIn() controller.handleSignIn()
verifyOrder { verifyOrder {
metrics.track(Event.SignInToSendTab)
navController.nav( navController.nav(
R.id.shareFragment, R.id.shareFragment,
ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment() ShareFragmentDirections.actionShareFragmentToTurnOnSyncFragment()