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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -148,4 +148,14 @@ class GeckoEngineSettingsService {
|
||||
Future<AppLinksMode> getAppLinksMode() {
|
||||
return _api.getAppLinksMode();
|
||||
}
|
||||
|
||||
/// Sets whether to use external download managers for downloads.
|
||||
/// When enabled, downloads are forwarded to third-party apps like ADM, 1DM, AB DM.
|
||||
Future<void> setUseExternalDownloadManager(bool enabled) {
|
||||
return _api.setUseExternalDownloadManager(enabled);
|
||||
}
|
||||
|
||||
Future<bool> getUseExternalDownloadManager() {
|
||||
return _api.getUseExternalDownloadManager();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4481,6 +4481,57 @@ class GeckoEngineSettingsApi {
|
||||
return (pigeonVar_replyList[0] as AppLinksMode?)!;
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets whether to use external download managers for downloads.
|
||||
/// When enabled, downloads are forwarded to third-party apps like ADM, 1DM, AB DM.
|
||||
Future<void> setUseExternalDownloadManager(bool enabled) async {
|
||||
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoEngineSettingsApi.setUseExternalDownloadManager$pigeonVar_messageChannelSuffix';
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[enabled]);
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
throw PlatformException(
|
||||
code: pigeonVar_replyList[0]! as String,
|
||||
message: pigeonVar_replyList[1] as String?,
|
||||
details: pigeonVar_replyList[2],
|
||||
);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> getUseExternalDownloadManager() async {
|
||||
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoEngineSettingsApi.getUseExternalDownloadManager$pigeonVar_messageChannelSuffix';
|
||||
final pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||
pigeonVar_channelName,
|
||||
pigeonChannelCodec,
|
||||
binaryMessenger: pigeonVar_binaryMessenger,
|
||||
);
|
||||
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
|
||||
if (pigeonVar_replyList == null) {
|
||||
throw _createConnectionError(pigeonVar_channelName);
|
||||
} else if (pigeonVar_replyList.length > 1) {
|
||||
throw PlatformException(
|
||||
code: pigeonVar_replyList[0]! as String,
|
||||
message: pigeonVar_replyList[1] as String?,
|
||||
details: pigeonVar_replyList[2],
|
||||
);
|
||||
} else if (pigeonVar_replyList[0] == null) {
|
||||
throw PlatformException(
|
||||
code: 'null-error',
|
||||
message: 'Host platform returned null value for non-null return value.',
|
||||
);
|
||||
} else {
|
||||
return (pigeonVar_replyList[0] as bool?)!;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GeckoSessionApi {
|
||||
|
||||
@@ -1012,6 +1012,12 @@ abstract class GeckoEngineSettingsApi {
|
||||
void setAppLinksMode(AppLinksMode mode);
|
||||
|
||||
AppLinksMode getAppLinksMode();
|
||||
|
||||
/// Sets whether to use external download managers for downloads.
|
||||
/// When enabled, downloads are forwarded to third-party apps like ADM, 1DM, AB DM.
|
||||
void setUseExternalDownloadManager(bool enabled);
|
||||
|
||||
bool getUseExternalDownloadManager();
|
||||
}
|
||||
|
||||
@HostApi()
|
||||
|
||||
Reference in New Issue
Block a user