| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/services.dart'; |
| |
| import 'android_webview.dart'; |
| import 'android_webview.pigeon.dart'; |
| import 'instance_manager.dart'; |
| |
| /// Host api implementation for [WebView]. |
| class WebViewHostApiImpl extends WebViewHostApi { |
| /// Constructs a [WebViewHostApiImpl]. |
| WebViewHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance(WebView instance) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create(instanceId, instance.useHybridComposition); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(WebView instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> loadUrlFromInstance( |
| WebView instance, |
| String url, |
| Map<String, String> headers, |
| ) { |
| return loadUrl(instanceManager.getInstanceId(instance)!, url, headers); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<String> getUrlFromInstance(WebView instance) { |
| return getUrl(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<bool> canGoBackFromInstance(WebView instance) { |
| return canGoBack(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<bool> canGoForwardFromInstance(WebView instance) { |
| return canGoForward(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> goBackFromInstance(WebView instance) { |
| return goBack(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> goForwardFromInstance(WebView instance) { |
| return goForward(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> reloadFromInstance(WebView instance) { |
| return reload(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> clearCacheFromInstance(WebView instance, bool includeDiskFiles) { |
| return clearCache( |
| instanceManager.getInstanceId(instance)!, |
| includeDiskFiles, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<String> evaluateJavascriptFromInstance( |
| WebView instance, |
| String javascriptString, |
| ) { |
| return evaluateJavascript( |
| instanceManager.getInstanceId(instance)!, javascriptString); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<String> getTitleFromInstance(WebView instance) { |
| return getTitle(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> scrollToFromInstance(WebView instance, int x, int y) { |
| return scrollTo(instanceManager.getInstanceId(instance)!, x, y); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> scrollByFromInstance(WebView instance, int x, int y) { |
| return scrollBy(instanceManager.getInstanceId(instance)!, x, y); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<int> getScrollXFromInstance(WebView instance) { |
| return getScrollX(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<int> getScrollYFromInstance(WebView instance) { |
| return getScrollY(instanceManager.getInstanceId(instance)!); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setWebViewClientFromInstance( |
| WebView instance, |
| WebViewClient webViewClient, |
| ) { |
| return setWebViewClient( |
| instanceManager.getInstanceId(instance)!, |
| instanceManager.getInstanceId(webViewClient)!, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> addJavaScriptChannelFromInstance( |
| WebView instance, |
| JavaScriptChannel javaScriptChannel, |
| ) { |
| return addJavaScriptChannel( |
| instanceManager.getInstanceId(instance)!, |
| instanceManager.getInstanceId(javaScriptChannel)!, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> removeJavaScriptChannelFromInstance( |
| WebView instance, |
| JavaScriptChannel javaScriptChannel, |
| ) { |
| return removeJavaScriptChannel( |
| instanceManager.getInstanceId(instance)!, |
| instanceManager.getInstanceId(javaScriptChannel)!, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setDownloadListenerFromInstance( |
| WebView instance, |
| DownloadListener listener, |
| ) { |
| return setDownloadListener( |
| instanceManager.getInstanceId(instance)!, |
| instanceManager.getInstanceId(listener)!, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setWebChromeClientFromInstance( |
| WebView instance, |
| WebChromeClient client, |
| ) { |
| return setWebChromeClient( |
| instanceManager.getInstanceId(instance)!, |
| instanceManager.getInstanceId(client)!, |
| ); |
| } |
| } |
| |
| /// Host api implementation for [WebSettings]. |
| class WebSettingsHostApiImpl extends WebSettingsHostApi { |
| /// Constructs a [WebSettingsHostApiImpl]. |
| WebSettingsHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance(WebSettings instance, WebView webView) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create( |
| instanceId, |
| instanceManager.getInstanceId(webView)!, |
| ); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(WebSettings instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setDomStorageEnabledFromInstance( |
| WebSettings instance, |
| bool flag, |
| ) { |
| return setDomStorageEnabled(instanceManager.getInstanceId(instance)!, flag); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setJavaScriptCanOpenWindowsAutomaticallyFromInstance( |
| WebSettings instance, |
| bool flag, |
| ) { |
| return setJavaScriptCanOpenWindowsAutomatically( |
| instanceManager.getInstanceId(instance)!, |
| flag, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setSupportMultipleWindowsFromInstance( |
| WebSettings instance, |
| bool support, |
| ) { |
| return setSupportMultipleWindows( |
| instanceManager.getInstanceId(instance)!, support); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setJavaScriptEnabledFromInstance( |
| WebSettings instance, |
| bool flag, |
| ) { |
| return setJavaScriptCanOpenWindowsAutomatically( |
| instanceManager.getInstanceId(instance)!, |
| flag, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setUserAgentStringFromInstance( |
| WebSettings instance, |
| String userAgentString, |
| ) { |
| return setUserAgentString( |
| instanceManager.getInstanceId(instance)!, |
| userAgentString, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setMediaPlaybackRequiresUserGestureFromInstance( |
| WebSettings instance, |
| bool require, |
| ) { |
| return setMediaPlaybackRequiresUserGesture( |
| instanceManager.getInstanceId(instance)!, |
| require, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setSupportZoomFromInstance( |
| WebSettings instance, |
| bool support, |
| ) { |
| return setSupportZoom(instanceManager.getInstanceId(instance)!, support); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setLoadWithOverviewModeFromInstance( |
| WebSettings instance, |
| bool overview, |
| ) { |
| return setLoadWithOverviewMode( |
| instanceManager.getInstanceId(instance)!, |
| overview, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setUseWideViewPortFromInstance( |
| WebSettings instance, |
| bool use, |
| ) { |
| return setUseWideViewPort(instanceManager.getInstanceId(instance)!, use); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setDisplayZoomControlsFromInstance( |
| WebSettings instance, |
| bool enabled, |
| ) { |
| return setDisplayZoomControls( |
| instanceManager.getInstanceId(instance)!, |
| enabled, |
| ); |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> setBuiltInZoomControlsFromInstance( |
| WebSettings instance, |
| bool enabled, |
| ) { |
| return setBuiltInZoomControls( |
| instanceManager.getInstanceId(instance)!, |
| enabled, |
| ); |
| } |
| } |
| |
| /// Host api implementation for [JavaScriptChannel]. |
| class JavaScriptChannelHostApiImpl extends JavaScriptChannelHostApi { |
| /// Constructs a [JavaScriptChannelHostApiImpl]. |
| JavaScriptChannelHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance(JavaScriptChannel instance) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create(instanceId, instance.channelName); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(JavaScriptChannel instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| } |
| |
| /// Flutter api implementation for [JavaScriptChannel]. |
| class JavaScriptChannelFlutterApiImpl extends JavaScriptChannelFlutterApi { |
| /// Constructs a [JavaScriptChannelFlutterApiImpl]. |
| JavaScriptChannelHostApiImpl({InstanceManager? instanceManager}) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| @override |
| void postMessage(int instanceId, String message) { |
| final JavaScriptChannel instance = |
| instanceManager.getInstance(instanceId) as JavaScriptChannel; |
| instance.postMessage(message); |
| } |
| } |
| |
| /// Host api implementation for [WebViewClient]. |
| class WebViewClientHostApiImpl extends WebViewClientHostApi { |
| /// Constructs a [WebViewClientHostApiImpl]. |
| WebViewClientHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance(WebViewClient instance) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create(instanceId, instance.shouldOverrideUrlLoading); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(WebViewClient instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| } |
| |
| /// Flutter api implementation for [WebViewClient]. |
| class WebViewClientFlutterApiImpl extends WebViewClientFlutterApi { |
| /// Constructs a [WebViewClientFlutterApiImpl]. |
| WebViewClientFlutterApiImpl({InstanceManager? instanceManager}) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| @override |
| void onPageFinished(int instanceId, int webViewInstanceId, String url) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| instance.onPageFinished( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| url, |
| ); |
| } |
| |
| @override |
| void onPageStarted(int instanceId, int webViewInstanceId, String url) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| instance.onPageStarted( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| url, |
| ); |
| } |
| |
| @override |
| void onReceivedError( |
| int instanceId, |
| int webViewInstanceId, |
| int errorCode, |
| String description, |
| String failingUrl, |
| ) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| // ignore: deprecated_member_use_from_same_package |
| instance.onReceivedError( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| errorCode, |
| description, |
| failingUrl, |
| ); |
| } |
| |
| @override |
| void onReceivedRequestError( |
| int instanceId, |
| int webViewInstanceId, |
| WebResourceRequestData request, |
| WebResourceErrorData error, |
| ) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| instance.onReceivedRequestError( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| WebResourceRequest( |
| url: request.url!, |
| isForMainFrame: request.isForMainFrame!, |
| isRedirect: request.isRedirect, |
| hasGesture: request.hasGesture!, |
| method: request.method!, |
| requestHeaders: request.requestHeaders!.cast<String, String>(), |
| ), |
| WebResourceError( |
| errorCode: error.errorCode!, |
| description: error.description!, |
| ), |
| ); |
| } |
| |
| @override |
| void requestLoading( |
| int instanceId, |
| int webViewInstanceId, |
| WebResourceRequestData request, |
| ) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| instance.requestLoading( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| WebResourceRequest( |
| url: request.url!, |
| isForMainFrame: request.isForMainFrame!, |
| isRedirect: request.isRedirect, |
| hasGesture: request.hasGesture!, |
| method: request.method!, |
| requestHeaders: request.requestHeaders!.cast<String, String>(), |
| ), |
| ); |
| } |
| |
| @override |
| void urlLoading( |
| int instanceId, |
| int webViewInstanceId, |
| String url, |
| ) { |
| final WebViewClient instance = |
| instanceManager.getInstance(instanceId) as WebViewClient; |
| instance.urlLoading( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| url, |
| ); |
| } |
| } |
| |
| /// Host api implementation for [DownloadListener]. |
| class DownloadListenerHostApiImpl extends DownloadListenerHostApi { |
| /// Constructs a [DownloadListenerHostApiImpl]. |
| DownloadListenerHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance(DownloadListener instance) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create(instanceId); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(DownloadListener instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| } |
| |
| /// Flutter api implementation for [DownloadListener]. |
| class DownloadListenerFlutterApiImpl extends DownloadListenerFlutterApi { |
| /// Constructs a [DownloadListenerFlutterApiImpl]. |
| DownloadListenerFlutterApiImpl({InstanceManager? instanceManager}) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| @override |
| void onDownloadStart( |
| int instanceId, |
| String url, |
| String userAgent, |
| String contentDisposition, |
| String mimetype, |
| int contentLength, |
| ) { |
| final DownloadListener instance = |
| instanceManager.getInstance(instanceId) as DownloadListener; |
| instance.onDownloadStart( |
| url, |
| userAgent, |
| contentDisposition, |
| mimetype, |
| contentLength, |
| ); |
| } |
| } |
| |
| /// Host api implementation for [DownloadListener]. |
| class WebChromeClientHostApiImpl extends WebChromeClientHostApi { |
| /// Constructs a [WebChromeClientHostApiImpl]. |
| WebChromeClientHostApiImpl({ |
| BinaryMessenger? binaryMessenger, |
| InstanceManager? instanceManager, |
| }) : super(binaryMessenger: binaryMessenger) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> createFromInstance( |
| WebChromeClient instance, |
| WebViewClient webViewClient, |
| ) async { |
| final int? instanceId = instanceManager.tryAddInstance(instance); |
| if (instanceId != null) { |
| return create(instanceId, instanceManager.getInstanceId(webViewClient)!); |
| } |
| } |
| |
| /// Helper method to convert instances ids to objects. |
| Future<void> disposeFromInstance(WebChromeClient instance) async { |
| final int? instanceId = instanceManager.removeInstance(instance); |
| if (instanceId != null) { |
| return dispose(instanceId); |
| } |
| } |
| } |
| |
| /// Flutter api implementation for [DownloadListener]. |
| class WebChromeClientFlutterApiImpl extends WebChromeClientFlutterApi { |
| /// Constructs a [DownloadListenerFlutterApiImpl]. |
| WebChromeClientFlutterApiImpl({InstanceManager? instanceManager}) { |
| this.instanceManager = instanceManager ?? InstanceManager.instance; |
| } |
| |
| /// Maintains instances stored to communicate with java objects. |
| late final InstanceManager instanceManager; |
| |
| @override |
| void onProgressChanged(int instanceId, int webViewInstanceId, int progress) { |
| final WebChromeClient instance = |
| instanceManager.getInstance(instanceId) as WebChromeClient; |
| instance.onProgressChanged( |
| instanceManager.getInstance(webViewInstanceId) as WebView, |
| progress, |
| ); |
| } |
| } |