From d58d57dfa074576afd60e0fc33f23bf9f8a5b949 Mon Sep 17 00:00:00 2001 From: crazecoder <21527312@qq.com> Date: Wed, 30 Oct 2019 14:15:08 +0800 Subject: [PATCH 1/2] fix #27924 Only applicable to android5.0 or above --- .../webviewflutter/FlutterWebView.java | 12 +- .../FlutterWebViewChromeClient.java | 199 ++++++++++++++++++ .../webviewflutter/WebViewFactory.java | 11 +- .../webviewflutter/WebViewFlutterPlugin.java | 2 +- 4 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java index a7f2db308e15..673937ad139d 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java @@ -17,6 +17,7 @@ import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.platform.PlatformView; import java.util.Collections; import java.util.List; @@ -33,11 +34,12 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { @SuppressWarnings("unchecked") FlutterWebView( final Context context, - BinaryMessenger messenger, int id, Map params, - final View containerView) { - + PluginRegistry.Registrar registrar + ) { + BinaryMessenger messenger = registrar.messenger(); + final View containerView = registrar.view(); DisplayListenerProxy displayListenerProxy = new DisplayListenerProxy(); DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); @@ -48,6 +50,10 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { platformThreadHandler = new Handler(context.getMainLooper()); // Allow local storage. webView.getSettings().setDomStorageEnabled(true); + // choose file + webView.getSettings().setAllowFileAccess(true); + final FlutterWebViewChromeClient webViewChromeClient = new FlutterWebViewChromeClient(registrar); + webView.setWebChromeClient(webViewChromeClient); methodChannel = new MethodChannel(messenger, "plugins.flutter.io/webview_" + id); methodChannel.setMethodCallHandler(this); diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java new file mode 100644 index 000000000000..d1f660c52771 --- /dev/null +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java @@ -0,0 +1,199 @@ +package io.flutter.plugins.webviewflutter; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Message; +import android.view.View; +import android.webkit.ConsoleMessage; +import android.webkit.GeolocationPermissions; +import android.webkit.JsPromptResult; +import android.webkit.JsResult; +import android.webkit.PermissionRequest; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebStorage; +import android.webkit.WebView; +import android.widget.Toast; + +import androidx.annotation.Nullable; + +import io.flutter.plugin.common.PluginRegistry; + +import static android.app.Activity.RESULT_CANCELED; +import static android.app.Activity.RESULT_OK; + +public class FlutterWebViewChromeClient extends WebChromeClient implements PluginRegistry.ActivityResultListener { + private static final int REQUEST_CODE_FILE_CHOOSER = 0x12; + + private ValueCallback filePathCallback; + + private PluginRegistry.Registrar registrar; + + public FlutterWebViewChromeClient(PluginRegistry.Registrar registrar) { + super(); + this.registrar = registrar; + registrar.addActivityResultListener(this); + } + + @Override + public void onProgressChanged(WebView view, int newProgress) { + super.onProgressChanged(view, newProgress); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + } + + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + super.onReceivedIcon(view, icon); + } + + @Override + public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) { + super.onReceivedTouchIconUrl(view, url, precomposed); + } + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + super.onShowCustomView(view, callback); + } + + @Override + public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { + super.onShowCustomView(view, requestedOrientation, callback); + } + + @Override + public void onHideCustomView() { + super.onHideCustomView(); + } + + @Override + public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { + return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg); + } + + @Override + public void onRequestFocus(WebView view) { + super.onRequestFocus(view); + } + + @Override + public void onCloseWindow(WebView window) { + super.onCloseWindow(window); + } + + @Override + public boolean onJsAlert(WebView view, String url, String message, JsResult result) { + return super.onJsAlert(view, url, message, result); + } + + @Override + public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { + return super.onJsConfirm(view, url, message, result); + } + + @Override + public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { + return super.onJsPrompt(view, url, message, defaultValue, result); + } + + @Override + public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { + return super.onJsBeforeUnload(view, url, message, result); + } + + @Override + public void onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater) { + super.onExceededDatabaseQuota(url, databaseIdentifier, quota, estimatedDatabaseSize, totalQuota, quotaUpdater); + } + + @Override + public void onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) { + super.onReachedMaxAppCacheSize(requiredStorage, quota, quotaUpdater); + } + + @Override + public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { + super.onGeolocationPermissionsShowPrompt(origin, callback); + } + + @Override + public void onGeolocationPermissionsHidePrompt() { + super.onGeolocationPermissionsHidePrompt(); + } + + @Override + public void onPermissionRequest(PermissionRequest request) { + super.onPermissionRequest(request); + } + + @Override + public void onPermissionRequestCanceled(PermissionRequest request) { + super.onPermissionRequestCanceled(request); + } + + @Override + public boolean onJsTimeout() { + return super.onJsTimeout(); + } + + @Override + public void onConsoleMessage(String message, int lineNumber, String sourceID) { + super.onConsoleMessage(message, lineNumber, sourceID); + } + + @Override + public boolean onConsoleMessage(ConsoleMessage consoleMessage) { + return super.onConsoleMessage(consoleMessage); + } + + @Nullable + @Override + public Bitmap getDefaultVideoPoster() { + return super.getDefaultVideoPoster(); + } + + @Nullable + @Override + public View getVideoLoadingProgressView() { + return super.getVideoLoadingProgressView(); + } + + @Override + public void getVisitedHistory(ValueCallback callback) { + super.getVisitedHistory(callback); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { + this.filePathCallback = filePathCallback; + Intent intent = fileChooserParams.createIntent(); + intent.addCategory(Intent.CATEGORY_OPENABLE); + try { + registrar.activity().startActivityForResult(intent, REQUEST_CODE_FILE_CHOOSER); + } catch (ActivityNotFoundException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CODE_FILE_CHOOSER && (resultCode == RESULT_OK || resultCode == RESULT_CANCELED)) { + filePathCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data)); + } + return false; + } +} diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java index 6fdc36fbe545..18730b881091 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java @@ -7,25 +7,24 @@ import android.content.Context; import android.view.View; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.StandardMessageCodec; import io.flutter.plugin.platform.PlatformView; import io.flutter.plugin.platform.PlatformViewFactory; import java.util.Map; public final class WebViewFactory extends PlatformViewFactory { - private final BinaryMessenger messenger; - private final View containerView; + private final PluginRegistry.Registrar registrar; - WebViewFactory(BinaryMessenger messenger, View containerView) { + WebViewFactory(PluginRegistry.Registrar registrar) { super(StandardMessageCodec.INSTANCE); - this.messenger = messenger; - this.containerView = containerView; + this.registrar = registrar; } @SuppressWarnings("unchecked") @Override public PlatformView create(Context context, int id, Object args) { Map params = (Map) args; - return new FlutterWebView(context, messenger, id, params, containerView); + return new FlutterWebView(context, id, params, registrar); } } diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java index 17177541222c..62c8eb34d5ad 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java @@ -14,7 +14,7 @@ public static void registerWith(Registrar registrar) { .platformViewRegistry() .registerViewFactory( "plugins.flutter.io/webview", - new WebViewFactory(registrar.messenger(), registrar.view())); + new WebViewFactory(registrar)); FlutterCookieManager.registerWith(registrar.messenger()); } } From 4bd5bed4e9054f99d37fd9dbc879c29756f751d6 Mon Sep 17 00:00:00 2001 From: crazecoder <21527312@qq.com> Date: Wed, 30 Oct 2019 15:14:00 +0800 Subject: [PATCH 2/2] format --- .../webviewflutter/FlutterWebView.java | 6 +- .../FlutterWebViewChromeClient.java | 362 +++++++++--------- .../webviewflutter/WebViewFactory.java | 2 - .../webviewflutter/WebViewFlutterPlugin.java | 4 +- 4 files changed, 190 insertions(+), 184 deletions(-) diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java index 673937ad139d..e418ab8ebd00 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java @@ -36,8 +36,7 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { final Context context, int id, Map params, - PluginRegistry.Registrar registrar - ) { + PluginRegistry.Registrar registrar) { BinaryMessenger messenger = registrar.messenger(); final View containerView = registrar.view(); DisplayListenerProxy displayListenerProxy = new DisplayListenerProxy(); @@ -52,7 +51,8 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { webView.getSettings().setDomStorageEnabled(true); // choose file webView.getSettings().setAllowFileAccess(true); - final FlutterWebViewChromeClient webViewChromeClient = new FlutterWebViewChromeClient(registrar); + final FlutterWebViewChromeClient webViewChromeClient = + new FlutterWebViewChromeClient(registrar); webView.setWebChromeClient(webViewChromeClient); methodChannel = new MethodChannel(messenger, "plugins.flutter.io/webview_" + id); diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java index d1f660c52771..dae2a9d6f4f0 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewChromeClient.java @@ -1,9 +1,10 @@ package io.flutter.plugins.webviewflutter; +import static android.app.Activity.RESULT_CANCELED; +import static android.app.Activity.RESULT_OK; + import android.annotation.TargetApi; -import android.app.Activity; import android.content.ActivityNotFoundException; -import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; @@ -19,181 +20,190 @@ import android.webkit.WebChromeClient; import android.webkit.WebStorage; import android.webkit.WebView; -import android.widget.Toast; - import androidx.annotation.Nullable; - import io.flutter.plugin.common.PluginRegistry; -import static android.app.Activity.RESULT_CANCELED; -import static android.app.Activity.RESULT_OK; - -public class FlutterWebViewChromeClient extends WebChromeClient implements PluginRegistry.ActivityResultListener { - private static final int REQUEST_CODE_FILE_CHOOSER = 0x12; - - private ValueCallback filePathCallback; - - private PluginRegistry.Registrar registrar; - - public FlutterWebViewChromeClient(PluginRegistry.Registrar registrar) { - super(); - this.registrar = registrar; - registrar.addActivityResultListener(this); - } - - @Override - public void onProgressChanged(WebView view, int newProgress) { - super.onProgressChanged(view, newProgress); - } - - @Override - public void onReceivedTitle(WebView view, String title) { - super.onReceivedTitle(view, title); - } - - @Override - public void onReceivedIcon(WebView view, Bitmap icon) { - super.onReceivedIcon(view, icon); - } - - @Override - public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) { - super.onReceivedTouchIconUrl(view, url, precomposed); - } - - @Override - public void onShowCustomView(View view, CustomViewCallback callback) { - super.onShowCustomView(view, callback); - } - - @Override - public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { - super.onShowCustomView(view, requestedOrientation, callback); - } - - @Override - public void onHideCustomView() { - super.onHideCustomView(); - } - - @Override - public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { - return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg); - } - - @Override - public void onRequestFocus(WebView view) { - super.onRequestFocus(view); - } - - @Override - public void onCloseWindow(WebView window) { - super.onCloseWindow(window); - } - - @Override - public boolean onJsAlert(WebView view, String url, String message, JsResult result) { - return super.onJsAlert(view, url, message, result); - } - - @Override - public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { - return super.onJsConfirm(view, url, message, result); - } - - @Override - public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { - return super.onJsPrompt(view, url, message, defaultValue, result); - } - - @Override - public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { - return super.onJsBeforeUnload(view, url, message, result); - } - - @Override - public void onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater) { - super.onExceededDatabaseQuota(url, databaseIdentifier, quota, estimatedDatabaseSize, totalQuota, quotaUpdater); - } - - @Override - public void onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) { - super.onReachedMaxAppCacheSize(requiredStorage, quota, quotaUpdater); - } - - @Override - public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { - super.onGeolocationPermissionsShowPrompt(origin, callback); - } - - @Override - public void onGeolocationPermissionsHidePrompt() { - super.onGeolocationPermissionsHidePrompt(); - } - - @Override - public void onPermissionRequest(PermissionRequest request) { - super.onPermissionRequest(request); - } - - @Override - public void onPermissionRequestCanceled(PermissionRequest request) { - super.onPermissionRequestCanceled(request); - } - - @Override - public boolean onJsTimeout() { - return super.onJsTimeout(); - } - - @Override - public void onConsoleMessage(String message, int lineNumber, String sourceID) { - super.onConsoleMessage(message, lineNumber, sourceID); - } - - @Override - public boolean onConsoleMessage(ConsoleMessage consoleMessage) { - return super.onConsoleMessage(consoleMessage); - } - - @Nullable - @Override - public Bitmap getDefaultVideoPoster() { - return super.getDefaultVideoPoster(); - } - - @Nullable - @Override - public View getVideoLoadingProgressView() { - return super.getVideoLoadingProgressView(); - } - - @Override - public void getVisitedHistory(ValueCallback callback) { - super.getVisitedHistory(callback); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @Override - public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { - this.filePathCallback = filePathCallback; - Intent intent = fileChooserParams.createIntent(); - intent.addCategory(Intent.CATEGORY_OPENABLE); - try { - registrar.activity().startActivityForResult(intent, REQUEST_CODE_FILE_CHOOSER); - } catch (ActivityNotFoundException e) { - e.printStackTrace(); - return false; - } - return true; - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @Override - public boolean onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_CODE_FILE_CHOOSER && (resultCode == RESULT_OK || resultCode == RESULT_CANCELED)) { - filePathCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data)); - } - return false; - } +public class FlutterWebViewChromeClient extends WebChromeClient + implements PluginRegistry.ActivityResultListener { + private static final int REQUEST_CODE_FILE_CHOOSER = 0x12; + + private ValueCallback filePathCallback; + + private PluginRegistry.Registrar registrar; + + public FlutterWebViewChromeClient(PluginRegistry.Registrar registrar) { + super(); + this.registrar = registrar; + registrar.addActivityResultListener(this); + } + + @Override + public void onProgressChanged(WebView view, int newProgress) { + super.onProgressChanged(view, newProgress); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + } + + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + super.onReceivedIcon(view, icon); + } + + @Override + public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) { + super.onReceivedTouchIconUrl(view, url, precomposed); + } + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + super.onShowCustomView(view, callback); + } + + @Override + public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { + super.onShowCustomView(view, requestedOrientation, callback); + } + + @Override + public void onHideCustomView() { + super.onHideCustomView(); + } + + @Override + public boolean onCreateWindow( + WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { + return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg); + } + + @Override + public void onRequestFocus(WebView view) { + super.onRequestFocus(view); + } + + @Override + public void onCloseWindow(WebView window) { + super.onCloseWindow(window); + } + + @Override + public boolean onJsAlert(WebView view, String url, String message, JsResult result) { + return super.onJsAlert(view, url, message, result); + } + + @Override + public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { + return super.onJsConfirm(view, url, message, result); + } + + @Override + public boolean onJsPrompt( + WebView view, String url, String message, String defaultValue, JsPromptResult result) { + return super.onJsPrompt(view, url, message, defaultValue, result); + } + + @Override + public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { + return super.onJsBeforeUnload(view, url, message, result); + } + + @Override + public void onExceededDatabaseQuota( + String url, + String databaseIdentifier, + long quota, + long estimatedDatabaseSize, + long totalQuota, + WebStorage.QuotaUpdater quotaUpdater) { + super.onExceededDatabaseQuota( + url, databaseIdentifier, quota, estimatedDatabaseSize, totalQuota, quotaUpdater); + } + + @Override + public void onReachedMaxAppCacheSize( + long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) { + super.onReachedMaxAppCacheSize(requiredStorage, quota, quotaUpdater); + } + + @Override + public void onGeolocationPermissionsShowPrompt( + String origin, GeolocationPermissions.Callback callback) { + super.onGeolocationPermissionsShowPrompt(origin, callback); + } + + @Override + public void onGeolocationPermissionsHidePrompt() { + super.onGeolocationPermissionsHidePrompt(); + } + + @Override + public void onPermissionRequest(PermissionRequest request) { + super.onPermissionRequest(request); + } + + @Override + public void onPermissionRequestCanceled(PermissionRequest request) { + super.onPermissionRequestCanceled(request); + } + + @Override + public boolean onJsTimeout() { + return super.onJsTimeout(); + } + + @Override + public void onConsoleMessage(String message, int lineNumber, String sourceID) { + super.onConsoleMessage(message, lineNumber, sourceID); + } + + @Override + public boolean onConsoleMessage(ConsoleMessage consoleMessage) { + return super.onConsoleMessage(consoleMessage); + } + + @Nullable + @Override + public Bitmap getDefaultVideoPoster() { + return super.getDefaultVideoPoster(); + } + + @Nullable + @Override + public View getVideoLoadingProgressView() { + return super.getVideoLoadingProgressView(); + } + + @Override + public void getVisitedHistory(ValueCallback callback) { + super.getVisitedHistory(callback); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean onShowFileChooser( + WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { + this.filePathCallback = filePathCallback; + Intent intent = fileChooserParams.createIntent(); + intent.addCategory(Intent.CATEGORY_OPENABLE); + try { + registrar.activity().startActivityForResult(intent, REQUEST_CODE_FILE_CHOOSER); + } catch (ActivityNotFoundException e) { + e.printStackTrace(); + return false; + } + return true; + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CODE_FILE_CHOOSER + && (resultCode == RESULT_OK || resultCode == RESULT_CANCELED)) { + filePathCallback.onReceiveValue( + WebChromeClient.FileChooserParams.parseResult(resultCode, data)); + } + return false; + } } diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java index 18730b881091..8b60ecf31ed0 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFactory.java @@ -5,8 +5,6 @@ package io.flutter.plugins.webviewflutter; import android.content.Context; -import android.view.View; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.StandardMessageCodec; import io.flutter.plugin.platform.PlatformView; diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java index 62c8eb34d5ad..bea232d4d817 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java @@ -12,9 +12,7 @@ public class WebViewFlutterPlugin { public static void registerWith(Registrar registrar) { registrar .platformViewRegistry() - .registerViewFactory( - "plugins.flutter.io/webview", - new WebViewFactory(registrar)); + .registerViewFactory("plugins.flutter.io/webview", new WebViewFactory(registrar)); FlutterCookieManager.registerWith(registrar.messenger()); } }