Fixes 1689 - Add sessionManager and sessionId to custom tabs menu and toolbar. (#2229)

nightly-build-test
jhugman 5 years ago committed by Colin Lee
parent 1c7f48be5b
commit 34bd6513b6

@ -37,6 +37,7 @@ import mozilla.components.browser.session.SessionManager
import mozilla.components.feature.contextmenu.ContextMenuCandidate import mozilla.components.feature.contextmenu.ContextMenuCandidate
import mozilla.components.feature.contextmenu.ContextMenuFeature import mozilla.components.feature.contextmenu.ContextMenuFeature
import mozilla.components.feature.downloads.DownloadsFeature import mozilla.components.feature.downloads.DownloadsFeature
import mozilla.components.feature.intent.IntentProcessor
import mozilla.components.feature.prompts.PromptFeature import mozilla.components.feature.prompts.PromptFeature
import mozilla.components.feature.session.FullScreenFeature import mozilla.components.feature.session.FullScreenFeature
import mozilla.components.feature.session.SessionFeature import mozilla.components.feature.session.SessionFeature
@ -121,7 +122,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
require(arguments != null) require(arguments != null)
customTabSessionId = BrowserFragmentArgs.fromBundle(arguments!!).customTabSessionId customTabSessionId = arguments?.getString(IntentProcessor.ACTIVE_SESSION_ID)
val view = inflater.inflate(R.layout.fragment_browser, container, false) val view = inflater.inflate(R.layout.fragment_browser, container, false)
@ -515,10 +516,10 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
private fun handleToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) { private fun handleToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) {
val sessionUseCases = requireComponents.useCases.sessionUseCases val sessionUseCases = requireComponents.useCases.sessionUseCases
Do exhaustive when (action.item) { Do exhaustive when (action.item) {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke() ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(getSessionById())
ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke() ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke(getSessionById())
ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke() ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke(getSessionById())
ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke() ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke(getSessionById())
ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbarComponent.getView()) ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbarComponent.getView())
.navigate(BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment()) .navigate(BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment())
ToolbarMenu.Item.Library -> Navigation.findNavController(toolbarComponent.getView()) ToolbarMenu.Item.Library -> Navigation.findNavController(toolbarComponent.getView())

@ -43,8 +43,9 @@ class ToolbarUIView(
.inflate(R.layout.layout_url_background, container, false) .inflate(R.layout.layout_url_background, container, false)
init { init {
val session = sessionId?.let { view.context.components.core.sessionManager.findSessionById(sessionId) } val sessionManager = view.context.components.core.sessionManager
?: view.context.components.core.sessionManager.selectedSession val session = sessionId?.let { sessionManager.findSessionById(it) }
?: sessionManager.selectedSession
view.apply { view.apply {
setOnUrlCommitListener { setOnUrlCommitListener {
@ -88,7 +89,10 @@ class ToolbarUIView(
val isCustom = session?.isCustomTabSession() ?: false val isCustom = session?.isCustomTabSession() ?: false
val menuToolbar = if (isCustom) { val menuToolbar = if (isCustom) {
CustomTabToolbarMenu(this, CustomTabToolbarMenu(
this,
sessionManager,
sessionId,
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) } onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
) )
} else { } else {

@ -10,6 +10,8 @@ import mozilla.components.browser.menu.item.BrowserMenuDivider
import mozilla.components.browser.menu.item.BrowserMenuImageText import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.menu.item.BrowserMenuItemToolbar import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import org.mozilla.fenix.DefaultThemeManager import org.mozilla.fenix.DefaultThemeManager
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.toolbar.ToolbarMenu import org.mozilla.fenix.components.toolbar.ToolbarMenu
@ -17,10 +19,15 @@ import org.mozilla.fenix.ext.components
class CustomTabToolbarMenu( class CustomTabToolbarMenu(
private val context: Context, private val context: Context,
private val sessionManager: SessionManager,
private val sessionId: String?,
private val onItemTapped: (ToolbarMenu.Item) -> Unit = {} private val onItemTapped: (ToolbarMenu.Item) -> Unit = {}
) : ToolbarMenu { ) : ToolbarMenu {
override val menuBuilder by lazy { BrowserMenuBuilder(menuItems) } override val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
private val session: Session?
get() = sessionId?.let { sessionManager.findSessionById(it) }
override val menuToolbar by lazy { override val menuToolbar by lazy {
val back = BrowserMenuItemToolbar.TwoStateButton( val back = BrowserMenuItemToolbar.TwoStateButton(
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_back, primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_back,
@ -30,7 +37,7 @@ class CustomTabToolbarMenu(
context context
), ),
isInPrimaryState = { isInPrimaryState = {
context.components.core.sessionManager.selectedSession?.canGoBack ?: true session?.canGoBack ?: true
}, },
secondaryImageTintResource = DefaultThemeManager.resolveAttribute( secondaryImageTintResource = DefaultThemeManager.resolveAttribute(
R.attr.neutral, R.attr.neutral,
@ -49,7 +56,7 @@ class CustomTabToolbarMenu(
context context
), ),
isInPrimaryState = { isInPrimaryState = {
context.components.core.sessionManager.selectedSession?.canGoForward ?: true session?.canGoForward ?: true
}, },
secondaryImageTintResource = DefaultThemeManager.resolveAttribute( secondaryImageTintResource = DefaultThemeManager.resolveAttribute(
R.attr.neutral, R.attr.neutral,
@ -68,7 +75,7 @@ class CustomTabToolbarMenu(
context context
), ),
isInPrimaryState = { isInPrimaryState = {
val loading = context.components.core.sessionManager.selectedSession?.loading val loading = session?.loading
loading == false loading == false
}, },
secondaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_stop, secondaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_stop,
@ -79,7 +86,7 @@ class CustomTabToolbarMenu(
), ),
disableInSecondaryState = false disableInSecondaryState = false
) { ) {
if (context.components.core.sessionManager.selectedSession?.loading == true) { if (session?.loading == true) {
onItemTapped.invoke(ToolbarMenu.Item.Stop) onItemTapped.invoke(ToolbarMenu.Item.Stop)
} else { } else {
onItemTapped.invoke(ToolbarMenu.Item.Reload) onItemTapped.invoke(ToolbarMenu.Item.Reload)

@ -25,6 +25,8 @@ class CustomTabsIntegration(
private val customTabToolbarMenu by lazy { private val customTabToolbarMenu by lazy {
CustomTabToolbarMenu( CustomTabToolbarMenu(
context, context,
sessionManager,
sessionId,
onItemTapped = onItemTapped onItemTapped = onItemTapped
) )
} }

@ -104,7 +104,7 @@
android:id="@+id/action_browserFragment_to_searchFragment" android:id="@+id/action_browserFragment_to_searchFragment"
app:destination="@id/searchFragment" /> app:destination="@id/searchFragment" />
<argument <argument
android:name="custom_tab_session_id" android:name="activeSessionId"
app:argType="string" app:argType="string"
app:nullable="true" /> app:nullable="true" />
<action <action

Loading…
Cancel
Save