From 2346c247959271ef1d6f3878176f807bca01641d Mon Sep 17 00:00:00 2001 From: Vitor Pellozi <46446048+Pellozi@users.noreply.github.com> Date: Thu, 20 Feb 2025 16:47:17 +0000 Subject: [PATCH 1/5] Update InAppWebViewFlutterPlugin.java Refactor InAppWebViewFlutterPlugin initialization for better FlutterPluginBinding compatibility with the new flutter version --- .../InAppWebViewFlutterPlugin.java | 54 ++++--------------- 1 file changed, 10 insertions(+), 44 deletions(-) diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java index b475a0e3d7..887449ca1f 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java @@ -24,9 +24,7 @@ import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.platform.PlatformViewRegistry; -import io.flutter.view.FlutterView; public class InAppWebViewFlutterPlugin implements FlutterPlugin, ActivityAware { @@ -64,51 +62,32 @@ public class InAppWebViewFlutterPlugin implements FlutterPlugin, ActivityAware { public ProcessGlobalConfigManager processGlobalConfigManager; public FlutterWebViewFactory flutterWebViewFactory; public Context applicationContext; - public PluginRegistry.Registrar registrar; public BinaryMessenger messenger; public FlutterPlugin.FlutterAssets flutterAssets; @Nullable public ActivityPluginBinding activityPluginBinding; @Nullable public Activity activity; - @SuppressWarnings("deprecation") - public FlutterView flutterView; public InAppWebViewFlutterPlugin() {} - @SuppressWarnings("deprecation") - public static void registerWith(PluginRegistry.Registrar registrar) { + public static void registerWith(io.flutter.embedding.engine.plugins.FlutterPluginBinding binding) { final InAppWebViewFlutterPlugin instance = new InAppWebViewFlutterPlugin(); - instance.registrar = registrar; - instance.onAttachedToEngine( - registrar.context(), registrar.messenger(), registrar.activity(), registrar.platformViewRegistry(), registrar.view()); + instance.onAttachedToEngine(binding); } @Override public void onAttachedToEngine(FlutterPluginBinding binding) { this.flutterAssets = binding.getFlutterAssets(); - - // Shared.activity could be null or not. - // It depends on who is called first between onAttachedToEngine event and onAttachedToActivity event. - // - // See https://github.com/pichillilorenzo/flutter_inappwebview/issues/390#issuecomment-647039084 - onAttachedToEngine( - binding.getApplicationContext(), binding.getBinaryMessenger(), this.activity, binding.getPlatformViewRegistry(), null); - } - - @SuppressWarnings("deprecation") - private void onAttachedToEngine(Context applicationContext, BinaryMessenger messenger, Activity activity, PlatformViewRegistry platformViewRegistry, FlutterView flutterView) { - this.applicationContext = applicationContext; - this.activity = activity; - this.messenger = messenger; - this.flutterView = flutterView; + this.applicationContext = binding.getApplicationContext(); + this.messenger = binding.getBinaryMessenger(); inAppBrowserManager = new InAppBrowserManager(this); headlessInAppWebViewManager = new HeadlessInAppWebViewManager(this); chromeSafariBrowserManager = new ChromeSafariBrowserManager(this); noHistoryCustomTabsActivityCallbacks = new NoHistoryCustomTabsActivityCallbacks(this); flutterWebViewFactory = new FlutterWebViewFactory(this); - platformViewRegistry.registerViewFactory( + binding.getPlatformViewRegistry().registerViewFactory( FlutterWebViewFactory.VIEW_TYPE_ID, flutterWebViewFactory); platformUtil = new PlatformUtil(this); @@ -132,6 +111,10 @@ private void onAttachedToEngine(Context applicationContext, BinaryMessenger mess @Override public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + disposeManagers(); + } + + private void disposeManagers() { if (platformUtil != null) { platformUtil.dispose(); platformUtil = null; @@ -198,38 +181,21 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) { this.activityPluginBinding = activityPluginBinding; this.activity = activityPluginBinding.getActivity(); - - if (noHistoryCustomTabsActivityCallbacks != null) { - this.activity.getApplication().registerActivityLifecycleCallbacks(noHistoryCustomTabsActivityCallbacks.activityLifecycleCallbacks); - } } @Override public void onDetachedFromActivityForConfigChanges() { - if (activity != null && noHistoryCustomTabsActivityCallbacks != null) { - this.activity.getApplication().unregisterActivityLifecycleCallbacks(noHistoryCustomTabsActivityCallbacks.activityLifecycleCallbacks); - } - activityPluginBinding = null; activity = null; } @Override public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) { - this.activityPluginBinding = activityPluginBinding; - this.activity = activityPluginBinding.getActivity(); - - if (noHistoryCustomTabsActivityCallbacks != null) { - this.activity.getApplication().registerActivityLifecycleCallbacks(noHistoryCustomTabsActivityCallbacks.activityLifecycleCallbacks); - } + onAttachedToActivity(activityPluginBinding); } @Override public void onDetachedFromActivity() { - if (activity != null && noHistoryCustomTabsActivityCallbacks != null) { - this.activity.getApplication().unregisterActivityLifecycleCallbacks(noHistoryCustomTabsActivityCallbacks.activityLifecycleCallbacks); - } - activityPluginBinding = null; activity = null; } From 057ee8137352b99a0f649bc62fcb56dae0e66e30 Mon Sep 17 00:00:00 2001 From: Vitor Pellozi <46446048+Pellozi@users.noreply.github.com> Date: Fri, 21 Feb 2025 11:51:36 +0000 Subject: [PATCH 2/5] Update Util.java --- .../pichillilorenzo/flutter_inappwebview_android/Util.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/Util.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/Util.java index a5378b7c84..1531562129 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/Util.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/Util.java @@ -66,7 +66,7 @@ public class Util { private Util() {} public static String getUrlAsset(InAppWebViewFlutterPlugin plugin, String assetFilePath) throws IOException { - String key = (plugin.registrar != null) ? plugin.registrar.lookupKeyForAsset(assetFilePath) : plugin.flutterAssets.getAssetFilePathByName(assetFilePath); + String key = plugin.flutterAssets.getAssetFilePathByName(assetFilePath); InputStream is = null; IOException e = null; @@ -91,7 +91,7 @@ public static String getUrlAsset(InAppWebViewFlutterPlugin plugin, String assetF } public static InputStream getFileAsset(InAppWebViewFlutterPlugin plugin, String assetFilePath) throws IOException { - String key = (plugin.registrar != null) ? plugin.registrar.lookupKeyForAsset(assetFilePath) : plugin.flutterAssets.getAssetFilePathByName(assetFilePath); + String key = plugin.flutterAssets.getAssetFilePathByName(assetFilePath); AssetManager mg = plugin.applicationContext.getResources().getAssets(); return mg.open(key); } From fbffa4b0b4e435aea8f63e7a5027a55ba36137fc Mon Sep 17 00:00:00 2001 From: Vitor Pellozi <46446048+Pellozi@users.noreply.github.com> Date: Fri, 21 Feb 2025 12:54:32 +0000 Subject: [PATCH 3/5] Update InAppWebViewFlutterPlugin.java --- .../InAppWebViewFlutterPlugin.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java index 887449ca1f..0ca035daad 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/InAppWebViewFlutterPlugin.java @@ -71,13 +71,8 @@ public class InAppWebViewFlutterPlugin implements FlutterPlugin, ActivityAware { public InAppWebViewFlutterPlugin() {} - public static void registerWith(io.flutter.embedding.engine.plugins.FlutterPluginBinding binding) { - final InAppWebViewFlutterPlugin instance = new InAppWebViewFlutterPlugin(); - instance.onAttachedToEngine(binding); - } - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { this.flutterAssets = binding.getFlutterAssets(); this.applicationContext = binding.getApplicationContext(); this.messenger = binding.getBinaryMessenger(); From b5782c1065aee849be75384f0d7ea28c110cfd0a Mon Sep 17 00:00:00 2001 From: Vitor Pellozi <46446048+Pellozi@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:09:16 +0000 Subject: [PATCH 4/5] Update InAppWebViewChromeClient.java --- .../webview/in_app_webview/InAppWebViewChromeClient.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebViewChromeClient.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebViewChromeClient.java index de544f9729..5732b21d1e 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebViewChromeClient.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebViewChromeClient.java @@ -126,9 +126,7 @@ public InAppWebViewChromeClient(@NonNull final InAppWebViewFlutterPlugin plugin, this.inAppBrowserDelegate.getActivityResultListeners().add(this); } - if (plugin.registrar != null) - plugin.registrar.addActivityResultListener(this); - else if (plugin.activityPluginBinding != null) + if (plugin.activityPluginBinding != null) plugin.activityPluginBinding.addActivityResultListener(this); } From 745c235842650c1a7fd2fe42000810b9a4f82e98 Mon Sep 17 00:00:00 2001 From: Vitor Pellozi <46446048+Pellozi@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:12:49 +0000 Subject: [PATCH 5/5] Update FlutterWebView.java --- .../webview/in_app_webview/FlutterWebView.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/FlutterWebView.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/FlutterWebView.java index 5605b68e3b..97a228bb29 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/FlutterWebView.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/FlutterWebView.java @@ -64,7 +64,8 @@ public FlutterWebView(final InAppWebViewFlutterPlugin plugin, final Context cont } webView = new InAppWebView(context, plugin, id, windowId, customSettings, contextMenu, - customSettings.useHybridComposition ? null : plugin.flutterView, userScripts); + customSettings.useHybridComposition ? null : plugin.binding.getFlutterEngine().getRenderer().getView(), userScripts); + displayListenerProxy.onPostWebViewInitialization(displayManager); // set MATCH_PARENT layout params to the WebView, otherwise it won't take all the available space! @@ -186,4 +187,4 @@ public void onFlutterViewDetached() { webView.setContainerView(null); } } -} \ No newline at end of file +}