From ce96d909d1fe85cddf3d17af5329334990d01ec3 Mon Sep 17 00:00:00 2001 From: Christian Sadilek Date: Thu, 13 Feb 2020 16:31:44 -0500 Subject: [PATCH] No issue: Support basic navigation in add-on popups --- .../fenix/addons/AddonPopupBaseFragment.kt | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonPopupBaseFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonPopupBaseFragment.kt index fbd94090c..2bc24f97f 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonPopupBaseFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonPopupBaseFragment.kt @@ -7,7 +7,6 @@ package org.mozilla.fenix.addons import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment -import androidx.navigation.fragment.NavHostFragment.findNavController import androidx.navigation.fragment.findNavController import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.action.CustomTabListAction @@ -19,6 +18,7 @@ import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.prompt.PromptRequest import mozilla.components.concept.engine.window.WindowRequest import mozilla.components.feature.prompts.PromptFeature +import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import org.mozilla.fenix.ext.requireComponents @@ -26,11 +26,12 @@ import org.mozilla.fenix.ext.requireComponents * Provides shared functionality to our fragments for add-on settings and * browser/page action popups. */ -abstract class AddonPopupBaseFragment : Fragment(), EngineSession.Observer { +abstract class AddonPopupBaseFragment : Fragment(), EngineSession.Observer, UserInteractionHandler { private val promptsFeature = ViewBoundFeatureWrapper() protected var session: SessionState? = null protected var engineSession: EngineSession? = null + private var canGoBack: Boolean = false override fun onViewCreated(view: View, savedInstanceState: Bundle?) { session?.let { @@ -81,6 +82,21 @@ abstract class AddonPopupBaseFragment : Fragment(), EngineSession.Observer { override fun onWindowRequest(windowRequest: WindowRequest) { if (windowRequest.type == WindowRequest.Type.CLOSE) { findNavController().popBackStack() + } else { + engineSession?.loadUrl(windowRequest.url) + } + } + + override fun onNavigationStateChange(canGoBack: Boolean?, canGoForward: Boolean?) { + canGoBack?.let { this.canGoBack = canGoBack } + } + + override fun onBackPressed(): Boolean { + return if (this.canGoBack) { + engineSession?.goBack() + true + } else { + false } }