Bug 1826453 - Refactor tab page button click metrics

fenix/115.2.0
Noah Bond 1 year ago committed by mergify[bot]
parent 91ea5933d6
commit 04d7b0eb0e

@ -9,13 +9,10 @@ import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.support.base.feature.LifecycleAwareFeature import mozilla.components.support.base.feature.LifecycleAwareFeature
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.TabsTray
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_NORMAL_TABS import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_NORMAL_TABS
import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_PRIVATE_TABS import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_PRIVATE_TABS
import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_SYNCED_TABS import org.mozilla.fenix.tabstray.TrayPagerAdapter.Companion.POSITION_SYNCED_TABS
import org.mozilla.fenix.utils.Do
/** /**
* Selected the selected pager depending on the [BrowserStore] state and synchronizes user actions * Selected the selected pager depending on the [BrowserStore] state and synchronizes user actions
@ -82,12 +79,6 @@ internal class TabLayoutObserver(
} }
interactor.onTrayPositionSelected(tab.position, animate) interactor.onTrayPositionSelected(tab.position, animate)
Do exhaustive when (Page.positionToPage(tab.position)) {
Page.NormalTabs -> TabsTray.normalModeTapped.record(NoExtras())
Page.PrivateTabs -> TabsTray.privateModeTapped.record(NoExtras())
Page.SyncedTabs -> TabsTray.syncedModeTapped.record(NoExtras())
}
} }
override fun onTabUnselected(tab: TabLayout.Tab) = Unit override fun onTabUnselected(tab: TabLayout.Tab) = Unit

@ -266,8 +266,16 @@ class DefaultTabsTrayController(
} }
override fun handleTrayScrollingToPosition(position: Int, smoothScroll: Boolean) { override fun handleTrayScrollingToPosition(position: Int, smoothScroll: Boolean) {
val page = Page.positionToPage(position)
when (page) {
Page.NormalTabs -> TabsTray.normalModeTapped.record(NoExtras())
Page.PrivateTabs -> TabsTray.privateModeTapped.record(NoExtras())
Page.SyncedTabs -> TabsTray.syncedModeTapped.record(NoExtras())
}
selectTabPosition(position, smoothScroll) selectTabPosition(position, smoothScroll)
tabsTrayStore.dispatch(TabsTrayAction.PageSelected(Page.positionToPage(position))) tabsTrayStore.dispatch(TabsTrayAction.PageSelected(page))
} }
/** /**

@ -1066,6 +1066,33 @@ class DefaultTabsTrayControllerTest {
assertEquals("1", snapshot.single().extra?.getValue("tab_count")) assertEquals("1", snapshot.single().extra?.getValue("tab_count"))
} }
@Test
fun `WHEN the normal tabs page button is clicked THEN report the metric`() {
assertNull(TabsTray.normalModeTapped.testGetValue())
createController().handleTrayScrollingToPosition(Page.NormalTabs.ordinal, false)
assertNotNull(TabsTray.normalModeTapped.testGetValue())
}
@Test
fun `WHEN the private tabs page button is clicked THEN report the metric`() {
assertNull(TabsTray.privateModeTapped.testGetValue())
createController().handleTrayScrollingToPosition(Page.PrivateTabs.ordinal, false)
assertNotNull(TabsTray.privateModeTapped.testGetValue())
}
@Test
fun `WHEN the synced tabs page button is clicked THEN report the metric`() {
assertNull(TabsTray.syncedModeTapped.testGetValue())
createController().handleTrayScrollingToPosition(Page.SyncedTabs.ordinal, false)
assertNotNull(TabsTray.syncedModeTapped.testGetValue())
}
private fun createController( private fun createController(
navigateToHomeAndDeleteSession: (String) -> Unit = { }, navigateToHomeAndDeleteSession: (String) -> Unit = { },
selectTabPosition: (Int, Boolean) -> Unit = { _, _ -> }, selectTabPosition: (Int, Boolean) -> Unit = { _, _ -> },

@ -12,13 +12,10 @@ import mozilla.components.service.glean.testing.GleanTestRule
import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.libstate.ext.waitUntilIdle
import mozilla.components.support.test.middleware.CaptureActionsMiddleware import mozilla.components.support.test.middleware.CaptureActionsMiddleware
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Before import org.junit.Before
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.TabsTray
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class) // for gleanTestRule @RunWith(FenixRobolectricTestRunner::class) // for gleanTestRule
@ -40,34 +37,28 @@ class TabLayoutObserverTest {
val observer = TabLayoutObserver(interactor) val observer = TabLayoutObserver(interactor)
val tab = mockk<TabLayout.Tab>() val tab = mockk<TabLayout.Tab>()
every { tab.position } returns 1 every { tab.position } returns 1
assertNull(TabsTray.privateModeTapped.testGetValue())
observer.onTabSelected(tab) observer.onTabSelected(tab)
store.waitUntilIdle() store.waitUntilIdle()
verify { interactor.onTrayPositionSelected(1, false) } verify { interactor.onTrayPositionSelected(1, false) }
assertNotNull(TabsTray.privateModeTapped.testGetValue())
every { tab.position } returns 0 every { tab.position } returns 0
assertNull(TabsTray.normalModeTapped.testGetValue())
observer.onTabSelected(tab) observer.onTabSelected(tab)
store.waitUntilIdle() store.waitUntilIdle()
verify { interactor.onTrayPositionSelected(0, true) } verify { interactor.onTrayPositionSelected(0, true) }
assertNotNull(TabsTray.normalModeTapped.testGetValue())
every { tab.position } returns 2 every { tab.position } returns 2
assertNull(TabsTray.syncedModeTapped.testGetValue())
observer.onTabSelected(tab) observer.onTabSelected(tab)
store.waitUntilIdle() store.waitUntilIdle()
verify { interactor.onTrayPositionSelected(2, true) } verify { interactor.onTrayPositionSelected(2, true) }
assertNotNull(TabsTray.syncedModeTapped.testGetValue())
} }
@Test @Test
@ -75,16 +66,13 @@ class TabLayoutObserverTest {
val observer = TabLayoutObserver(interactor) val observer = TabLayoutObserver(interactor)
val tab = mockk<TabLayout.Tab>() val tab = mockk<TabLayout.Tab>()
every { tab.position } returns 1 every { tab.position } returns 1
assertNull(TabsTray.privateModeTapped.testGetValue())
observer.onTabSelected(tab) observer.onTabSelected(tab)
verify { interactor.onTrayPositionSelected(1, false) } verify { interactor.onTrayPositionSelected(1, false) }
assertNotNull(TabsTray.privateModeTapped.testGetValue())
observer.onTabSelected(tab) observer.onTabSelected(tab)
verify { interactor.onTrayPositionSelected(1, true) } verify { interactor.onTrayPositionSelected(1, true) }
assertNotNull(TabsTray.privateModeTapped.testGetValue())
} }
} }

Loading…
Cancel
Save