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.ReadabilityExtractFeature
|
||||||
import eu.weblibre.flutter_mozilla_components.feature.WebExtensionToolbarFeature
|
import eu.weblibre.flutter_mozilla_components.feature.WebExtensionToolbarFeature
|
||||||
import eu.weblibre.flutter_mozilla_components.integration.ReaderViewIntegration
|
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 eu.weblibre.flutter_mozilla_components.services.DownloadService
|
||||||
import io.flutter.Log
|
import io.flutter.Log
|
||||||
import mozilla.components.browser.state.action.TabListAction
|
import mozilla.components.browser.state.action.TabListAction
|
||||||
@@ -307,8 +308,16 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
|
|||||||
sessionId = sessionId,
|
sessionId = sessionId,
|
||||||
fragmentManager = parentFragmentManager,
|
fragmentManager = parentFragmentManager,
|
||||||
loadUrlUseCase = components.useCases.sessionUseCases.loadUrl,
|
loadUrlUseCase = components.useCases.sessionUseCases.loadUrl,
|
||||||
launchInApp = { GlobalComponents.shouldOpenLinksInApp() },
|
launchInApp = {
|
||||||
shouldPrompt = { GlobalComponents.shouldPromptOpenLinksInApp() },
|
GlobalComponents.shouldOpenLinksInApp(
|
||||||
|
requireActivity() is ExternalAppBrowserActivity
|
||||||
|
)
|
||||||
|
},
|
||||||
|
shouldPrompt = {
|
||||||
|
GlobalComponents.shouldPromptOpenLinksInApp(
|
||||||
|
requireActivity() is ExternalAppBrowserActivity
|
||||||
|
)
|
||||||
|
},
|
||||||
alwaysOpenCheckboxAction = {
|
alwaysOpenCheckboxAction = {
|
||||||
GlobalComponents.engineSettingsApi?.setAppLinksMode(
|
GlobalComponents.engineSettingsApi?.setAppLinksMode(
|
||||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS
|
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS
|
||||||
|
|||||||
+1
-10
@@ -333,16 +333,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed(): Boolean {
|
override fun onBackPressed(): Boolean {
|
||||||
val sessionId = customTabSessionId ?: return super.onBackPressed()
|
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|||||||
+4
-4
@@ -73,19 +73,19 @@ object GlobalComponents {
|
|||||||
// External download manager setting
|
// External download manager setting
|
||||||
var useExternalDownloadManager: Boolean = false
|
var useExternalDownloadManager: Boolean = false
|
||||||
|
|
||||||
fun shouldOpenLinksInApp(): Boolean {
|
fun shouldOpenLinksInApp(isExternalSession: Boolean = false): Boolean {
|
||||||
return when (engineSettingsApi!!.getAppLinksMode()) {
|
return when (engineSettingsApi!!.getAppLinksMode()) {
|
||||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS -> true
|
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.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()) {
|
return when (engineSettingsApi!!.getAppLinksMode()) {
|
||||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS -> false
|
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.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.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.activity.addCallback
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import eu.weblibre.flutter_mozilla_components.ExternalAppBrowserFragment
|
import eu.weblibre.flutter_mozilla_components.ExternalAppBrowserFragment
|
||||||
@@ -65,6 +66,17 @@ class ExternalAppBrowserActivity : AppCompatActivity() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
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
|
val sessionId = customTabSessionId
|
||||||
if (sessionId == null) {
|
if (sessionId == null) {
|
||||||
Log.e(TAG, "No custom tab session ID provided")
|
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) {
|
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
|
||||||
super.onPictureInPictureModeChanged(isInPictureInPictureMode)
|
super.onPictureInPictureModeChanged(isInPictureInPictureMode)
|
||||||
val fragment = supportFragmentManager.findFragmentById(R.id.container)
|
val fragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||||
|
|||||||
Reference in New Issue
Block a user