support for external download managers
This commit is contained in:
+3
@@ -287,6 +287,9 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
|
||||
onNeedToRequestPermissions = { permissions ->
|
||||
requestDownloadPermissionsLauncher.launch(permissions)
|
||||
},
|
||||
shouldForwardToThirdParties = {
|
||||
GlobalComponents.useExternalDownloadManager
|
||||
},
|
||||
),
|
||||
owner = this,
|
||||
view = view,
|
||||
|
||||
+3
@@ -57,6 +57,9 @@ object GlobalComponents {
|
||||
// Engine settings API for managing engine-specific settings
|
||||
var engineSettingsApi: GeckoEngineSettingsApiImpl? = null
|
||||
|
||||
// External download manager setting
|
||||
var useExternalDownloadManager: Boolean = false
|
||||
|
||||
fun shouldOpenLinksInApp(): Boolean {
|
||||
return when (engineSettingsApi!!.getAppLinksMode()) {
|
||||
eu.weblibre.flutter_mozilla_components.pigeons.AppLinksMode.ALWAYS -> true
|
||||
|
||||
+8
@@ -350,4 +350,12 @@ class GeckoEngineSettingsApiImpl : GeckoEngineSettingsApi {
|
||||
else -> AppLinksMode.ASK
|
||||
}
|
||||
}
|
||||
|
||||
override fun setUseExternalDownloadManager(enabled: Boolean) {
|
||||
GlobalComponents.useExternalDownloadManager = enabled
|
||||
}
|
||||
|
||||
override fun getUseExternalDownloadManager(): Boolean {
|
||||
return GlobalComponents.useExternalDownloadManager
|
||||
}
|
||||
}
|
||||
|
||||
+39
@@ -3850,6 +3850,12 @@ interface GeckoEngineSettingsApi {
|
||||
*/
|
||||
fun setAppLinksMode(mode: AppLinksMode)
|
||||
fun getAppLinksMode(): AppLinksMode
|
||||
/**
|
||||
* Sets whether to use external download managers for downloads.
|
||||
* When enabled, downloads are forwarded to third-party apps like ADM, 1DM, AB DM.
|
||||
*/
|
||||
fun setUseExternalDownloadManager(enabled: Boolean)
|
||||
fun getUseExternalDownloadManager(): Boolean
|
||||
|
||||
companion object {
|
||||
/** The codec used by GeckoEngineSettingsApi. */
|
||||
@@ -3947,6 +3953,39 @@ interface GeckoEngineSettingsApi {
|
||||
channel.setMessageHandler(null)
|
||||
}
|
||||
}
|
||||
run {
|
||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoEngineSettingsApi.setUseExternalDownloadManager$separatedMessageChannelSuffix", codec)
|
||||
if (api != null) {
|
||||
channel.setMessageHandler { message, reply ->
|
||||
val args = message as List<Any?>
|
||||
val enabledArg = args[0] as Boolean
|
||||
val wrapped: List<Any?> = try {
|
||||
api.setUseExternalDownloadManager(enabledArg)
|
||||
listOf(null)
|
||||
} catch (exception: Throwable) {
|
||||
GeckoPigeonUtils.wrapError(exception)
|
||||
}
|
||||
reply.reply(wrapped)
|
||||
}
|
||||
} else {
|
||||
channel.setMessageHandler(null)
|
||||
}
|
||||
}
|
||||
run {
|
||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoEngineSettingsApi.getUseExternalDownloadManager$separatedMessageChannelSuffix", codec)
|
||||
if (api != null) {
|
||||
channel.setMessageHandler { _, reply ->
|
||||
val wrapped: List<Any?> = try {
|
||||
listOf(api.getUseExternalDownloadManager())
|
||||
} catch (exception: Throwable) {
|
||||
GeckoPigeonUtils.wrapError(exception)
|
||||
}
|
||||
reply.reply(wrapped)
|
||||
}
|
||||
} else {
|
||||
channel.setMessageHandler(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user