From 539a8576db1165389e62945675947e0d1c3c5c3b Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 15:12:01 +0200 Subject: [PATCH 1/4] feat: Introduce setUseWideViewPort on Android (#106999) --- .../webview_flutter/example/lib/main.dart | 3 ++- .../lib/src/android_webview_controller.dart | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index c73749d0622c..31eb005826ad 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -199,7 +199,8 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - .setMediaPlaybackRequiresUserGesture(false); + ..setUseWideViewPort(false) + ..setMediaPlaybackRequiresUserGesture(false); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart index c8326529e591..1e0abd82f963 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart @@ -86,7 +86,7 @@ class AndroidWebViewController extends PlatformWebViewController { _webView.settings.setJavaScriptCanOpenWindowsAutomatically(true); _webView.settings.setSupportMultipleWindows(true); _webView.settings.setLoadWithOverviewMode(true); - _webView.settings.setUseWideViewPort(true); + _webView.settings.setUseWideViewPort(false); _webView.settings.setDisplayZoomControls(false); _webView.settings.setBuiltInZoomControls(true); @@ -599,6 +599,13 @@ class AndroidWebViewController extends PlatformWebViewController { Future setTextZoom(int textZoom) => _webView.settings.setTextZoom(textZoom); + /// Sets whether the WebView should enable support for the "viewport" HTML + /// meta tag or should use a wide viewport. + /// + /// The default is false. + Future setUseWideViewPort(bool use) => + _webView.settings.setUseWideViewPort(use); + /// Enables or disables content URL access. /// /// The default is true. From 5bd589845bc5e4b844ab078657f851c92a426f65 Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 15:56:07 +0200 Subject: [PATCH 2/4] add test --- .../test/android_webview_controller_test.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart index 87bab7f8f5d6..35c8eff93dbe 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart @@ -1576,6 +1576,22 @@ void main() { verify(mockSettings.setMediaPlaybackRequiresUserGesture(true)).called(1); }); + test('setUseWideViewPort', () async { + final MockWebView mockWebView = MockWebView(); + final MockWebSettings mockSettings = MockWebSettings(); + final AndroidWebViewController controller = createControllerWithMocks( + mockWebView: mockWebView, + mockSettings: mockSettings, + ); + + clearInteractions(mockWebView); + + await controller.setUseWideViewPort(true); + + verify(mockWebView.settings).called(1); + verify(mockSettings.setUseWideViewPort(true)).called(1); + }); + test('setAllowContentAccess', () async { final MockWebView mockWebView = MockWebView(); final MockWebSettings mockSettings = MockWebSettings(); From c5d5776cb327e4f42d94a9ce1d270e0cbb2f805f Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 16:02:07 +0200 Subject: [PATCH 3/4] update changelog --- .../webview_flutter/webview_flutter/example/lib/main.dart | 3 +-- packages/webview_flutter/webview_flutter_android/CHANGELOG.md | 4 ++++ packages/webview_flutter/webview_flutter_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 31eb005826ad..c73749d0622c 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -199,8 +199,7 @@ Page resource error: if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) - ..setUseWideViewPort(false) - ..setMediaPlaybackRequiresUserGesture(false); + .setMediaPlaybackRequiresUserGesture(false); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 10bd622d9851..4c14e416d36e 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.5.0 + +* Adds support to set using wide view port. See `AndroidWebViewController.setUseWideViewPort`. + ## 4.4.2 * Updates pigeon generated code to fix `ImplicitSamInstance` and `SyntheticAccessor` Kotlin lint diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 5f6cb957df85..469be25d5476 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.4.2 +version: 4.5.0 environment: sdk: ^3.6.0 From c9fb5093aed914606e4bae414665d3251482dd3a Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Fri, 25 Apr 2025 16:46:14 +0200 Subject: [PATCH 4/4] change default in test --- .../test/android_webview_controller_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart index 35c8eff93dbe..ec89e0dbd7e3 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart @@ -289,7 +289,7 @@ void main() { .called(1); verify(mockWebSettings.setLoadWithOverviewMode(true)).called(1); verify(mockWebSettings.setSupportMultipleWindows(true)).called(1); - verify(mockWebSettings.setUseWideViewPort(true)).called(1); + verify(mockWebSettings.setUseWideViewPort(false)).called(1); }); test('loadFile without file prefix', () async {