Fix bugs when selecting a file crash when a webview widget is reopened

This commit is contained in:
crazecoder 2019-11-13 16:02:19 +08:00
parent fead4fb247
commit ffb36fa966
2 changed files with 466 additions and 462 deletions

View File

@ -1,6 +1,8 @@
package com.pichillilorenzo.flutter_inappbrowser;
import android.net.Uri;
import android.os.Build;
import android.webkit.ValueCallback;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry;
@ -15,6 +17,8 @@ public class InAppBrowserFlutterPlugin implements FlutterPlugin {
public static InAppBrowser inAppBrowser;
public static MyCookieManager myCookieManager;
public static CredentialDatabaseHandler credentialDatabaseHandler;
public static ValueCallback<Uri[]> uploadMessageArray;
public InAppBrowserFlutterPlugin() {}
@ -61,5 +65,6 @@ public class InAppBrowserFlutterPlugin implements FlutterPlugin {
credentialDatabaseHandler.dispose();
credentialDatabaseHandler = null;
}
uploadMessageArray = null;
}
}

View File

@ -44,7 +44,6 @@ public class InAppWebChromeClient extends WebChromeClient implements PluginRegis
private PluginRegistry.Registrar registrar;
private FlutterWebView flutterWebView;
private InAppBrowserActivity inAppBrowserActivity;
private ValueCallback<Uri[]> mUploadMessageArray;
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
@ -520,7 +519,7 @@ public class InAppWebChromeClient extends WebChromeClient implements PluginRegis
public boolean onShowFileChooser(
WebView webView, ValueCallback<Uri[]> filePathCallback,
FileChooserParams fileChooserParams) {
mUploadMessageArray = filePathCallback;
InAppBrowserFlutterPlugin.uploadMessageArray = filePathCallback;
try {
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
@ -543,10 +542,10 @@ public class InAppWebChromeClient extends WebChromeClient implements PluginRegis
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILECHOOSER_RESULTCODE && (resultCode == RESULT_OK || resultCode == RESULT_CANCELED)) {
mUploadMessageArray.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
if (requestCode == FILECHOOSER_RESULTCODE && (resultCode == RESULT_OK || resultCode == RESULT_CANCELED) && InAppBrowserFlutterPlugin.uploadMessageArray != null) {
InAppBrowserFlutterPlugin.uploadMessageArray.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
}
return false;
return true;
}
private MethodChannel getChannel() {