1
0
Fork 0

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

master
jhugman 2019-05-02 20:32:04 +01:00 committed by Colin Lee
parent 1c7f48be5b
commit 34bd6513b6
5 changed files with 27 additions and 13 deletions

View File

@ -37,6 +37,7 @@ import mozilla.components.browser.session.SessionManager
import mozilla.components.feature.contextmenu.ContextMenuCandidate
import mozilla.components.feature.contextmenu.ContextMenuFeature
import mozilla.components.feature.downloads.DownloadsFeature
import mozilla.components.feature.intent.IntentProcessor
import mozilla.components.feature.prompts.PromptFeature
import mozilla.components.feature.session.FullScreenFeature
import mozilla.components.feature.session.SessionFeature
@ -121,7 +122,7 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
savedInstanceState: Bundle?
): View? {
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)
@ -515,10 +516,10 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope,
private fun handleToolbarItemInteraction(action: SearchAction.ToolbarMenuItemTapped) {
val sessionUseCases = requireComponents.useCases.sessionUseCases
Do exhaustive when (action.item) {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke()
ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke()
ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke()
ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke()
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(getSessionById())
ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke(getSessionById())
ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke(getSessionById())
ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke(getSessionById())
ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbarComponent.getView())
.navigate(BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment())
ToolbarMenu.Item.Library -> Navigation.findNavController(toolbarComponent.getView())

View File

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

View File

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

View File

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

View File

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