From e3b6e0033148872e9f03473159e9957e1c7fdfda Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 9 Nov 2021 12:19:35 -0500 Subject: [PATCH] Close #22223: Move to the selected page when switching modes --- .../org/mozilla/fenix/tabstray/TabLayoutMediator.kt | 3 +++ .../org/mozilla/fenix/tabstray/TabsTrayFragment.kt | 1 + .../mozilla/fenix/tabstray/TabLayoutMediatorTest.kt | 11 +++++++---- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabLayoutMediator.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabLayoutMediator.kt index 4bfeabe2bc..060b1fbf95 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabLayoutMediator.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabLayoutMediator.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.tabstray import androidx.annotation.VisibleForTesting +import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayout import mozilla.components.browser.state.store.BrowserStore import mozilla.components.support.base.feature.LifecycleAwareFeature @@ -21,6 +22,7 @@ import org.mozilla.fenix.utils.Do */ class TabLayoutMediator( private val tabLayout: TabLayout, + private val tabPager: ViewPager2, interactor: TabsTrayInteractor, private val browsingModeManager: BrowsingModeManager, private val tabsTrayStore: TabsTrayStore, @@ -55,6 +57,7 @@ class TabLayoutMediator( fun selectTabAtPosition(position: Int) { tabLayout.getTabAt(position)?.select() + tabPager.setCurrentItem(position, false) tabsTrayStore.dispatch(TabsTrayAction.PageSelected(Page.positionToPage(position))) } } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt index adf9d79da9..df584e229f 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt @@ -254,6 +254,7 @@ class TabsTrayFragment : AppCompatDialogFragment() { tabLayoutMediator.set( feature = TabLayoutMediator( tabLayout = tabsTrayBinding.tabLayout, + tabPager = tabsTrayBinding.tabsTray, interactor = tabsTrayInteractor, browsingModeManager = activity.browsingModeManager, tabsTrayStore = tabsTrayStore, diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/TabLayoutMediatorTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/TabLayoutMediatorTest.kt index e3c57249e9..df35b46e0a 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/TabLayoutMediatorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/TabLayoutMediatorTest.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.tabstray +import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayout import io.mockk.every import io.mockk.mockk @@ -23,10 +24,11 @@ class TabLayoutMediatorTest { private val metrics: MetricController = mockk(relaxed = true) private val tabLayout: TabLayout = mockk(relaxed = true) private val tab: TabLayout.Tab = mockk(relaxed = true) + private val viewPager: ViewPager2 = mockk(relaxed = true) @Test fun `page to normal tab position when mode is also normal`() { - val mediator = TabLayoutMediator(tabLayout, interactor, modeManager, tabsTrayStore, metrics) + val mediator = TabLayoutMediator(tabLayout, viewPager, interactor, modeManager, tabsTrayStore, metrics) every { modeManager.mode }.answers { BrowsingMode.Normal } every { tabLayout.getTabAt(POSITION_NORMAL_TABS) }.answers { tab } @@ -34,12 +36,13 @@ class TabLayoutMediatorTest { mediator.selectActivePage() verify { tab.select() } + verify { viewPager.setCurrentItem(POSITION_NORMAL_TABS, false) } verify { tabsTrayStore.dispatch(TabsTrayAction.PageSelected(Page.positionToPage(POSITION_NORMAL_TABS))) } } @Test fun `page to private tab position when mode is also private`() { - val mediator = TabLayoutMediator(tabLayout, interactor, modeManager, tabsTrayStore, metrics) + val mediator = TabLayoutMediator(tabLayout, viewPager, interactor, modeManager, tabsTrayStore, metrics) every { modeManager.mode }.answers { BrowsingMode.Private } every { tabLayout.getTabAt(POSITION_PRIVATE_TABS) }.answers { tab } @@ -52,7 +55,7 @@ class TabLayoutMediatorTest { @Test fun `selectTabAtPosition will dispatch the correct TabsTrayStore action`() { - val mediator = TabLayoutMediator(tabLayout, interactor, modeManager, tabsTrayStore, metrics) + val mediator = TabLayoutMediator(tabLayout, viewPager, interactor, modeManager, tabsTrayStore, metrics) every { tabLayout.getTabAt(POSITION_NORMAL_TABS) }.answers { tab } every { tabLayout.getTabAt(POSITION_PRIVATE_TABS) }.answers { tab } @@ -73,7 +76,7 @@ class TabLayoutMediatorTest { @Test fun `lifecycle methods adds and removes observer`() { - val mediator = TabLayoutMediator(tabLayout, interactor, modeManager, tabsTrayStore, metrics) + val mediator = TabLayoutMediator(tabLayout, viewPager, interactor, modeManager, tabsTrayStore, metrics) every { modeManager.mode }.answers { BrowsingMode.Private }