parent
727457f0ed
commit
d1aed157dd
|
@ -160,7 +160,7 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
|
||||||
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
||||||
nestedScrollQuickActionView = nestedScrollQuickAction,
|
nestedScrollQuickActionView = nestedScrollQuickAction,
|
||||||
engineView = engineView,
|
engineView = engineView,
|
||||||
currentSession = session,
|
customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) },
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
getSupportUrl = {
|
getSupportUrl = {
|
||||||
SupportUtils.getSumoURLForTopic(
|
SupportUtils.getSumoURLForTopic(
|
||||||
|
@ -177,12 +177,14 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
|
||||||
)
|
)
|
||||||
|
|
||||||
browserInteractor =
|
browserInteractor =
|
||||||
createBrowserToolbarViewInteractor(browserToolbarController, session)
|
createBrowserToolbarViewInteractor(
|
||||||
|
browserToolbarController,
|
||||||
|
customTabSessionId?.let { sessionManager.findSessionById(it) })
|
||||||
|
|
||||||
browserToolbarView = BrowserToolbarView(
|
browserToolbarView = BrowserToolbarView(
|
||||||
container = view.browserLayout,
|
container = view.browserLayout,
|
||||||
interactor = browserInteractor,
|
interactor = browserInteractor,
|
||||||
currentSession = session
|
customTabSession = customTabSessionId?.let { sessionManager.findSessionById(it) }
|
||||||
)
|
)
|
||||||
|
|
||||||
toolbarIntegration.set(
|
toolbarIntegration.set(
|
||||||
|
@ -476,7 +478,7 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
|
||||||
|
|
||||||
protected abstract fun createBrowserToolbarViewInteractor(
|
protected abstract fun createBrowserToolbarViewInteractor(
|
||||||
browserToolbarController: BrowserToolbarController,
|
browserToolbarController: BrowserToolbarController,
|
||||||
session: Session
|
session: Session?
|
||||||
): BrowserInteractor
|
): BrowserInteractor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -192,7 +192,7 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler {
|
||||||
|
|
||||||
override fun createBrowserToolbarViewInteractor(
|
override fun createBrowserToolbarViewInteractor(
|
||||||
browserToolbarController: BrowserToolbarController,
|
browserToolbarController: BrowserToolbarController,
|
||||||
session: Session
|
session: Session?
|
||||||
) = BrowserInteractor(
|
) = BrowserInteractor(
|
||||||
context = context!!,
|
context = context!!,
|
||||||
store = browserStore,
|
store = browserStore,
|
||||||
|
@ -208,7 +208,7 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler {
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
readerModeController = DefaultReaderModeController(readerViewFeature),
|
readerModeController = DefaultReaderModeController(readerViewFeature),
|
||||||
currentSession = session
|
customTabSession = customTabSessionId?.let { requireComponents.core.sessionManager.findSessionById(it) }
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun getEngineMargins(): Pair<Int, Int> {
|
override fun getEngineMargins(): Pair<Int, Int> {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.Context
|
||||||
import mozilla.components.browser.session.Session
|
import mozilla.components.browser.session.Session
|
||||||
import org.mozilla.fenix.browser.readermode.ReaderModeController
|
import org.mozilla.fenix.browser.readermode.ReaderModeController
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.metrics
|
import org.mozilla.fenix.ext.metrics
|
||||||
import org.mozilla.fenix.quickactionsheet.QuickActionSheetController
|
import org.mozilla.fenix.quickactionsheet.QuickActionSheetController
|
||||||
import org.mozilla.fenix.quickactionsheet.QuickActionSheetViewInteractor
|
import org.mozilla.fenix.quickactionsheet.QuickActionSheetViewInteractor
|
||||||
|
@ -18,7 +19,7 @@ class BrowserInteractor(
|
||||||
private val browserToolbarController: BrowserToolbarController,
|
private val browserToolbarController: BrowserToolbarController,
|
||||||
private val quickActionSheetController: QuickActionSheetController,
|
private val quickActionSheetController: QuickActionSheetController,
|
||||||
private val readerModeController: ReaderModeController,
|
private val readerModeController: ReaderModeController,
|
||||||
private val currentSession: Session
|
private val customTabSession: Session?
|
||||||
) : BrowserToolbarViewInteractor, QuickActionSheetViewInteractor {
|
) : BrowserToolbarViewInteractor, QuickActionSheetViewInteractor {
|
||||||
|
|
||||||
override fun onBrowserToolbarClicked() {
|
override fun onBrowserToolbarClicked() {
|
||||||
|
@ -50,7 +51,8 @@ class BrowserInteractor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onQuickActionSheetReadPressed() {
|
override fun onQuickActionSheetReadPressed() {
|
||||||
val enabled = currentSession.readerMode
|
val enabled =
|
||||||
|
customTabSession?.readerMode ?: context.components.core.sessionManager.selectedSession?.readerMode ?: false
|
||||||
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
context.metrics.track(Event.QuickActionSheetClosed)
|
context.metrics.track(Event.QuickActionSheetClosed)
|
||||||
|
|
|
@ -43,7 +43,7 @@ class DefaultBrowserToolbarController(
|
||||||
private val findInPageLauncher: () -> Unit,
|
private val findInPageLauncher: () -> Unit,
|
||||||
private val nestedScrollQuickActionView: NestedScrollView,
|
private val nestedScrollQuickActionView: NestedScrollView,
|
||||||
private val engineView: EngineView,
|
private val engineView: EngineView,
|
||||||
private val currentSession: Session,
|
private val customTabSession: Session?,
|
||||||
private val viewModel: CreateCollectionViewModel,
|
private val viewModel: CreateCollectionViewModel,
|
||||||
private val getSupportUrl: () -> String,
|
private val getSupportUrl: () -> String,
|
||||||
private val openInFenixIntent: Intent,
|
private val openInFenixIntent: Intent,
|
||||||
|
@ -58,7 +58,7 @@ class DefaultBrowserToolbarController(
|
||||||
navController.nav(
|
navController.nav(
|
||||||
R.id.browserFragment,
|
R.id.browserFragment,
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
|
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
|
||||||
currentSession.id
|
customTabSession?.id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@ class DefaultBrowserToolbarController(
|
||||||
override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) {
|
override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) {
|
||||||
val sessionUseCases = context.components.useCases.sessionUseCases
|
val sessionUseCases = context.components.useCases.sessionUseCases
|
||||||
trackToolbarItemInteraction(item)
|
trackToolbarItemInteraction(item)
|
||||||
|
val currentSession = customTabSession ?: context.components.core.sessionManager.selectedSession
|
||||||
|
|
||||||
Do exhaustive when (item) {
|
Do exhaustive when (item) {
|
||||||
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
|
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
|
||||||
|
@ -88,7 +89,8 @@ class DefaultBrowserToolbarController(
|
||||||
currentSession
|
currentSession
|
||||||
)
|
)
|
||||||
ToolbarMenu.Item.Share -> {
|
ToolbarMenu.Item.Share -> {
|
||||||
currentSession.url.apply {
|
val currentUrl = currentSession?.url
|
||||||
|
currentUrl?.apply {
|
||||||
val directions = BrowserFragmentDirections.actionBrowserFragmentToShareFragment(this)
|
val directions = BrowserFragmentDirections.actionBrowserFragmentToShareFragment(this)
|
||||||
navController.nav(R.id.browserFragment, directions)
|
navController.nav(R.id.browserFragment, directions)
|
||||||
}
|
}
|
||||||
|
@ -109,7 +111,8 @@ class DefaultBrowserToolbarController(
|
||||||
context.components.analytics.metrics.track(Event.FindInPageOpened)
|
context.components.analytics.metrics.track(Event.FindInPageOpened)
|
||||||
}
|
}
|
||||||
ToolbarMenu.Item.ReportIssue -> {
|
ToolbarMenu.Item.ReportIssue -> {
|
||||||
currentSession.url.apply {
|
val currentUrl = currentSession?.url
|
||||||
|
currentUrl?.apply {
|
||||||
val reportUrl = String.format(BrowserFragment.REPORT_SITE_ISSUE_URL, this)
|
val reportUrl = String.format(BrowserFragment.REPORT_SITE_ISSUE_URL, this)
|
||||||
context.components.useCases.tabsUseCases.addTab.invoke(reportUrl)
|
context.components.useCases.tabsUseCases.addTab.invoke(reportUrl)
|
||||||
}
|
}
|
||||||
|
@ -121,25 +124,25 @@ class DefaultBrowserToolbarController(
|
||||||
context.components.analytics.metrics
|
context.components.analytics.metrics
|
||||||
.track(Event.CollectionSaveButtonPressed(TELEMETRY_BROWSER_IDENTIFIER))
|
.track(Event.CollectionSaveButtonPressed(TELEMETRY_BROWSER_IDENTIFIER))
|
||||||
|
|
||||||
viewModel.tabs = listOf(currentSessionAsTab)
|
viewModel.tabs = listOf(currentSessionAsTab)
|
||||||
val selectedSet = mutableSetOf(currentSessionAsTab)
|
val selectedSet = mutableSetOf(currentSessionAsTab)
|
||||||
viewModel.selectedTabs = selectedSet
|
viewModel.selectedTabs = selectedSet
|
||||||
viewModel.tabCollections =
|
viewModel.tabCollections =
|
||||||
context.components.core.tabCollectionStorage.cachedTabCollections.reversed()
|
context.components.core.tabCollectionStorage.cachedTabCollections.reversed()
|
||||||
viewModel.saveCollectionStep = viewModel.tabCollections.getStepForCollectionsSize()
|
viewModel.saveCollectionStep = viewModel.tabCollections.getStepForCollectionsSize()
|
||||||
viewModel.snackbarAnchorView = nestedScrollQuickActionView
|
viewModel.snackbarAnchorView = nestedScrollQuickActionView
|
||||||
viewModel.previousFragmentId = R.id.browserFragment
|
viewModel.previousFragmentId = R.id.browserFragment
|
||||||
|
|
||||||
val directions = BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment()
|
val directions = BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment()
|
||||||
navController.nav(R.id.browserFragment, directions)
|
navController.nav(R.id.browserFragment, directions)
|
||||||
}
|
}
|
||||||
ToolbarMenu.Item.OpenInFenix -> {
|
ToolbarMenu.Item.OpenInFenix -> {
|
||||||
// Release the session from this view so that it can immediately be rendered by a different view
|
// Release the session from this view so that it can immediately be rendered by a different view
|
||||||
engineView.release()
|
engineView.release()
|
||||||
|
|
||||||
// Strip the CustomTabConfig to turn this Session into a regular tab and then select it
|
// Strip the CustomTabConfig to turn this Session into a regular tab and then select it
|
||||||
currentSession.customTabConfig = null
|
customTabSession!!.customTabConfig = null
|
||||||
context.components.core.sessionManager.select(currentSession)
|
context.components.core.sessionManager.select(customTabSession)
|
||||||
|
|
||||||
// Switch to the actual browser which should now display our new selected session
|
// Switch to the actual browser which should now display our new selected session
|
||||||
context.startActivity(openInFenixIntent)
|
context.startActivity(openInFenixIntent)
|
||||||
|
|
|
@ -23,7 +23,7 @@ interface BrowserToolbarViewInteractor {
|
||||||
class BrowserToolbarView(
|
class BrowserToolbarView(
|
||||||
private val container: ViewGroup,
|
private val container: ViewGroup,
|
||||||
private val interactor: BrowserToolbarViewInteractor,
|
private val interactor: BrowserToolbarViewInteractor,
|
||||||
private val currentSession: Session
|
private val customTabSession: Session?
|
||||||
) : LayoutContainer {
|
) : LayoutContainer {
|
||||||
|
|
||||||
override val containerView: View?
|
override val containerView: View?
|
||||||
|
@ -41,7 +41,7 @@ class BrowserToolbarView(
|
||||||
init {
|
init {
|
||||||
with(container.context) {
|
with(container.context) {
|
||||||
val sessionManager = components.core.sessionManager
|
val sessionManager = components.core.sessionManager
|
||||||
val isCustomTabSession = currentSession.isCustomTabSession()
|
val isCustomTabSession = customTabSession != null
|
||||||
|
|
||||||
view.apply {
|
view.apply {
|
||||||
elevation = TOOLBAR_ELEVATION.dpToFloat(resources.displayMetrics)
|
elevation = TOOLBAR_ELEVATION.dpToFloat(resources.displayMetrics)
|
||||||
|
@ -80,7 +80,7 @@ class BrowserToolbarView(
|
||||||
CustomTabToolbarMenu(
|
CustomTabToolbarMenu(
|
||||||
this,
|
this,
|
||||||
sessionManager,
|
sessionManager,
|
||||||
currentSession.id,
|
customTabSession?.id,
|
||||||
onItemTapped = {
|
onItemTapped = {
|
||||||
interactor.onBrowserToolbarMenuItemTapped(it)
|
interactor.onBrowserToolbarMenuItemTapped(it)
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,9 @@ class BrowserToolbarView(
|
||||||
DefaultToolbarMenu(
|
DefaultToolbarMenu(
|
||||||
this,
|
this,
|
||||||
hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(),
|
hasAccountProblem = components.backgroundServices.accountManager.accountNeedsReauth(),
|
||||||
requestDesktopStateProvider = { currentSession.desktopMode },
|
requestDesktopStateProvider = {
|
||||||
|
sessionManager.selectedSession?.private ?: false
|
||||||
|
},
|
||||||
onItemTapped = { interactor.onBrowserToolbarMenuItemTapped(it) }
|
onItemTapped = { interactor.onBrowserToolbarMenuItemTapped(it) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -102,8 +104,8 @@ class BrowserToolbarView(
|
||||||
ShippedDomainsProvider().also { it.initialize(this) },
|
ShippedDomainsProvider().also { it.initialize(this) },
|
||||||
components.core.historyStorage,
|
components.core.historyStorage,
|
||||||
components.core.sessionManager,
|
components.core.sessionManager,
|
||||||
currentSession.id,
|
customTabSession?.id,
|
||||||
currentSession.private
|
customTabSession?.private ?: sessionManager.selectedSession?.private ?: false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
findInPageLauncher = findInPageLauncher,
|
findInPageLauncher = findInPageLauncher,
|
||||||
nestedScrollQuickActionView = nestedScrollQuickActionView,
|
nestedScrollQuickActionView = nestedScrollQuickActionView,
|
||||||
engineView = engineView,
|
engineView = engineView,
|
||||||
currentSession = currentSession,
|
customTabSession = null,
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
getSupportUrl = getSupportUrl,
|
getSupportUrl = getSupportUrl,
|
||||||
openInFenixIntent = openInFenixIntent,
|
openInFenixIntent = openInFenixIntent,
|
||||||
|
@ -80,6 +80,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
every { context.components.analytics } returns analytics
|
every { context.components.analytics } returns analytics
|
||||||
every { analytics.metrics } returns metrics
|
every { analytics.metrics } returns metrics
|
||||||
every { context.components.useCases.sessionUseCases } returns sessionUseCases
|
every { context.components.useCases.sessionUseCases } returns sessionUseCases
|
||||||
|
every { context.components.core.sessionManager.selectedSession } returns currentSession
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -89,10 +90,12 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
controller.handleToolbarClick()
|
controller.handleToolbarClick()
|
||||||
|
|
||||||
verify { metrics.track(Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER)) }
|
verify { metrics.track(Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER)) }
|
||||||
verify { navController.nav(
|
verify {
|
||||||
R.id.browserFragment,
|
navController.nav(
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(currentSession.id)
|
R.id.browserFragment,
|
||||||
) }
|
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment("1")
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -144,11 +147,14 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
controller.handleToolbarItemInteraction(item)
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
|
||||||
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SETTINGS)) }
|
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SETTINGS)) }
|
||||||
verify { navController.nav(
|
verify {
|
||||||
R.id.settingsFragment,
|
navController.nav(
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()
|
R.id.settingsFragment,
|
||||||
) }
|
BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarLibraryPress() {
|
fun handleToolbarLibraryPress() {
|
||||||
val item = ToolbarMenu.Item.Library
|
val item = ToolbarMenu.Item.Library
|
||||||
|
@ -156,10 +162,12 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
controller.handleToolbarItemInteraction(item)
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
|
||||||
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.LIBRARY)) }
|
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.LIBRARY)) }
|
||||||
verify { navController.nav(
|
verify {
|
||||||
R.id.libraryFragment,
|
navController.nav(
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()
|
R.id.libraryFragment,
|
||||||
) }
|
BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -248,6 +256,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
|
|
||||||
val item = ToolbarMenu.Item.ReportIssue
|
val item = ToolbarMenu.Item.ReportIssue
|
||||||
|
|
||||||
|
every { currentSession.id } returns "1"
|
||||||
every { currentSession.url } returns "https://mozilla.org"
|
every { currentSession.url } returns "https://mozilla.org"
|
||||||
every { context.components.useCases.tabsUseCases } returns tabsUseCases
|
every { context.components.useCases.tabsUseCases } returns tabsUseCases
|
||||||
every { tabsUseCases.addTab } returns addTabUseCase
|
every { tabsUseCases.addTab } returns addTabUseCase
|
||||||
|
@ -322,6 +331,21 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarOpenInFenixPress() {
|
fun handleToolbarOpenInFenixPress() {
|
||||||
|
controller = DefaultBrowserToolbarController(
|
||||||
|
context = context,
|
||||||
|
navController = navController,
|
||||||
|
browsingModeManager = browsingModeManager,
|
||||||
|
findInPageLauncher = findInPageLauncher,
|
||||||
|
nestedScrollQuickActionView = nestedScrollQuickActionView,
|
||||||
|
engineView = engineView,
|
||||||
|
customTabSession = currentSession,
|
||||||
|
viewModel = viewModel,
|
||||||
|
getSupportUrl = getSupportUrl,
|
||||||
|
openInFenixIntent = openInFenixIntent,
|
||||||
|
currentSessionAsTab = currentSessionAsTab,
|
||||||
|
bottomSheetBehavior = bottomSheetBehavior
|
||||||
|
)
|
||||||
|
|
||||||
val sessionManager: SessionManager = mockk(relaxed = true)
|
val sessionManager: SessionManager = mockk(relaxed = true)
|
||||||
val item = ToolbarMenu.Item.OpenInFenix
|
val item = ToolbarMenu.Item.OpenInFenix
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue