For #1901 - Get rid of black flash when leaving GV Engine
parent
6ec0d46f6b
commit
f9afd97a68
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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)))
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue