diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 982805bec..986ab762f 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -32,6 +32,7 @@ import org.mozilla.fenix.ext.requireComponents import mozilla.components.feature.prompts.PromptFeature import org.mozilla.fenix.BackHandler import org.mozilla.fenix.components.FindInPageIntegration +import org.mozilla.fenix.ext.share import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.getSafeManagedObservable import org.mozilla.fenix.search.toolbar.SearchAction @@ -184,6 +185,8 @@ class BrowserFragment : Fragment(), BackHandler { promptsFeature.onActivityResult(requestCode, resultCode, data) } + // This method triggers the complexity warning. However it's actually not that hard to understand. + @SuppressWarnings("ComplexMethod") private fun handleToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) { val sessionUseCases = requireComponents.useCases.sessionUseCases when (action.item) { @@ -194,7 +197,9 @@ class BrowserFragment : Fragment(), BackHandler { .navigate(R.id.action_browserFragment_to_settingsActivity, null, null) is ToolbarMenu.Item.Library -> Navigation.findNavController(toolbar) .navigate(R.id.action_browserFragment_to_libraryFragment, null, null) - else -> return + is ToolbarMenu.Item.RequestDesktop -> sessionUseCases.requestDesktopSite.invoke(action.item.isChecked) + is ToolbarMenu.Item.Share -> requireComponents.core.sessionManager + .selectedSession?.url?.apply { requireContext().share(this) } } } diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarMenu.kt index b14924ef6..206c05924 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarMenu.kt @@ -12,7 +12,11 @@ import mozilla.components.browser.menu.item.BrowserMenuItemToolbar import mozilla.components.browser.menu.item.BrowserMenuSwitch import org.mozilla.fenix.R -class ToolbarMenu(private val context: Context, private val onItemTapped: (Item) -> Unit = {}) { +class ToolbarMenu( + private val context: Context, + private val requestDesktopStateProvider: () -> Boolean = { false }, + private val onItemTapped: (Item) -> Unit = {} +) { sealed class Item { object Help : Item() object Settings : Item() @@ -88,11 +92,10 @@ class ToolbarMenu(private val context: Context, private val onItemTapped: (Item) BrowserMenuDivider(), - BrowserMenuSwitch(context.getString(R.string.browser_menu_desktop_site), { - false - }) { checked -> - onItemTapped.invoke(Item.RequestDesktop(checked)) - }, + BrowserMenuSwitch(context.getString(R.string.browser_menu_desktop_site), + requestDesktopStateProvider, { checked -> + onItemTapped.invoke(Item.RequestDesktop(checked)) + }), BrowserMenuImageText( context.getString(R.string.browser_menu_find_in_page), diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarUIView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarUIView.kt index 73c6652b3..dc5fccd7a 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarUIView.kt @@ -64,7 +64,10 @@ class ToolbarUIView( toolbarIntegration = ToolbarIntegration( this, view, - ToolbarMenu(this) { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }, + ToolbarMenu(this, + requestDesktopStateProvider = { components.core.sessionManager.selectedSessionOrThrow.desktopMode }, + onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) } + ), ShippedDomainsProvider().also { it.initialize(this) }, components.core.historyStorage, components.core.sessionManager,