diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt index 8f5d1505a..3d7a6ae03 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt @@ -5,7 +5,9 @@ package org.mozilla.fenix.ui import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before @@ -72,6 +74,7 @@ class TabbedBrowsingTest { }.openHomeScreen { } homeScreen { + mDevice.wait(Until.findObject(By.res("R.id.item_tab")), TestAssetHelper.waitingTime) verifyExistingTabList() }.openTabsListThreeDotMenu { @@ -100,6 +103,7 @@ class TabbedBrowsingTest { verifyPageContent(defaultWebPage.content) verifyTabCounter("1") }.openHomeScreen { + mDevice.wait(Until.findObject(By.res("R.id.item_tab")), TestAssetHelper.waitingTime) verifyExistingTabList() verifyShareTabsButton(true) verifyCloseTabsButton(true) @@ -127,6 +131,7 @@ class TabbedBrowsingTest { }.openHomeScreen { } homeScreen { + mDevice.wait(Until.findObject(By.res("R.id.item_tab")), TestAssetHelper.waitingTime) verifyExistingTabList() }.openTabsListThreeDotMenu { verifyCloseAllTabsButton() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt index 63fced716..90ec973dc 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt @@ -67,6 +67,11 @@ class BrowserRobot { tabsCounter().click() + mDevice.wait( + Until.findObject(By.res("R.id.header_text")), + TestAssetHelper.waitingTime + ) + HomeScreenRobot().interact() return HomeScreenRobot.Transition() } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibraryRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibraryRobot.kt index 407722bf8..4fc609c3f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibraryRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibraryRobot.kt @@ -15,8 +15,11 @@ import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.uiautomator.UiDevice import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.By +import androidx.test.uiautomator.Until import org.hamcrest.CoreMatchers.allOf import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.click /** @@ -48,6 +51,7 @@ class LibraryRobot { } fun openBookmarks(interact: BookmarksRobot.() -> Unit): BookmarksRobot.Transition { + mDevice.wait(Until.findObject(By.text("Bookmarks")), TestAssetHelper.waitingTime) bookmarksButton().click() BookmarksRobot().interact() @@ -55,6 +59,7 @@ class LibraryRobot { } fun openHistory(interact: HistoryRobot.() -> Unit): HistoryRobot.Transition { + mDevice.wait(Until.findObject(By.text("History")), TestAssetHelper.waitingTime) historyButton().click() HistoryRobot().interact() @@ -62,15 +67,19 @@ class LibraryRobot { } } } + private fun goBackButton() = onView(allOf(withContentDescription("Navigate up"))) private fun closeButton() = onView(withId(R.id.libraryClose)) private fun bookmarksButton() = onView(allOf(withText("Bookmarks"))) private fun historyButton() = onView(allOf(withText("History"))) private fun assertLibraryView() { - onView(allOf( + onView( + allOf( withText("Library"), - ViewMatchers.withParent(withId(R.id.navigationToolbar)))) + ViewMatchers.withParent(withId(R.id.navigationToolbar)) + ) + ) .check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index a702debe6..cb1312a2a 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -13,11 +13,13 @@ import android.view.ViewGroup import androidx.annotation.CallSuper import androidx.appcompat.app.AppCompatActivity import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.graphics.drawable.toDrawable import androidx.core.net.toUri import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import androidx.navigation.NavDirections import androidx.navigation.fragment.findNavController import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.component_search.* @@ -74,6 +76,7 @@ import org.mozilla.fenix.downloads.DownloadService import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.enterToImmersiveMode import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings import org.mozilla.fenix.isInExperiment @@ -166,7 +169,10 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs findNavController(), (activity as HomeActivity).browsingModeManager, findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } }, + browserLayout = view.browserLayout, engineView = engineView, + swipeRefresh = swipeRefresh, + adjustBackgroundAndNavigate = ::adjustBackgroundAndNavigate, customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }, viewModel = viewModel, getSupportUrl = { @@ -393,6 +399,18 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs } } + private fun adjustBackgroundAndNavigate(directions: NavDirections) { + context?.let { + engineView.captureThumbnail { bitmap -> + lifecycleScope.launch { + swipeRefresh?.background = bitmap?.toDrawable(it.resources) + engineView.asView().visibility = View.GONE + findNavController().nav(R.id.browserFragment, directions) + } + } + } + } + @CallSuper override fun onSessionSelected(session: Session) { (activity as HomeActivity).updateThemeForSession(session) @@ -509,7 +527,10 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs session: Session? ): BrowserToolbarViewInteractor - protected abstract fun navToQuickSettingsSheet(session: Session, sitePermissions: SitePermissions?) + protected abstract fun navToQuickSettingsSheet( + session: Session, + sitePermissions: SitePermissions? + ) protected abstract fun navToTrackingProtectionPanel(session: Session) @@ -526,7 +547,12 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs protected fun updateLayoutMargins(inFullScreen: Boolean) { view?.swipeRefresh?.apply { val (topMargin, bottomMargin) = if (inFullScreen) 0 to 0 else getEngineMargins() - (layoutParams as CoordinatorLayout.LayoutParams).setMargins(0, topMargin, 0, bottomMargin) + (layoutParams as CoordinatorLayout.LayoutParams).setMargins( + 0, + topMargin, + 0, + bottomMargin + ) } } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt index f6a5976d7..c80571d6b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserInteractor.kt @@ -17,6 +17,10 @@ open class BrowserToolbarInteractor( private val browserToolbarController: BrowserToolbarController ) : BrowserToolbarViewInteractor { + override fun onTabCounterClicked() { + browserToolbarController.handleTabCounterClick() + } + override fun onBrowserToolbarPaste(text: String) { browserToolbarController.handleToolbarPaste(text) } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt index e4f56d684..7fb85f29b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt @@ -6,9 +6,17 @@ package org.mozilla.fenix.components.toolbar import android.app.Activity import android.content.Intent +import android.view.View +import android.view.ViewGroup +import androidx.annotation.VisibleForTesting +import androidx.core.graphics.drawable.toDrawable import androidx.core.widget.NestedScrollView import androidx.lifecycle.LifecycleCoroutineScope import androidx.navigation.NavController +import androidx.navigation.NavDirections +import androidx.navigation.NavOptions +import androidx.navigation.fragment.FragmentNavigator +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.bottomsheet.BottomSheetBehavior import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.MainScope @@ -40,14 +48,19 @@ interface BrowserToolbarController { fun handleToolbarPasteAndGo(text: String) fun handleToolbarItemInteraction(item: ToolbarMenu.Item) fun handleToolbarClick() + fun handleTabCounterClick() } +@Suppress("LargeClass") class DefaultBrowserToolbarController( private val activity: Activity, private val navController: NavController, private val browsingModeManager: BrowsingModeManager, private val findInPageLauncher: () -> Unit, + private val browserLayout: ViewGroup, private val engineView: EngineView, + private val adjustBackgroundAndNavigate: (NavDirections) -> Unit, + private val swipeRefresh: SwipeRefreshLayout, private val customTabSession: Session?, private val viewModel: CreateCollectionViewModel, private val getSupportUrl: () -> String, @@ -60,8 +73,7 @@ class DefaultBrowserToolbarController( get() = customTabSession ?: activity.components.core.sessionManager.selectedSession override fun handleToolbarPaste(text: String) { - navController.nav( - R.id.browserFragment, + adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( sessionId = currentSession?.id, pastedText = text @@ -84,12 +96,15 @@ class DefaultBrowserToolbarController( activity.components.analytics.metrics.track( Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER) ) - navController.nav( - R.id.browserFragment, + adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(currentSession?.id) ) } + override fun handleTabCounterClick() { + animateTabAndNavigateHome() + } + @ExperimentalCoroutinesApi @ObsoleteCoroutinesApi @SuppressWarnings("ComplexMethod", "LongMethod") @@ -102,12 +117,10 @@ class DefaultBrowserToolbarController( ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke(currentSession) ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke(currentSession) ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke(currentSession) - ToolbarMenu.Item.Settings -> navController.nav( - R.id.browserFragment, + ToolbarMenu.Item.Settings -> adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment() ) - ToolbarMenu.Item.Library -> navController.nav( - R.id.browserFragment, + ToolbarMenu.Item.Library -> adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToLibraryFragment() ) is ToolbarMenu.Item.RequestDesktop -> sessionUseCases.requestDesktopSite.invoke( @@ -120,7 +133,8 @@ class DefaultBrowserToolbarController( if (isInstallable()) { addToHomescreen() } else { - val directions = BrowserFragmentDirections.actionBrowserFragmentToCreateShortcutFragment() + val directions = + BrowserFragmentDirections.actionBrowserFragmentToCreateShortcutFragment() navController.navigate(directions) } } @@ -137,14 +151,14 @@ class DefaultBrowserToolbarController( val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( sessionId = null ) - navController.nav(R.id.browserFragment, directions) + adjustBackgroundAndNavigate.invoke(directions) browsingModeManager.mode = BrowsingMode.Normal } ToolbarMenu.Item.NewPrivateTab -> { val directions = BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( sessionId = null ) - navController.nav(R.id.browserFragment, directions) + adjustBackgroundAndNavigate.invoke(directions) browsingModeManager.mode = BrowsingMode.Private } ToolbarMenu.Item.FindInPage -> { @@ -174,7 +188,8 @@ class DefaultBrowserToolbarController( ) viewModel.previousFragmentId = R.id.browserFragment - val directions = BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment() + val directions = + BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment() navController.nav(R.id.browserFragment, directions) } } @@ -196,6 +211,31 @@ class DefaultBrowserToolbarController( } } + private fun animateTabAndNavigateHome() { + // We need to dynamically add the options here because if you do it in XML it overwrites + val options = NavOptions.Builder().setPopUpTo(R.id.nav_graph, false) + .setEnterAnim(R.anim.fade_in).build() + val extras = FragmentNavigator.Extras.Builder().addSharedElement( + browserLayout, + "${TAB_ITEM_TRANSITION_NAME}${currentSession?.id}" + ).build() + engineView.captureThumbnail { bitmap -> + scope.launch { + swipeRefresh.background = bitmap?.toDrawable(activity.resources) + engineView.asView().visibility = View.GONE + if (!navController.popBackStack(R.id.homeFragment, false)) { + navController.nav( + R.id.browserFragment, + R.id.action_browserFragment_to_homeFragment, + null, + options, + extras + ) + } + } + } + } + @SuppressWarnings("ComplexMethod") private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) { val eventItem = when (item) { @@ -228,6 +268,8 @@ class DefaultBrowserToolbarController( } companion object { + @VisibleForTesting + const val TAB_ITEM_TRANSITION_NAME = "tab_item" internal const val TELEMETRY_BROWSER_IDENTIFIER = "browserMenu" } } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt index 78aa0ff33..106756982 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt @@ -30,6 +30,7 @@ interface BrowserToolbarViewInteractor { fun onBrowserToolbarPasteAndGo(text: String) fun onBrowserToolbarClicked() fun onBrowserToolbarMenuItemTapped(item: ToolbarMenu.Item) + fun onTabCounterClicked() } class BrowserToolbarView( @@ -55,8 +56,10 @@ class BrowserToolbarView( view.setOnUrlLongClickListener { val clipboard = view.context.components.clipboardHandler - val customView = LayoutInflater.from(view.context).inflate(R.layout.browser_toolbar_popup_window, null) - val popupWindow = PopupWindow(customView, + val customView = LayoutInflater.from(view.context) + .inflate(R.layout.browser_toolbar_popup_window, null) + val popupWindow = PopupWindow( + customView, LinearLayout.LayoutParams.WRAP_CONTENT, view.context.dimen(R.dimen.context_menu_height), true @@ -64,10 +67,12 @@ class BrowserToolbarView( val selectedSession = container.context.components.core.sessionManager.selectedSession - popupWindow.elevation = view.context.dimen(R.dimen.mozac_browser_menu_elevation).toFloat() + popupWindow.elevation = + view.context.dimen(R.dimen.mozac_browser_menu_elevation).toFloat() customView.paste.isVisible = !clipboard.text.isNullOrEmpty() && !isCustomTabSession - customView.paste_and_go.isVisible = !clipboard.text.isNullOrEmpty() && !isCustomTabSession + customView.paste_and_go.isVisible = + !clipboard.text.isNullOrEmpty() && !isCustomTabSession customView.copy.setOnClickListener { popupWindow.dismiss() @@ -88,7 +93,12 @@ class BrowserToolbarView( interactor.onBrowserToolbarPasteAndGo(clipboard.text!!) } - popupWindow.showAsDropDown(view, view.context.dimen(R.dimen.context_menu_x_offset), 0, Gravity.START) + popupWindow.showAsDropDown( + view, + view.context.dimen(R.dimen.context_menu_x_offset), + 0, + Gravity.START + ) true } @@ -152,13 +162,13 @@ class BrowserToolbarView( toolbarIntegration = ToolbarIntegration( this, view, - container, menuToolbar, ShippedDomainsProvider().also { it.initialize(this) }, components.core.historyStorage, components.core.sessionManager, customTabSession?.id, - customTabSession?.private ?: sessionManager.selectedSession?.private ?: false + customTabSession?.private ?: sessionManager.selectedSession?.private ?: false, + interactor ) } } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt index d022d3fec..e43737df6 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt @@ -5,13 +5,9 @@ package org.mozilla.fenix.components.toolbar import android.content.Context -import android.view.ViewGroup import androidx.appcompat.content.res.AppCompatResources -import androidx.navigation.NavOptions -import androidx.navigation.Navigation import com.airbnb.lottie.LottieCompositionFactory import com.airbnb.lottie.LottieDrawable -import androidx.navigation.fragment.FragmentNavigator import mozilla.components.browser.domains.autocomplete.DomainAutocompleteProvider import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.runWithSession @@ -26,20 +22,19 @@ import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings import org.mozilla.fenix.theme.ThemeManager class ToolbarIntegration( context: Context, toolbar: BrowserToolbar, - browserLayout: ViewGroup, toolbarMenu: ToolbarMenu, domainAutocompleteProvider: DomainAutocompleteProvider, historyStorage: HistoryStorage, sessionManager: SessionManager, sessionId: String? = null, - isPrivate: Boolean + isPrivate: Boolean, + interactor: BrowserToolbarViewInteractor ) : LifecycleAwareFeature { private var renderStyle: ToolbarFeature.RenderStyle = ToolbarFeature.RenderStyle.UncoloredUrl @@ -87,30 +82,7 @@ class ToolbarIntegration( sessionManager, { toolbar.hideKeyboard() - // We need to dynamically add the options here because if you do it in XML it overwrites - val options = NavOptions.Builder().setPopUpTo(R.id.nav_graph, false) - .setEnterAnim(R.anim.fade_in).build() - val extras = - FragmentNavigator.Extras.Builder() - .addSharedElement( - browserLayout, - "$TAB_ITEM_TRANSITION_NAME${sessionManager.selectedSession?.id}" - ) - .build() - val navController = Navigation.findNavController(toolbar) - if (!navController.popBackStack( - R.id.homeFragment, - false - ) - ) { - navController.nav( - R.id.browserFragment, - R.id.action_browserFragment_to_homeFragment, - null, - options, - extras - ) - } + interactor.onTabCounterClicked() }, isPrivate ) @@ -147,8 +119,4 @@ class ToolbarIntegration( menuPresenter.stop() toolbarPresenter.stop() } - - companion object { - private const val TAB_ITEM_TRANSITION_NAME = "tab_item" - } } diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt index 4eade5788..3b809cfb3 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt @@ -49,6 +49,12 @@ class BrowserInteractorTest { every { context.components.core.sessionManager.selectedSession } returns session } + @Test + fun onTabCounterClicked() { + interactor.onTabCounterClicked() + verify { browserToolbarController.handleTabCounterClick() } + } + @Test fun onBrowserToolbarPaste() { val pastedText = "Mozilla" diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt index fa1a1fdb5..d8e0d1b3f 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt @@ -5,9 +5,12 @@ package org.mozilla.fenix.components.toolbar import android.content.Intent +import android.view.ViewGroup import androidx.core.widget.NestedScrollView import androidx.lifecycle.LifecycleCoroutineScope import androidx.navigation.NavController +import androidx.navigation.NavDirections +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import io.mockk.Runs import io.mockk.every import io.mockk.just @@ -54,7 +57,8 @@ import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit class DefaultBrowserToolbarControllerTest { private val mainThreadSurrogate = newSingleThreadContext("UI thread") - + private var browserLayout: ViewGroup = mockk(relaxed = true) + private var swipeRefreshLayout: SwipeRefreshLayout = mockk(relaxed = true) private var activity: HomeActivity = mockk(relaxed = true) private var analytics: Analytics = mockk(relaxed = true) private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) @@ -66,11 +70,13 @@ class DefaultBrowserToolbarControllerTest { private val getSupportUrl: () -> String = { "https://supportUrl.org" } private val openInFenixIntent: Intent = mockk(relaxed = true) private val currentSessionAsTab: Tab = mockk(relaxed = true) - private val bottomSheetBehavior: QuickActionSheetBehavior = mockk(relaxed = true) + private val bottomSheetBehavior: QuickActionSheetBehavior = + mockk(relaxed = true) private val metrics: MetricController = mockk(relaxed = true) private val searchUseCases: SearchUseCases = mockk(relaxed = true) private val sessionUseCases: SessionUseCases = mockk(relaxed = true) private val scope: LifecycleCoroutineScope = mockk(relaxed = true) + private val adjustBackgroundAndNavigate: (NavDirections) -> Unit = mockk(relaxed = true) private lateinit var controller: DefaultBrowserToolbarController @@ -84,12 +90,15 @@ class DefaultBrowserToolbarControllerTest { browsingModeManager = browsingModeManager, findInPageLauncher = findInPageLauncher, engineView = engineView, + adjustBackgroundAndNavigate = adjustBackgroundAndNavigate, customTabSession = null, viewModel = viewModel, getSupportUrl = getSupportUrl, openInFenixIntent = openInFenixIntent, bottomSheetBehavior = bottomSheetBehavior, - scope = scope + scope = scope, + browserLayout = browserLayout, + swipeRefresh = swipeRefreshLayout ) mockkStatic( @@ -107,6 +116,7 @@ class DefaultBrowserToolbarControllerTest { every { activity.components.useCases.sessionUseCases } returns sessionUseCases every { activity.components.useCases.searchUseCases } returns searchUseCases every { activity.components.core.sessionManager.selectedSession } returns currentSession + every { adjustBackgroundAndNavigate.invoke(any()) } just Runs } @Test @@ -117,10 +127,9 @@ class DefaultBrowserToolbarControllerTest { controller.handleToolbarPaste(pastedText) verify { - navController.nav( - R.id.browserFragment, + adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( - sessionId = currentSession.id, + sessionId = "1", pastedText = pastedText ) ) @@ -163,8 +172,7 @@ class DefaultBrowserToolbarControllerTest { verify { metrics.track(Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER)) } verify { - navController.nav( - R.id.browserFragment, + adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( sessionId = "1" ) @@ -222,8 +230,7 @@ class DefaultBrowserToolbarControllerTest { verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SETTINGS)) } verify { - navController.nav( - R.id.settingsFragment, + adjustBackgroundAndNavigate.invoke( BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment() ) } @@ -237,9 +244,8 @@ class DefaultBrowserToolbarControllerTest { verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.LIBRARY)) } verify { - navController.nav( - R.id.libraryFragment, - BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment() + adjustBackgroundAndNavigate.invoke( + BrowserFragmentDirections.actionBrowserFragmentToLibraryFragment() ) } } @@ -316,7 +322,7 @@ class DefaultBrowserToolbarControllerTest { verify { val directions = BrowserFragmentDirections .actionBrowserFragmentToSearchFragment(sessionId = null) - navController.nav(R.id.browserFragment, directions) + adjustBackgroundAndNavigate.invoke(directions) } verify { browsingModeManager.mode = BrowsingMode.Private } } @@ -388,7 +394,7 @@ class DefaultBrowserToolbarControllerTest { verify { val directions = BrowserFragmentDirections .actionBrowserFragmentToSearchFragment(sessionId = null) - navController.nav(R.id.browserFragment, directions) + adjustBackgroundAndNavigate.invoke(directions) } verify { browsingModeManager.mode = BrowsingMode.Normal } } @@ -427,12 +433,15 @@ class DefaultBrowserToolbarControllerTest { browsingModeManager = browsingModeManager, findInPageLauncher = findInPageLauncher, engineView = engineView, + adjustBackgroundAndNavigate = adjustBackgroundAndNavigate, customTabSession = currentSession, viewModel = viewModel, getSupportUrl = getSupportUrl, openInFenixIntent = openInFenixIntent, bottomSheetBehavior = bottomSheetBehavior, - scope = scope + scope = scope, + browserLayout = browserLayout, + swipeRefresh = swipeRefreshLayout ) val sessionManager: SessionManager = mockk(relaxed = true)