update navigation for external sessions
This commit is contained in:
+11
-2
@@ -29,6 +29,7 @@ import eu.weblibre.flutter_mozilla_components.feature.KeyboardVisibilityFeature
|
||||
import eu.weblibre.flutter_mozilla_components.feature.ReadabilityExtractFeature
|
||||
import eu.weblibre.flutter_mozilla_components.feature.WebExtensionToolbarFeature
|
||||
import eu.weblibre.flutter_mozilla_components.integration.ReaderViewIntegration
|
||||
import eu.weblibre.flutter_mozilla_components.activities.ExternalAppBrowserActivity
|
||||
import eu.weblibre.flutter_mozilla_components.services.DownloadService
|
||||
import io.flutter.Log
|
||||
import mozilla.components.browser.state.action.TabListAction
|
||||
@@ -307,8 +308,16 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
|
||||
sessionId = sessionId,
|
||||
fragmentManager = parentFragmentManager,
|
||||
loadUrlUseCase = components.useCases.sessionUseCases.loadUrl,
|
||||
launchInApp = { GlobalComponents.shouldOpenLinksInApp() },
|
||||
shouldPrompt = { GlobalComponents.shouldPromptOpenLinksInApp() },
|
||||
launchInApp = {
|
||||
GlobalComponents.shouldOpenLinksInApp(
|
||||
requireActivity() is ExternalAppBrowserActivity
|
||||
)
|
||||
},
|
||||
shouldPrompt = {
|
||||
GlobalComponents.shouldPromptOpenLinksInApp(
|
||||
requireActivity() is ExternalAppBrowserActivity
|
||||
)
|
||||
},
|
||||
alwaysOpenCheckboxAction = {
|
||||
GlobalComponents.engineSettingsApi?.setAppLinksMode(
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS
|
||||
|
||||
+1
-10
@@ -333,16 +333,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
val sessionId = customTabSessionId ?: return super.onBackPressed()
|
||||
|
||||
val tab = components.core.store.state.findCustomTab(sessionId)
|
||||
if (tab?.content?.canGoBack == true) {
|
||||
components.useCases.sessionUseCases.goBack(sessionId)
|
||||
return true
|
||||
}
|
||||
|
||||
requireActivity().finishAndRemoveTask()
|
||||
return true
|
||||
return super.onBackPressed()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
||||
+4
-4
@@ -73,19 +73,19 @@ object GlobalComponents {
|
||||
// External download manager setting
|
||||
var useExternalDownloadManager: Boolean = false
|
||||
|
||||
fun shouldOpenLinksInApp(): Boolean {
|
||||
fun shouldOpenLinksInApp(isExternalSession: Boolean = false): Boolean {
|
||||
return when (engineSettingsApi!!.getAppLinksMode()) {
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS -> true
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ASK -> true
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.NEVER -> false
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.NEVER -> isExternalSession
|
||||
}
|
||||
}
|
||||
|
||||
fun shouldPromptOpenLinksInApp(): Boolean {
|
||||
fun shouldPromptOpenLinksInApp(isExternalSession: Boolean = false): Boolean {
|
||||
return when (engineSettingsApi!!.getAppLinksMode()) {
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS -> false
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ASK -> true
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.NEVER -> false
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.NEVER -> isExternalSession
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-9
@@ -10,6 +10,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.activity.addCallback
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.WindowCompat
|
||||
import eu.weblibre.flutter_mozilla_components.ExternalAppBrowserFragment
|
||||
@@ -65,6 +66,17 @@ class ExternalAppBrowserActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
val fragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||
if (fragment is UserInteractionHandler && fragment.onBackPressed()) {
|
||||
return@addCallback
|
||||
}
|
||||
|
||||
isEnabled = false
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
isEnabled = true
|
||||
}
|
||||
|
||||
val sessionId = customTabSessionId
|
||||
if (sessionId == null) {
|
||||
Log.e(TAG, "No custom tab session ID provided")
|
||||
@@ -187,15 +199,6 @@ class ExternalAppBrowserActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onBackPressed() {
|
||||
val fragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||
if (fragment is UserInteractionHandler && fragment.onBackPressed()) {
|
||||
return
|
||||
}
|
||||
super.onBackPressed()
|
||||
}
|
||||
|
||||
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
|
||||
super.onPictureInPictureModeChanged(isInPictureInPictureMode)
|
||||
val fragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||
|
||||
Reference in New Issue
Block a user