1
0
Fork 0

No issue: Support basic navigation in add-on popups

master
Christian Sadilek 2020-02-13 16:31:44 -05:00
parent 372b1e7f0e
commit ce96d909d1
1 changed files with 18 additions and 2 deletions

View File

@ -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<PromptFeature>()
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
}
}