fix #1159
This commit is contained in:
parent
9aa812e130
commit
ad04812a6e
|
@ -1,3 +1,7 @@
|
||||||
|
## 5.4.3+1
|
||||||
|
|
||||||
|
- Fixed "Latest version 5.4.3 crashes on Android" [#1159](https://github.com/pichillilorenzo/flutter_inappwebview/issues/1159)
|
||||||
|
|
||||||
## 5.4.3
|
## 5.4.3
|
||||||
|
|
||||||
- Added Bitwise OR operator support for `AndroidActionModeMenuItem` class
|
- Added Bitwise OR operator support for `AndroidActionModeMenuItem` class
|
||||||
|
|
|
@ -36,7 +36,8 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
|
||||||
public String id;
|
public String id;
|
||||||
public CustomTabsIntent.Builder builder;
|
public CustomTabsIntent.Builder builder;
|
||||||
public ChromeCustomTabsOptions options;
|
public ChromeCustomTabsOptions options;
|
||||||
public CustomTabActivityHelper customTabActivityHelper;
|
public CustomTabActivityHelper customTabActivityHelper = new CustomTabActivityHelper();
|
||||||
|
@Nullable
|
||||||
public CustomTabsSession customTabsSession;
|
public CustomTabsSession customTabsSession;
|
||||||
protected final int CHROME_CUSTOM_TAB_REQUEST_CODE = 100;
|
protected final int CHROME_CUSTOM_TAB_REQUEST_CODE = 100;
|
||||||
protected boolean onChromeSafariBrowserOpened = false;
|
protected boolean onChromeSafariBrowserOpened = false;
|
||||||
|
@ -60,7 +61,8 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
|
||||||
id = b.getString("id");
|
id = b.getString("id");
|
||||||
|
|
||||||
String managerId = b.getString("managerId");
|
String managerId = b.getString("managerId");
|
||||||
manager = (ChromeSafariBrowserManager) ChromeSafariBrowserManager.shared.get(managerId);
|
manager = ChromeSafariBrowserManager.shared.get(managerId);
|
||||||
|
if (manager == null || manager.plugin == null|| manager.plugin.messenger == null) return;
|
||||||
|
|
||||||
channel = new MethodChannel(manager.plugin.messenger, "com.pichillilorenzo/flutter_chromesafaribrowser_" + id);
|
channel = new MethodChannel(manager.plugin.messenger, "com.pichillilorenzo/flutter_chromesafaribrowser_" + id);
|
||||||
channel.setMethodCallHandler(this);
|
channel.setMethodCallHandler(this);
|
||||||
|
@ -77,7 +79,6 @@ public class ChromeCustomTabsActivity extends Activity implements MethodChannel.
|
||||||
|
|
||||||
final ChromeCustomTabsActivity chromeCustomTabsActivity = this;
|
final ChromeCustomTabsActivity chromeCustomTabsActivity = this;
|
||||||
|
|
||||||
customTabActivityHelper = new CustomTabActivityHelper();
|
|
||||||
customTabActivityHelper.setConnectionCallback(new CustomTabActivityHelper.ConnectionCallback() {
|
customTabActivityHelper.setConnectionCallback(new CustomTabActivityHelper.ConnectionCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onCustomTabsConnected() {
|
public void onCustomTabsConnected() {
|
||||||
|
|
|
@ -112,7 +112,9 @@ public class CredentialDatabaseHandler implements MethodChannel.MethodCallHandle
|
||||||
break;
|
break;
|
||||||
case "clearAllAuthCredentials":
|
case "clearAllAuthCredentials":
|
||||||
credentialDatabase.clearAllAuthCredentials();
|
credentialDatabase.clearAllAuthCredentials();
|
||||||
WebViewDatabase.getInstance(plugin.applicationContext).clearHttpAuthUsernamePassword();
|
if (plugin != null && plugin.applicationContext != null) {
|
||||||
|
WebViewDatabase.getInstance(plugin.applicationContext).clearHttpAuthUsernamePassword();
|
||||||
|
}
|
||||||
result.success(true);
|
result.success(true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -111,12 +111,16 @@ public class HeadlessInAppWebView implements MethodChannel.MethodCallHandler {
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
channel.setMethodCallHandler(null);
|
channel.setMethodCallHandler(null);
|
||||||
HeadlessInAppWebViewManager.webViews.remove(id);
|
if (HeadlessInAppWebViewManager.webViews.containsKey(id)) {
|
||||||
|
HeadlessInAppWebViewManager.webViews.put(id, null);
|
||||||
|
}
|
||||||
if (plugin != null && plugin.activity != null) {
|
if (plugin != null && plugin.activity != null) {
|
||||||
ViewGroup contentView = (ViewGroup) plugin.activity.findViewById(android.R.id.content);
|
ViewGroup contentView = (ViewGroup) plugin.activity.findViewById(android.R.id.content);
|
||||||
ViewGroup mainView = (ViewGroup) (contentView).getChildAt(0);
|
if (contentView != null) {
|
||||||
if (mainView != null && flutterWebView != null) {
|
ViewGroup mainView = (ViewGroup) (contentView).getChildAt(0);
|
||||||
mainView.removeView(flutterWebView.getView());
|
if (mainView != null && flutterWebView != null) {
|
||||||
|
mainView.removeView(flutterWebView.getView());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flutterWebView != null) {
|
if (flutterWebView != null) {
|
||||||
|
|
|
@ -26,6 +26,8 @@ import androidx.annotation.Nullable;
|
||||||
import com.pichillilorenzo.flutter_inappwebview.InAppWebViewFlutterPlugin;
|
import com.pichillilorenzo.flutter_inappwebview.InAppWebViewFlutterPlugin;
|
||||||
import com.pichillilorenzo.flutter_inappwebview.in_app_webview.FlutterWebView;
|
import com.pichillilorenzo.flutter_inappwebview.in_app_webview.FlutterWebView;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -50,7 +52,7 @@ public class HeadlessInAppWebViewManager implements MethodChannel.MethodCallHand
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMethodCall(final MethodCall call, final Result result) {
|
public void onMethodCall(final MethodCall call, @NotNull final Result result) {
|
||||||
final String id = (String) call.argument("id");
|
final String id = (String) call.argument("id");
|
||||||
|
|
||||||
switch (call.method) {
|
switch (call.method) {
|
||||||
|
@ -64,10 +66,11 @@ public class HeadlessInAppWebViewManager implements MethodChannel.MethodCallHand
|
||||||
default:
|
default:
|
||||||
result.notImplemented();
|
result.notImplemented();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(String id, HashMap<String, Object> params) {
|
public void run(String id, HashMap<String, Object> params) {
|
||||||
|
if (plugin == null || plugin.activity == null) return;
|
||||||
|
|
||||||
FlutterWebView flutterWebView = new FlutterWebView(plugin, plugin.activity, id, params);
|
FlutterWebView flutterWebView = new FlutterWebView(plugin, plugin.activity, id, params);
|
||||||
HeadlessInAppWebView headlessInAppWebView = new HeadlessInAppWebView(plugin, id, flutterWebView);
|
HeadlessInAppWebView headlessInAppWebView = new HeadlessInAppWebView(plugin, id, flutterWebView);
|
||||||
HeadlessInAppWebViewManager.webViews.put(id, headlessInAppWebView);
|
HeadlessInAppWebViewManager.webViews.put(id, headlessInAppWebView);
|
||||||
|
|
|
@ -73,7 +73,8 @@ public class InAppBrowserActivity extends AppCompatActivity implements InAppBrow
|
||||||
id = b.getString("id");
|
id = b.getString("id");
|
||||||
|
|
||||||
String managerId = b.getString("managerId");
|
String managerId = b.getString("managerId");
|
||||||
manager = (InAppBrowserManager) InAppBrowserManager.shared.get(managerId);
|
manager = InAppBrowserManager.shared.get(managerId);
|
||||||
|
if (manager == null || manager.plugin == null|| manager.plugin.messenger == null) return;
|
||||||
|
|
||||||
windowId = b.getInt("windowId");
|
windowId = b.getInt("windowId");
|
||||||
|
|
||||||
|
@ -500,7 +501,7 @@ public class InAppBrowserActivity extends AppCompatActivity implements InAppBrow
|
||||||
methodCallDelegate = null;
|
methodCallDelegate = null;
|
||||||
}
|
}
|
||||||
if (webView != null) {
|
if (webView != null) {
|
||||||
if (manager.plugin.activityPluginBinding != null) {
|
if (manager != null && manager.plugin != null && manager.plugin.activityPluginBinding != null) {
|
||||||
manager.plugin.activityPluginBinding.removeActivityResultListener(webView.inAppWebViewChromeClient);
|
manager.plugin.activityPluginBinding.removeActivityResultListener(webView.inAppWebViewChromeClient);
|
||||||
}
|
}
|
||||||
ViewGroup vg = (ViewGroup) (webView.getParent());
|
ViewGroup vg = (ViewGroup) (webView.getParent());
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
#
|
||||||
|
# NOTE: This podspec is NOT to be published. It is only used as a local source!
|
||||||
|
# This is a generated file; do not edit or check into version control.
|
||||||
|
#
|
||||||
|
|
||||||
|
Pod::Spec.new do |s|
|
||||||
|
s.name = 'Flutter'
|
||||||
|
s.version = '1.0.0'
|
||||||
|
s.summary = 'High-performance, high-fidelity mobile apps.'
|
||||||
|
s.homepage = 'https://flutter.io'
|
||||||
|
s.license = { :type => 'MIT' }
|
||||||
|
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
|
||||||
|
s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
|
||||||
|
s.ios.deployment_target = '9.0'
|
||||||
|
# Framework linking is handled by Flutter tooling, not CocoaPods.
|
||||||
|
# Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs.
|
||||||
|
s.vendored_frameworks = 'path/to/nothing'
|
||||||
|
end
|
|
@ -3,11 +3,12 @@
|
||||||
export "FLUTTER_ROOT=/Users/lorenzopichilli/fvm/versions/2.10.4"
|
export "FLUTTER_ROOT=/Users/lorenzopichilli/fvm/versions/2.10.4"
|
||||||
export "FLUTTER_APPLICATION_PATH=/Users/lorenzopichilli/Desktop/flutter_inappwebview/example"
|
export "FLUTTER_APPLICATION_PATH=/Users/lorenzopichilli/Desktop/flutter_inappwebview/example"
|
||||||
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
|
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
|
||||||
export "FLUTTER_TARGET=lib/main.dart"
|
export "FLUTTER_TARGET=integration_test/webview_flutter_test.dart"
|
||||||
export "FLUTTER_BUILD_DIR=build"
|
export "FLUTTER_BUILD_DIR=build"
|
||||||
export "FLUTTER_BUILD_NAME=1.0.0"
|
export "FLUTTER_BUILD_NAME=1.0.0"
|
||||||
export "FLUTTER_BUILD_NUMBER=1"
|
export "FLUTTER_BUILD_NUMBER=1"
|
||||||
|
export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ=="
|
||||||
export "DART_OBFUSCATION=false"
|
export "DART_OBFUSCATION=false"
|
||||||
export "TRACK_WIDGET_CREATION=false"
|
export "TRACK_WIDGET_CREATION=true"
|
||||||
export "TREE_SHAKE_ICONS=false"
|
export "TREE_SHAKE_ICONS=false"
|
||||||
export "PACKAGE_CONFIG=.packages"
|
export "PACKAGE_CONFIG=/Users/lorenzopichilli/Desktop/flutter_inappwebview/example/.dart_tool/package_config.json"
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class HeadlessInAppWebView : FlutterMethodCallDelegate {
|
||||||
public func dispose() {
|
public func dispose() {
|
||||||
channel?.setMethodCallHandler(nil)
|
channel?.setMethodCallHandler(nil)
|
||||||
channel = nil
|
channel = nil
|
||||||
HeadlessInAppWebViewManager.webViews.removeValue(forKey: id)
|
HeadlessInAppWebViewManager.webViews[id] = nil
|
||||||
flutterWebView = nil
|
flutterWebView = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ import AVFoundation
|
||||||
public class HeadlessInAppWebViewManager: NSObject, FlutterPlugin {
|
public class HeadlessInAppWebViewManager: NSObject, FlutterPlugin {
|
||||||
static var registrar: FlutterPluginRegistrar?
|
static var registrar: FlutterPluginRegistrar?
|
||||||
static var channel: FlutterMethodChannel?
|
static var channel: FlutterMethodChannel?
|
||||||
static var webViews: [String: HeadlessInAppWebView] = [:]
|
static var webViews: [String: HeadlessInAppWebView?] = [:]
|
||||||
|
|
||||||
public static func register(with registrar: FlutterPluginRegistrar) {
|
public static func register(with registrar: FlutterPluginRegistrar) {
|
||||||
|
|
||||||
|
@ -63,8 +63,8 @@ public class HeadlessInAppWebViewManager: NSObject, FlutterPlugin {
|
||||||
HeadlessInAppWebViewManager.channel = nil
|
HeadlessInAppWebViewManager.channel = nil
|
||||||
HeadlessInAppWebViewManager.registrar = nil
|
HeadlessInAppWebViewManager.registrar = nil
|
||||||
let headlessWebViews = HeadlessInAppWebViewManager.webViews.values
|
let headlessWebViews = HeadlessInAppWebViewManager.webViews.values
|
||||||
headlessWebViews.forEach { (headlessWebView: HeadlessInAppWebView) in
|
headlessWebViews.forEach { (headlessWebView: HeadlessInAppWebView?) in
|
||||||
headlessWebView.dispose()
|
headlessWebView?.dispose()
|
||||||
}
|
}
|
||||||
HeadlessInAppWebViewManager.webViews.removeAll()
|
HeadlessInAppWebViewManager.webViews.removeAll()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: flutter_inappwebview
|
name: flutter_inappwebview
|
||||||
description: A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
|
description: A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
|
||||||
version: 5.4.3
|
version: 5.4.3+1
|
||||||
homepage: https://github.com/pichillilorenzo/flutter_inappwebview
|
homepage: https://github.com/pichillilorenzo/flutter_inappwebview
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
Loading…
Reference in New Issue