From 34bd6513b6468ac353f190d5892ea421e43fbe0b Mon Sep 17 00:00:00 2001 From: jhugman Date: Thu, 2 May 2019 20:32:04 +0100 Subject: [PATCH] Fixes 1689 - Add sessionManager and sessionId to custom tabs menu and toolbar. (#2229) --- .../org/mozilla/fenix/browser/BrowserFragment.kt | 11 ++++++----- .../fenix/components/toolbar/ToolbarUIView.kt | 10 +++++++--- .../fenix/customtabs/CustomTabToolbarMenu.kt | 15 +++++++++++---- .../fenix/customtabs/CustomTabsIntegration.kt | 2 ++ app/src/main/res/navigation/nav_graph.xml | 2 +- 5 files changed, 27 insertions(+), 13 deletions(-) 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 93852d84b..db99ea866 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -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()) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt index 6f5fc5f78..447f98ab9 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarUIView.kt @@ -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 { diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabToolbarMenu.kt index a8a5b587b..1bc7ce7a1 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabToolbarMenu.kt @@ -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) diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt index dce5df37a..403bd3386 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt @@ -25,6 +25,8 @@ class CustomTabsIntegration( private val customTabToolbarMenu by lazy { CustomTabToolbarMenu( context, + sessionManager, + sessionId, onItemTapped = onItemTapped ) } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index eae61a3e2..47d136e45 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -104,7 +104,7 @@ android:id="@+id/action_browserFragment_to_searchFragment" app:destination="@id/searchFragment" />