1
0
Fork 0

For #1901 - Get rid of black flash when leaving GV Engine

master
Emily Kager 2019-10-07 16:49:47 -07:00 committed by Emily Kager
parent 6ec0d46f6b
commit f9afd97a68
10 changed files with 158 additions and 74 deletions

View File

@ -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()

View File

@ -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()
}

View File

@ -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)))
}

View File

@ -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
)
}
}

View File

@ -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)
}

View File

@ -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"
}
}

View File

@ -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
)
}
}

View File

@ -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"
}
}

View File

@ -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"

View File

@ -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<NestedScrollView> = mockk(relaxed = true)
private val bottomSheetBehavior: QuickActionSheetBehavior<NestedScrollView> =
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)