From c42644cf194743149a28977acffc3b98d903fadd Mon Sep 17 00:00:00 2001 From: hisaichi5518 Date: Mon, 21 Sep 2020 00:00:19 +0900 Subject: [PATCH] set DownloadListener --- .../native_webview/NativeWebView.kt | 16 ++++++++++- example/lib/main.dart | 2 ++ example/lib/screens/pdf_screen.dart | 28 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 example/lib/screens/pdf_screen.dart diff --git a/android/src/main/kotlin/com/hisaichi5518/native_webview/NativeWebView.kt b/android/src/main/kotlin/com/hisaichi5518/native_webview/NativeWebView.kt index c9380c4..cc998b9 100644 --- a/android/src/main/kotlin/com/hisaichi5518/native_webview/NativeWebView.kt +++ b/android/src/main/kotlin/com/hisaichi5518/native_webview/NativeWebView.kt @@ -2,10 +2,13 @@ package com.hisaichi5518.native_webview import android.annotation.SuppressLint import android.content.Context -import android.os.IBinder +import android.content.Intent +import android.net.Uri +import android.os.Bundle import android.view.* import android.widget.LinearLayout import android.widget.TextView +import androidx.core.content.ContextCompat.startActivity import io.flutter.plugin.common.MethodChannel class NativeWebView(context: Context, channel: MethodChannel, options: WebViewOptions) : InputAwareWebView(context, null as View?) { @@ -22,6 +25,17 @@ class NativeWebView(context: Context, channel: MethodChannel, options: WebViewOp settings.useWideViewPort = true settings.loadWithOverviewMode = true addJavascriptInterface(JavascriptHandler(channel), NativeWebChromeClient.JAVASCRIPT_BRIDGE_NAME) + + setDownloadListener { url, _, _, mimetype, _ -> + val intent = Intent(Intent.ACTION_VIEW) + intent.type = mimetype + intent.data = Uri.parse(url) + + val activity = Locator.activity ?: return@setDownloadListener + if (intent.resolveActivity(activity.packageManager) != null) { + startActivity(activity, intent, Bundle()) + } + } } fun load(initialData: Map?, initialFile: String?, initialURL: String, initialHeaders: Map?) { diff --git a/example/lib/main.dart b/example/lib/main.dart index 5bb7ff4..d6f97ed 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -6,6 +6,7 @@ import 'package:native_webview_example/screens/initial_url_screen.dart'; import 'package:native_webview_example/screens/multiple_webviews_screen.dart'; import 'package:native_webview_example/screens/on_js_prompt_screen.dart'; import 'package:native_webview_example/screens/open_dropdown_screen.dart'; +import 'package:native_webview_example/screens/pdf_screen.dart'; import 'package:native_webview_example/screens/target_blank_screen.dart'; void main() { @@ -27,6 +28,7 @@ class _MyAppState extends State { TargetBlankScreen(), MultipleWebViewsScreen(), BasicAuthScreen(), + PdfScreen(), ]; @override diff --git a/example/lib/screens/pdf_screen.dart b/example/lib/screens/pdf_screen.dart new file mode 100644 index 0000000..bc7a1e0 --- /dev/null +++ b/example/lib/screens/pdf_screen.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:native_webview/native_webview.dart'; + +class PdfScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text("Initial Data with baseURL"), + ), + body: WebView( + initialData: WebViewData(""" + + + + + + + + +Alphabet Song(PDF) + + + """), + ), + ); + } +}