Commit 4d752ee9 authored by Lorenzo Pichilli's avatar Lorenzo Pichilli

updated ChromeSafariBrowser class, Renamed Chrome Custom Tab addShareButton...

updated ChromeSafariBrowser class, Renamed Chrome Custom Tab addShareButton option to addDefaultShareMenuItem, Renamed ChromeSafariBrowser onLoaded to onCompletedInitialLoad, Renamed all iOS and Android webview options class, fix #229, Added packageName and keepAliveEnabled ChromeCustomTab options for Android
parent 9c7ac0da
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
- Added `reloadFromOrigin` webview method for iOS - Added `reloadFromOrigin` webview method for iOS
- Added `automaticallyAdjustsScrollIndicatorInsets` webview options for iOS - Added `automaticallyAdjustsScrollIndicatorInsets` webview options for iOS
- Added `WebStorageManager` class which manages the web storage used by WebView instances - Added `WebStorageManager` class which manages the web storage used by WebView instances
- Added `packageName` [#229](https://github.com/pichillilorenzo/flutter_inappwebview/issues/229) and `keepAliveEnabled` ChromeCustomTab options for Android
- Updated for Flutter 1.12 new Java Embedding API (Android) - Updated for Flutter 1.12 new Java Embedding API (Android)
- Updated `clearCache` for Android - Updated `clearCache` for Android
- Updated default value for `domStorageEnabled` and `databaseEnabled` options to `true` for Android - Updated default value for `domStorageEnabled` and `databaseEnabled` options to `true` for Android
...@@ -34,7 +35,9 @@ ...@@ -34,7 +35,9 @@
- Renamed `onPermissionRequest` to `androidOnPermissionRequest` - Renamed `onPermissionRequest` to `androidOnPermissionRequest`
- Updated attribute names for `InAppWebViewWidgetOptions`, `InAppBrowserClassOptions` and `ChromeSafariBrowserClassOptions` classes - Updated attribute names for `InAppWebViewWidgetOptions`, `InAppBrowserClassOptions` and `ChromeSafariBrowserClassOptions` classes
- Renamed and updated `onNavigationStateChange` to `onUpdateVisitedHistory` - Renamed and updated `onNavigationStateChange` to `onUpdateVisitedHistory`
- Renamed all iOS options prefix from `Ios` to `IOS` - Renamed all iOS and Android webview options class
- Renamed Chrome Custom Tab `addShareButton` option to `addDefaultShareMenuItem`
- Renamed ChromeSafariBrowser `onLoaded` to `onCompletedInitialLoad`
## 2.1.0+1 ## 2.1.0+1
......
...@@ -641,8 +641,8 @@ Specific options of the `InAppBrowser` class are: ...@@ -641,8 +641,8 @@ Specific options of the `InAppBrowser` class are:
* `toolbarBottomTranslucent`: Set to `true` to set the toolbar at the bottom translucent. The default value is `true`. * `toolbarBottomTranslucent`: Set to `true` to set the toolbar at the bottom translucent. The default value is `true`.
* `closeButtonCaption`: Set the custom text for the close button. * `closeButtonCaption`: Set the custom text for the close button.
* `closeButtonColor`: Set the custom color for the close button. * `closeButtonColor`: Set the custom color for the close button.
* `presentationStyle`: Set the custom modal presentation style when presenting the WebView. The default value is `IosWebViewOptionsPresentationStyle.FULL_SCREEN`. * `presentationStyle`: Set the custom modal presentation style when presenting the WebView. The default value is `IOSUIModalPresentationStyle.FULL_SCREEN`.
* `transitionStyle`: Set to the custom transition style when presenting the WebView. The default value is `IosWebViewOptionsTransitionStyle.COVER_VERTICAL`. * `transitionStyle`: Set to the custom transition style when presenting the WebView. The default value is `IOSUIModalTransitionStyle.COVER_VERTICAL`.
* `spinner`: Set to `false` to hide the spinner when the WebView is loading a page. The default value is `true`. * `spinner`: Set to `false` to hide the spinner when the WebView is loading a page. The default value is `true`.
#### `InAppBrowser` Events #### `InAppBrowser` Events
...@@ -698,8 +698,8 @@ class MyChromeSafariBrowser extends ChromeSafariBrowser { ...@@ -698,8 +698,8 @@ class MyChromeSafariBrowser extends ChromeSafariBrowser {
} }
@override @override
void onLoaded() { void onCompletedInitialLoad() {
print("ChromeSafari browser loaded"); print("ChromeSafari browser initial load completed");
} }
@override @override
...@@ -737,7 +737,7 @@ class _MyAppState extends State<MyApp> { ...@@ -737,7 +737,7 @@ class _MyAppState extends State<MyApp> {
await widget.browser.open( await widget.browser.open(
url: "https://flutter.dev/", url: "https://flutter.dev/",
options: ChromeSafariBrowserClassOptions( options: ChromeSafariBrowserClassOptions(
android: AndroidChromeCustomTabsOptions(addShareButton: false), android: AndroidChromeCustomTabsOptions(addDefaultShareMenuItem: false),
ios: IosSafariOptions(barCollapsingEnabled: true))); ios: IosSafariOptions(barCollapsingEnabled: true)));
}, },
child: Text("Open Chrome Safari Browser")), child: Text("Open Chrome Safari Browser")),
...@@ -767,26 +767,28 @@ Screenshots: ...@@ -767,26 +767,28 @@ Screenshots:
##### `ChromeSafariBrowser` Android-specific options ##### `ChromeSafariBrowser` Android-specific options
* `addShareButton`: Set to `false` if you don't want the default share button. The default value is `true`. * `addDefaultShareMenuItem`: Set to `false` if you don't want the default share item to the menu. The default value is `true`.
* `showTitle`: Set to `false` if the title shouldn't be shown in the custom tab. The default value is `true`. * `showTitle`: Set to `false` if the title shouldn't be shown in the custom tab. The default value is `true`.
* `toolbarBackgroundColor`: Set the custom background color of the toolbar. * `toolbarBackgroundColor`: Set the custom background color of the toolbar.
* `enableUrlBarHiding`: Set to `true` to enable the url bar to hide as the user scrolls down on the page. The default value is `false`. * `enableUrlBarHiding`: Set to `true` to enable the url bar to hide as the user scrolls down on the page. The default value is `false`.
* `instantAppsEnabled`: Set to `true` to enable Instant Apps. The default value is `false`. * `instantAppsEnabled`: Set to `true` to enable Instant Apps. The default value is `false`.
* `packageName`: Set the name of the application package to handle the intent (for example `com.android.chrome`), or null to allow any application package.
* `keepAliveEnabled`: Set to `true` to enable Keep Alive. The default value is `false`.
##### `ChromeSafariBrowser` iOS-specific options ##### `ChromeSafariBrowser` iOS-specific options
* `entersReaderIfAvailable`: Set to `true` if Reader mode should be entered automatically when it is available for the webpage. The default value is `false`. * `entersReaderIfAvailable`: Set to `true` if Reader mode should be entered automatically when it is available for the webpage. The default value is `false`.
* `barCollapsingEnabled`: Set to `true` to enable bar collapsing. The default value is `false`. * `barCollapsingEnabled`: Set to `true` to enable bar collapsing. The default value is `false`.
* `dismissButtonStyle`: Set the custom style for the dismiss button. The default value is `IosSafariOptionsDismissButtonStyle.DONE`. * `dismissButtonStyle`: Set the custom style for the dismiss button. The default value is `IOSSafariDismissButtonStyle.DONE`.
* `preferredBarTintColor`: Set the custom background color of the navigation bar and the toolbar. * `preferredBarTintColor`: Set the custom background color of the navigation bar and the toolbar.
* `preferredControlTintColor`: Set the custom color of the control buttons on the navigation bar and the toolbar. * `preferredControlTintColor`: Set the custom color of the control buttons on the navigation bar and the toolbar.
* `presentationStyle`: Set the custom modal presentation style when presenting the WebView. The default value is `IosWebViewOptionsPresentationStyle.FULL_SCREEN`. * `presentationStyle`: Set the custom modal presentation style when presenting the WebView. The default value is `IOSUIModalPresentationStyle.FULL_SCREEN`.
* `transitionStyle`: Set to the custom transition style when presenting the WebView. The default value is `IosWebViewOptionsTransitionStyle.COVER_VERTICAL`. * `transitionStyle`: Set to the custom transition style when presenting the WebView. The default value is `IOSUIModalTransitionStyle.COVER_VERTICAL`.
#### `ChromeSafariBrowser` Events #### `ChromeSafariBrowser` Events
* `onOpened`: Event fires when the `ChromeSafariBrowser` is opened. * `onOpened`: Event fires when the `ChromeSafariBrowser` is opened.
* `onLoaded`: Event fires when the `ChromeSafariBrowser` is loaded. * `onCompletedInitialLoad`: Event fires when the initial URL load is complete.
* `onClosed`: Event fires when the `ChromeSafariBrowser` is closed. * `onClosed`: Event fires when the `ChromeSafariBrowser` is closed.
### `InAppLocalhostServer` class ### `InAppLocalhostServer` class
......
...@@ -5,7 +5,12 @@ import android.content.Intent; ...@@ -5,7 +5,12 @@ import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import androidx.browser.customtabs.CustomTabsCallback;
import androidx.browser.customtabs.CustomTabsIntent; import androidx.browser.customtabs.CustomTabsIntent;
import androidx.browser.customtabs.CustomTabsService;
import androidx.browser.customtabs.CustomTabsSession;
import com.pichillilorenzo.flutter_inappwebview.InAppWebViewFlutterPlugin; import com.pichillilorenzo.flutter_inappwebview.InAppWebViewFlutterPlugin;
import com.pichillilorenzo.flutter_inappwebview.R; import com.pichillilorenzo.flutter_inappwebview.R;
...@@ -20,7 +25,10 @@ public class ChromeCustomTabsActivity extends Activity { ...@@ -20,7 +25,10 @@ public class ChromeCustomTabsActivity extends Activity {
CustomTabsIntent.Builder builder; CustomTabsIntent.Builder builder;
ChromeCustomTabsOptions options; ChromeCustomTabsOptions options;
private CustomTabActivityHelper customTabActivityHelper; private CustomTabActivityHelper customTabActivityHelper;
private CustomTabsSession customTabsSession;
private final int CHROME_CUSTOM_TAB_REQUEST_CODE = 100; private final int CHROME_CUSTOM_TAB_REQUEST_CODE = 100;
private boolean onChromeSafariBrowserOpened = false;
private boolean onChromeSafariBrowserCompletedInitialLoad = false;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -31,30 +39,82 @@ public class ChromeCustomTabsActivity extends Activity { ...@@ -31,30 +39,82 @@ public class ChromeCustomTabsActivity extends Activity {
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
assert b != null; assert b != null;
uuid = b.getString("uuid"); uuid = b.getString("uuid");
String url = b.getString("url"); final String url = b.getString("url");
options = new ChromeCustomTabsOptions(); options = new ChromeCustomTabsOptions();
options.parse((HashMap<String, Object>) b.getSerializable("options")); options.parse((HashMap<String, Object>) b.getSerializable("options"));
InAppWebViewFlutterPlugin.inAppBrowser.chromeCustomTabsActivities.put(uuid, this); InAppWebViewFlutterPlugin.inAppBrowser.chromeCustomTabsActivities.put(uuid, this);
customTabActivityHelper = new CustomTabActivityHelper(); final ChromeCustomTabsActivity chromeCustomTabsActivity = this;
builder = new CustomTabsIntent.Builder();
prepareCustomTabs();
CustomTabsIntent customTabsIntent = builder.build();
CustomTabActivityHelper.openCustomTab(this, customTabsIntent, Uri.parse(url), CHROME_CUSTOM_TAB_REQUEST_CODE); customTabActivityHelper = new CustomTabActivityHelper();
customTabActivityHelper.setConnectionCallback(new CustomTabActivityHelper.ConnectionCallback() {
Map<String, Object> obj = new HashMap<>(); @Override
obj.put("uuid", uuid); public void onCustomTabsConnected() {
InAppWebViewFlutterPlugin.inAppBrowser.channel.invokeMethod("onChromeSafariBrowserOpened", obj); customTabsSession = customTabActivityHelper.getSession();
InAppWebViewFlutterPlugin.inAppBrowser.channel.invokeMethod("onChromeSafariBrowserLoaded", obj); Uri uri = Uri.parse(url);
customTabActivityHelper.mayLaunchUrl(uri, null, null);
builder = new CustomTabsIntent.Builder(customTabsSession);
CustomTabsIntent customTabsIntent = builder.build();
prepareCustomTabs(customTabsIntent);
CustomTabActivityHelper.openCustomTab(chromeCustomTabsActivity, customTabsIntent, uri, CHROME_CUSTOM_TAB_REQUEST_CODE);
}
@Override
public void onCustomTabsDisconnected() {
customTabsSession = null;
finish();
Map<String, Object> obj = new HashMap<>();
obj.put("uuid", uuid);
InAppWebViewFlutterPlugin.inAppBrowser.channel.invokeMethod("onChromeSafariBrowserClosed", obj);
}
});
customTabActivityHelper.setCustomTabsCallback(new CustomTabsCallback() {
@Override
public void onNavigationEvent(int navigationEvent, Bundle extras) {
if (navigationEvent == TAB_SHOWN && !onChromeSafariBrowserOpened) {
onChromeSafariBrowserOpened = true;
Map<String, Object> obj = new HashMap<>();
obj.put("uuid", uuid);
InAppWebViewFlutterPlugin.inAppBrowser.channel.invokeMethod("onChromeSafariBrowserOpened", obj);
}
if (navigationEvent == NAVIGATION_FINISHED && !onChromeSafariBrowserCompletedInitialLoad) {
onChromeSafariBrowserCompletedInitialLoad = true;
Map<String, Object> obj = new HashMap<>();
obj.put("uuid", uuid);
InAppWebViewFlutterPlugin.inAppBrowser.channel.invokeMethod("onChromeSafariBrowserCompletedInitialLoad", obj);
}
}
@Override
public void extraCallback(String callbackName, Bundle args) {
}
@Override
public void onMessageChannelReady(Bundle extras) {
}
@Override
public void onPostMessage(String message, Bundle extras) {
}
@Override
public void onRelationshipValidationResult(@CustomTabsService.Relation int relation, Uri requestedOrigin,
boolean result, Bundle extras) {
}
});
} }
private void prepareCustomTabs() { private void prepareCustomTabs(CustomTabsIntent customTabsIntent) {
if (options.addShareButton) if (options.addDefaultShareMenuItem)
builder.addDefaultShareMenuItem(); builder.addDefaultShareMenuItem();
if (!options.toolbarBackgroundColor.isEmpty()) if (!options.toolbarBackgroundColor.isEmpty())
...@@ -66,6 +126,14 @@ public class ChromeCustomTabsActivity extends Activity { ...@@ -66,6 +126,14 @@ public class ChromeCustomTabsActivity extends Activity {
builder.enableUrlBarHiding(); builder.enableUrlBarHiding();
builder.setInstantAppsEnabled(options.instantAppsEnabled); builder.setInstantAppsEnabled(options.instantAppsEnabled);
if (options.packageName != null)
customTabsIntent.intent.setPackage(options.packageName);
else
customTabsIntent.intent.setPackage(CustomTabsHelper.getPackageNameToUse(this));
if (options.keepAliveEnabled)
CustomTabsHelper.addKeepAliveExtra(this, customTabsIntent.intent);
} }
@Override @Override
...@@ -83,6 +151,7 @@ public class ChromeCustomTabsActivity extends Activity { ...@@ -83,6 +151,7 @@ public class ChromeCustomTabsActivity extends Activity {
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CHROME_CUSTOM_TAB_REQUEST_CODE) { if (requestCode == CHROME_CUSTOM_TAB_REQUEST_CODE) {
customTabsSession = null;
finish(); finish();
Map<String, Object> obj = new HashMap<>(); Map<String, Object> obj = new HashMap<>();
obj.put("uuid", uuid); obj.put("uuid", uuid);
......
...@@ -6,10 +6,12 @@ public class ChromeCustomTabsOptions extends Options { ...@@ -6,10 +6,12 @@ public class ChromeCustomTabsOptions extends Options {
final static String LOG_TAG = "ChromeCustomTabsOptions"; final static String LOG_TAG = "ChromeCustomTabsOptions";
public boolean addShareButton = true; public Boolean addDefaultShareMenuItem = true;
public boolean showTitle = true; public Boolean showTitle = true;
public String toolbarBackgroundColor = ""; public String toolbarBackgroundColor = "";
public boolean enableUrlBarHiding = false; public Boolean enableUrlBarHiding = false;
public boolean instantAppsEnabled = false; public Boolean instantAppsEnabled = false;
public String packageName;
public Boolean keepAliveEnabled = false;
} }
...@@ -3,6 +3,8 @@ package com.pichillilorenzo.flutter_inappwebview.ChromeCustomTabs; ...@@ -3,6 +3,8 @@ package com.pichillilorenzo.flutter_inappwebview.ChromeCustomTabs;
import android.app.Activity; import android.app.Activity;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import androidx.browser.customtabs.CustomTabsCallback;
import androidx.browser.customtabs.CustomTabsClient; import androidx.browser.customtabs.CustomTabsClient;
import androidx.browser.customtabs.CustomTabsIntent; import androidx.browser.customtabs.CustomTabsIntent;
import androidx.browser.customtabs.CustomTabsServiceConnection; import androidx.browser.customtabs.CustomTabsServiceConnection;
...@@ -18,6 +20,7 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback { ...@@ -18,6 +20,7 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback {
private CustomTabsClient mClient; private CustomTabsClient mClient;
private CustomTabsServiceConnection mConnection; private CustomTabsServiceConnection mConnection;
private ConnectionCallback mConnectionCallback; private ConnectionCallback mConnectionCallback;
private CustomTabsCallback mCustomTabsCallback;
/** /**
* Opens the URL on a Custom Tab if possible. Otherwise fallsback to opening it on a WebView. * Opens the URL on a Custom Tab if possible. Otherwise fallsback to opening it on a WebView.
...@@ -59,7 +62,7 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback { ...@@ -59,7 +62,7 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback {
if (mClient == null) { if (mClient == null) {
mCustomTabsSession = null; mCustomTabsSession = null;
} else if (mCustomTabsSession == null) { } else if (mCustomTabsSession == null) {
mCustomTabsSession = mClient.newSession(null); mCustomTabsSession = mClient.newSession(mCustomTabsCallback);
} }
return mCustomTabsSession; return mCustomTabsSession;
} }
...@@ -72,6 +75,10 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback { ...@@ -72,6 +75,10 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback {
this.mConnectionCallback = connectionCallback; this.mConnectionCallback = connectionCallback;
} }
public void setCustomTabsCallback(CustomTabsCallback customTabsCallback) {
this.mCustomTabsCallback = customTabsCallback;
}
/** /**
* Binds the Activity to the Custom Tabs Service. * Binds the Activity to the Custom Tabs Service.
* @param activity the activity to be binded to the service. * @param activity the activity to be binded to the service.
......
...@@ -9,6 +9,8 @@ import android.net.Uri; ...@@ -9,6 +9,8 @@ import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import androidx.browser.customtabs.CustomTabsService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -23,8 +25,6 @@ public class CustomTabsHelper { ...@@ -23,8 +25,6 @@ public class CustomTabsHelper {
static final String LOCAL_PACKAGE = "com.google.android.apps.chrome"; static final String LOCAL_PACKAGE = "com.google.android.apps.chrome";
private static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE = private static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE =
"android.support.customtabs.extra.KEEP_ALIVE"; "android.support.customtabs.extra.KEEP_ALIVE";
private static final String ACTION_CUSTOM_TABS_CONNECTION =
"android.support.customtabs.action.CustomTabsService";
private static String sPackageNameToUse; private static String sPackageNameToUse;
...@@ -63,7 +63,7 @@ public class CustomTabsHelper { ...@@ -63,7 +63,7 @@ public class CustomTabsHelper {
List<String> packagesSupportingCustomTabs = new ArrayList<>(); List<String> packagesSupportingCustomTabs = new ArrayList<>();
for (ResolveInfo info : resolvedActivityList) { for (ResolveInfo info : resolvedActivityList) {
Intent serviceIntent = new Intent(); Intent serviceIntent = new Intent();
serviceIntent.setAction(ACTION_CUSTOM_TABS_CONNECTION); serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION);
serviceIntent.setPackage(info.activityInfo.packageName); serviceIntent.setPackage(info.activityInfo.packageName);
if (pm.resolveService(serviceIntent, 0) != null) { if (pm.resolveService(serviceIntent, 0) != null) {
packagesSupportingCustomTabs.add(info.activityInfo.packageName); packagesSupportingCustomTabs.add(info.activityInfo.packageName);
......
...@@ -4,13 +4,13 @@ public class InAppBrowserOptions extends Options { ...@@ -4,13 +4,13 @@ public class InAppBrowserOptions extends Options {
public static final String LOG_TAG = "InAppBrowserOptions"; public static final String LOG_TAG = "InAppBrowserOptions";
public boolean hidden = false; public Boolean hidden = false;
public boolean toolbarTop = true; public Boolean toolbarTop = true;
public String toolbarTopBackgroundColor = ""; public String toolbarTopBackgroundColor = "";
public String toolbarTopFixedTitle = ""; public String toolbarTopFixedTitle = "";
public boolean hideUrlBar = false; public Boolean hideUrlBar = false;
public boolean hideTitleBar = false; public Boolean hideTitleBar = false;
public boolean closeOnCannotGoBack = true; public Boolean closeOnCannotGoBack = true;
public boolean progressBar = true; public Boolean progressBar = true;
} }
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
......
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
......
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
......
...@@ -12,8 +12,8 @@ class MyChromeSafariBrowser extends ChromeSafariBrowser { ...@@ -12,8 +12,8 @@ class MyChromeSafariBrowser extends ChromeSafariBrowser {
} }
@override @override
void onLoaded() { void onCompletedInitialLoad() {
print("ChromeSafari browser loaded"); print("ChromeSafari browser initial load completed");
} }
@override @override
...@@ -52,7 +52,7 @@ class _ChromeSafariBrowserExampleScreenState ...@@ -52,7 +52,7 @@ class _ChromeSafariBrowserExampleScreenState
await widget.browser.open( await widget.browser.open(
url: "https://flutter.dev/", url: "https://flutter.dev/",
options: ChromeSafariBrowserClassOptions( options: ChromeSafariBrowserClassOptions(
android: AndroidChromeCustomTabsOptions(addShareButton: false), android: AndroidChromeCustomTabsOptions(addDefaultShareMenuItem: false, keepAliveEnabled: true),
ios: IOSSafariOptions(barCollapsingEnabled: true))); ios: IOSSafariOptions(barCollapsingEnabled: true)));
}, },
child: Text("Open Chrome Safari Browser")), child: Text("Open Chrome Safari Browser")),
......
...@@ -71,29 +71,6 @@ class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> { ...@@ -71,29 +71,6 @@ class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> {
setState(() { setState(() {
this.url = url; this.url = url;
}); });
/*var origins = await WebStorageManager.instance().android.getOrigins();
for (var origin in origins) {
print(origin);
print(await WebStorageManager.instance().android.getQuotaForOrigin(origin: origin.origin));
print(await WebStorageManager.instance().android.getUsageForOrigin(origin: origin.origin));
}
await WebStorageManager.instance().android.deleteAllData();
print("\n\nDELETED\n\n");
origins = await WebStorageManager.instance().android.getOrigins();
for (var origin in origins) {
print(origin);
await WebStorageManager.instance().android.deleteOrigin(origin: origin.origin);
}*/
/*var records = await WebStorageManager.instance().ios.fetchDataRecords(dataTypes: IOSWKWebsiteDataType.ALL);
for(var record in records) {
print(record);
}
await WebStorageManager.instance().ios.removeDataModifiedSince(dataTypes: IOSWKWebsiteDataType.ALL, date: DateTime(0));
print("\n\nDELETED\n\n");
records = await WebStorageManager.instance().ios.fetchDataRecords(dataTypes: IOSWKWebsiteDataType.ALL);
for(var record in records) {
print(record);
}*/
}, },
onProgressChanged: (InAppWebViewController controller, int progress) { onProgressChanged: (InAppWebViewController controller, int progress) {
setState(() { setState(() {
......
...@@ -1036,8 +1036,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi ...@@ -1036,8 +1036,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
dataDetectorTypes = WKDataDetectorTypes(rawValue: dataDetectorTypes.rawValue | dataDetectorType.rawValue) dataDetectorTypes = WKDataDetectorTypes(rawValue: dataDetectorTypes.rawValue | dataDetectorType.rawValue)
} }
configuration.dataDetectorTypes = dataDetectorTypes configuration.dataDetectorTypes = dataDetectorTypes
} else {
// Fallback on earlier versions
} }
if #available(iOS 13.0, *) { if #available(iOS 13.0, *) {
...@@ -1046,8 +1044,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi ...@@ -1046,8 +1044,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
configuration.defaultWebpagePreferences.preferredContentMode = WKWebpagePreferences.ContentMode(rawValue: (options?.preferredContentMode)!)! configuration.defaultWebpagePreferences.preferredContentMode = WKWebpagePreferences.ContentMode(rawValue: (options?.preferredContentMode)!)!
} }
scrollView.automaticallyAdjustsScrollIndicatorInsets = (options?.automaticallyAdjustsScrollIndicatorInsets)! scrollView.automaticallyAdjustsScrollIndicatorInsets = (options?.automaticallyAdjustsScrollIndicatorInsets)!
} else {
// Fallback on earlier versions
} }
scrollView.showsVerticalScrollIndicator = (options?.verticalScrollBarEnabled)! scrollView.showsVerticalScrollIndicator = (options?.verticalScrollBarEnabled)!
...@@ -1110,8 +1106,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi ...@@ -1110,8 +1106,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
configuration.setURLSchemeHandler(CustomeSchemeHandler(), forURLScheme: scheme) configuration.setURLSchemeHandler(CustomeSchemeHandler(), forURLScheme: scheme)
} }
} }
} else {
// Fallback on earlier versions
} }
return configuration return configuration
...@@ -1335,12 +1329,8 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi ...@@ -1335,12 +1329,8 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
} }
configuration.dataDetectorTypes = dataDetectorTypes configuration.dataDetectorTypes = dataDetectorTypes
} }
} else {
// Fallback on earlier versions
} }
scrollView
if #available(iOS 13.0, *) { if #available(iOS 13.0, *) {
if newOptionsMap["isFraudulentWebsiteWarningEnabled"] != nil && options?.isFraudulentWebsiteWarningEnabled != newOptions.isFraudulentWebsiteWarningEnabled { if newOptionsMap["isFraudulentWebsiteWarningEnabled"] != nil && options?.isFraudulentWebsiteWarningEnabled != newOptions.isFraudulentWebsiteWarningEnabled {
configuration.preferences.isFraudulentWebsiteWarningEnabled = newOptions.isFraudulentWebsiteWarningEnabled configuration.preferences.isFraudulentWebsiteWarningEnabled = newOptions.isFraudulentWebsiteWarningEnabled
...@@ -1351,8 +1341,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi ...@@ -1351,8 +1341,6 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
if newOptionsMap["automaticallyAdjustsScrollIndicatorInsets"] != nil && options?.automaticallyAdjustsScrollIndicatorInsets != newOptions.automaticallyAdjustsScrollIndicatorInsets { if newOptionsMap["automaticallyAdjustsScrollIndicatorInsets"] != nil && options?.automaticallyAdjustsScrollIndicatorInsets != newOptions.automaticallyAdjustsScrollIndicatorInsets {
scrollView.automaticallyAdjustsScrollIndicatorInsets = newOptions.automaticallyAdjustsScrollIndicatorInsets scrollView.automaticallyAdjustsScrollIndicatorInsets = newOptions.automaticallyAdjustsScrollIndicatorInsets
} }
} else {
// Fallback on earlier versions
} }
if newOptionsMap["verticalScrollBarEnabled"] != nil && options?.verticalScrollBarEnabled != newOptions.verticalScrollBarEnabled { if newOptionsMap["verticalScrollBarEnabled"] != nil && options?.verticalScrollBarEnabled != newOptions.verticalScrollBarEnabled {
......
...@@ -59,13 +59,32 @@ class SafariViewController: SFSafariViewController, SFSafariViewControllerDelega ...@@ -59,13 +59,32 @@ class SafariViewController: SFSafariViewController, SFSafariViewControllerDelega
func safariViewController(_ controller: SFSafariViewController, func safariViewController(_ controller: SFSafariViewController,
didCompleteInitialLoad didLoadSuccessfully: Bool) { didCompleteInitialLoad didLoadSuccessfully: Bool) {
if didLoadSuccessfully { if didLoadSuccessfully {
statusDelegate?.onChromeSafariBrowserLoaded(uuid: self.uuid) statusDelegate?.onChromeSafariBrowserCompletedInitialLoad(uuid: self.uuid)
} }
else { else {
print("Cant load successfully the 'SafariViewController'.") print("Cant load successfully the 'SafariViewController'.")
} }
} }
func safariViewController(_ controller: SFSafariViewController, activityItemsFor URL: URL, title: String?) -> [UIActivity] {
// print("activityItemsFor")
// print(URL)
// print(title)
return []
}
func safariViewController(_ controller: SFSafariViewController, excludedActivityTypesFor URL: URL, title: String?) -> [UIActivity.ActivityType] {
// print("excludedActivityTypesFor")
// print(URL)
// print(title)
return []
}
func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {
// print("initialLoadDidRedirectTo")
// print(URL)
}
// Helper function to convert hex color string to UIColor // Helper function to convert hex color string to UIColor
// Assumes input like "#00FF00" (#RRGGBB). // Assumes input like "#00FF00" (#RRGGBB).
// Taken from https://stackoverflow.com/questions/1560081/how-can-i-create-a-uicolor-from-a-hex-string // Taken from https://stackoverflow.com/questions/1560081/how-can-i-create-a-uicolor-from-a-hex-string
......
...@@ -432,11 +432,10 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin { ...@@ -432,11 +432,10 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
safari.safariOptions = safariOptions safari.safariOptions = safariOptions
self.safariViewControllers[uuid] = safari self.safariViewControllers[uuid] = safari
tmpController.present(self.safariViewControllers[uuid]! as! SFSafariViewController, animated: true) {
tmpController.present(self.safariViewControllers[uuid]! as! SFSafariViewController, animated: true) self.onChromeSafariBrowserOpened(uuid: uuid)
onChromeSafariBrowserOpened(uuid: uuid) result(true)
result(true) }
return return
} }
else { else {
...@@ -742,9 +741,9 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin { ...@@ -742,9 +741,9 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
} }
} }
public func onChromeSafariBrowserLoaded(uuid: String) { public func onChromeSafariBrowserCompletedInitialLoad(uuid: String) {
if self.safariViewControllers[uuid] != nil { if self.safariViewControllers[uuid] != nil {
self.channel!.invokeMethod("onChromeSafariBrowserLoaded", arguments: ["uuid": uuid]) self.channel!.invokeMethod("onChromeSafariBrowserCompletedInitialLoad", arguments: ["uuid": uuid])
} }
} }
......
//
// TestWebView.swift
// flutter_inappwebview
//
// Created by Lorenzo Pichilli on 14/12/2019.
//
import Flutter
import Foundation
import WebKit
public class TestWebView: WKWebView {
override init(frame: CGRect, configuration: WKWebViewConfiguration) {
super.init(frame: frame, configuration: configuration)
}
required public init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
public override func removeFromSuperview() {
configuration.userContentController.removeAllUserScripts()
super.removeFromSuperview()
print("\n\n DISPOSE \n\n")
}
deinit {
print("dealloc") // never called
}
}
...@@ -32,8 +32,8 @@ class ChromeSafariBrowser { ...@@ -32,8 +32,8 @@ class ChromeSafariBrowser {
case "onChromeSafariBrowserOpened": case "onChromeSafariBrowserOpened":
onOpened(); onOpened();
break; break;
case "onChromeSafariBrowserLoaded": case "onChromeSafariBrowserCompletedInitialLoad":
onLoaded(); onCompletedInitialLoad();
break; break;
case "onChromeSafariBrowserClosed": case "onChromeSafariBrowserClosed":
onClosed(); onClosed();
...@@ -109,8 +109,8 @@ class ChromeSafariBrowser { ...@@ -109,8 +109,8 @@ class ChromeSafariBrowser {
///Event fires when the [ChromeSafariBrowser] is opened. ///Event fires when the [ChromeSafariBrowser] is opened.
void onOpened() {} void onOpened() {}
///Event fires when the [ChromeSafariBrowser] is loaded. ///Event fires when the initial URL load is complete.
void onLoaded() {} void onCompletedInitialLoad() {}
///Event fires when the [ChromeSafariBrowser] is closed. ///Event fires when the [ChromeSafariBrowser] is closed.
void onClosed() {} void onClosed() {}
......
...@@ -723,13 +723,13 @@ class Favicon { ...@@ -723,13 +723,13 @@ class Favicon {
} }
} }
///AndroidInAppWebViewCacheMode class represents an Android-specific class used to override the way the cache is used. ///AndroidCacheMode class represents an Android-specific class used to override the way the cache is used.
class AndroidInAppWebViewCacheMode { class AndroidCacheMode {
final int _value; final int _value;
const AndroidInAppWebViewCacheMode._internal(this._value); const AndroidCacheMode._internal(this._value);
static AndroidInAppWebViewCacheMode fromValue(int value) { static AndroidCacheMode fromValue(int value) {
if (value != null && value >= 0 && value <= 3) if (value != null && value >= 0 && value <= 3)
return AndroidInAppWebViewCacheMode._internal(value); return AndroidCacheMode._internal(value);
return null; return null;
} }
...@@ -751,18 +751,18 @@ class AndroidInAppWebViewCacheMode { ...@@ -751,18 +751,18 @@ class AndroidInAppWebViewCacheMode {
///Default cache usage mode. If the navigation type doesn't impose any specific behavior, ///Default cache usage mode. If the navigation type doesn't impose any specific behavior,
///use cached resources when they are available and not expired, otherwise load resources from the network. ///use cached resources when they are available and not expired, otherwise load resources from the network.
static const LOAD_DEFAULT = const AndroidInAppWebViewCacheMode._internal(-1); static const LOAD_DEFAULT = const AndroidCacheMode._internal(-1);
///Use cached resources when they are available, even if they have expired. Otherwise load resources from the network. ///Use cached resources when they are available, even if they have expired. Otherwise load resources from the network.
static const LOAD_CACHE_ELSE_NETWORK = static const LOAD_CACHE_ELSE_NETWORK =
const AndroidInAppWebViewCacheMode._internal(1); const AndroidCacheMode._internal(1);
///Don't use the cache, load from the network. ///Don't use the cache, load from the network.
static const LOAD_NO_CACHE = const AndroidInAppWebViewCacheMode._internal(2); static const LOAD_NO_CACHE = const AndroidCacheMode._internal(2);
///Don't use the network, load from the cache. ///Don't use the network, load from the cache.
static const LOAD_CACHE_ONLY = static const LOAD_CACHE_ONLY =
const AndroidInAppWebViewCacheMode._internal(3); const AndroidCacheMode._internal(3);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -770,15 +770,15 @@ class AndroidInAppWebViewCacheMode { ...@@ -770,15 +770,15 @@ class AndroidInAppWebViewCacheMode {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///AndroidInAppWebViewModeMenuItem class represents an Android-specific class used to disable the action mode menu items. ///AndroidActionModeMenuItem class represents an Android-specific class used to disable the action mode menu items.
/// ///
///**NOTE**: available on Android 24+. ///**NOTE**: available on Android 24+.
class AndroidInAppWebViewModeMenuItem { class AndroidActionModeMenuItem {
final int _value; final int _value;
const AndroidInAppWebViewModeMenuItem._internal(this._value); const AndroidActionModeMenuItem._internal(this._value);
static AndroidInAppWebViewModeMenuItem fromValue(int value) { static AndroidActionModeMenuItem fromValue(int value) {
if (value != null && value != 3 && value >= 0 && value <= 4) if (value != null && value != 3 && value >= 0 && value <= 4)
return AndroidInAppWebViewModeMenuItem._internal(value); return AndroidActionModeMenuItem._internal(value);
return null; return null;
} }
...@@ -800,19 +800,19 @@ class AndroidInAppWebViewModeMenuItem { ...@@ -800,19 +800,19 @@ class AndroidInAppWebViewModeMenuItem {
///No menu items should be disabled. ///No menu items should be disabled.
static const MENU_ITEM_NONE = static const MENU_ITEM_NONE =
const AndroidInAppWebViewModeMenuItem._internal(0); const AndroidActionModeMenuItem._internal(0);
///Disable menu item "Share". ///Disable menu item "Share".
static const MENU_ITEM_SHARE = static const MENU_ITEM_SHARE =
const AndroidInAppWebViewModeMenuItem._internal(1); const AndroidActionModeMenuItem._internal(1);
///Disable menu item "Web Search". ///Disable menu item "Web Search".
static const MENU_ITEM_WEB_SEARCH = static const MENU_ITEM_WEB_SEARCH =
const AndroidInAppWebViewModeMenuItem._internal(2); const AndroidActionModeMenuItem._internal(2);
///Disable all the action mode menu items for text processing. ///Disable all the action mode menu items for text processing.
static const MENU_ITEM_PROCESS_TEXT = static const MENU_ITEM_PROCESS_TEXT =
const AndroidInAppWebViewModeMenuItem._internal(4); const AndroidActionModeMenuItem._internal(4);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -820,15 +820,15 @@ class AndroidInAppWebViewModeMenuItem { ...@@ -820,15 +820,15 @@ class AndroidInAppWebViewModeMenuItem {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///AndroidInAppWebViewForceDark class represents an Android-specific class used to indicate the force dark mode. ///AndroidForceDark class represents an Android-specific class used to indicate the force dark mode.
/// ///
///**NOTE**: available on Android 29+. ///**NOTE**: available on Android 29+.
class AndroidInAppWebViewForceDark { class AndroidForceDark {
final int _value; final int _value;
const AndroidInAppWebViewForceDark._internal(this._value); const AndroidForceDark._internal(this._value);
static AndroidInAppWebViewForceDark fromValue(int value) { static AndroidForceDark fromValue(int value) {
if (value != null && value >= 0 && value <= 2) if (value != null && value >= 0 && value <= 2)
return AndroidInAppWebViewForceDark._internal(value); return AndroidForceDark._internal(value);
return null; return null;
} }
...@@ -848,14 +848,14 @@ class AndroidInAppWebViewForceDark { ...@@ -848,14 +848,14 @@ class AndroidInAppWebViewForceDark {
///Disable force dark, irrespective of the force dark mode of the WebView parent. ///Disable force dark, irrespective of the force dark mode of the WebView parent.
///In this mode, WebView content will always be rendered as-is, regardless of whether native views are being automatically darkened. ///In this mode, WebView content will always be rendered as-is, regardless of whether native views are being automatically darkened.
static const FORCE_DARK_OFF = const AndroidInAppWebViewForceDark._internal(0); static const FORCE_DARK_OFF = const AndroidForceDark._internal(0);
///Enable force dark dependent on the state of the WebView parent view. ///Enable force dark dependent on the state of the WebView parent view.
static const FORCE_DARK_AUTO = static const FORCE_DARK_AUTO =
const AndroidInAppWebViewForceDark._internal(1); const AndroidForceDark._internal(1);
///Unconditionally enable force dark. In this mode WebView content will always be rendered so as to emulate a dark theme. ///Unconditionally enable force dark. In this mode WebView content will always be rendered so as to emulate a dark theme.
static const FORCE_DARK_ON = const AndroidInAppWebViewForceDark._internal(2); static const FORCE_DARK_ON = const AndroidForceDark._internal(2);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -863,13 +863,13 @@ class AndroidInAppWebViewForceDark { ...@@ -863,13 +863,13 @@ class AndroidInAppWebViewForceDark {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///AndroidInAppWebViewLayoutAlgorithm class represents an Android-specific class used to set the underlying layout algorithm. ///AndroidLayoutAlgorithm class represents an Android-specific class used to set the underlying layout algorithm.
class AndroidInAppWebViewLayoutAlgorithm { class AndroidLayoutAlgorithm {
final String _value; final String _value;
const AndroidInAppWebViewLayoutAlgorithm._internal(this._value); const AndroidLayoutAlgorithm._internal(this._value);
static AndroidInAppWebViewLayoutAlgorithm fromValue(String value) { static AndroidLayoutAlgorithm fromValue(String value) {
return (["NORMAL", "TEXT_AUTOSIZING"].contains(value)) return (["NORMAL", "TEXT_AUTOSIZING"].contains(value))
? AndroidInAppWebViewLayoutAlgorithm._internal(value) ? AndroidLayoutAlgorithm._internal(value)
: null; : null;
} }
...@@ -879,14 +879,14 @@ class AndroidInAppWebViewLayoutAlgorithm { ...@@ -879,14 +879,14 @@ class AndroidInAppWebViewLayoutAlgorithm {
///NORMAL means no rendering changes. This is the recommended choice for maximum compatibility across different platforms and Android versions. ///NORMAL means no rendering changes. This is the recommended choice for maximum compatibility across different platforms and Android versions.
static const NORMAL = static const NORMAL =
const AndroidInAppWebViewLayoutAlgorithm._internal("NORMAL"); const AndroidLayoutAlgorithm._internal("NORMAL");
///TEXT_AUTOSIZING boosts font size of paragraphs based on heuristics to make the text readable when viewing a wide-viewport layout in the overview mode. ///TEXT_AUTOSIZING boosts font size of paragraphs based on heuristics to make the text readable when viewing a wide-viewport layout in the overview mode.
///It is recommended to enable zoom support [AndroidInAppWebViewOptions.supportZoom] when using this mode. ///It is recommended to enable zoom support [AndroidInAppWebViewOptions.supportZoom] when using this mode.
/// ///
///**NOTE**: available on Android 19+. ///**NOTE**: available on Android 19+.
static const TEXT_AUTOSIZING = static const TEXT_AUTOSIZING =
const AndroidInAppWebViewLayoutAlgorithm._internal("TEXT_AUTOSIZING"); const AndroidLayoutAlgorithm._internal("TEXT_AUTOSIZING");
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -894,15 +894,15 @@ class AndroidInAppWebViewLayoutAlgorithm { ...@@ -894,15 +894,15 @@ class AndroidInAppWebViewLayoutAlgorithm {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///AndroidInAppWebViewMixedContentMode class represents an Android-specific class used to configure the WebView's behavior when a secure origin attempts to load a resource from an insecure origin. ///AndroidMixedContentMode class represents an Android-specific class used to configure the WebView's behavior when a secure origin attempts to load a resource from an insecure origin.
/// ///
///**NOTE**: available on Android 21+. ///**NOTE**: available on Android 21+.
class AndroidInAppWebViewMixedContentMode { class AndroidMixedContentMode {
final int _value; final int _value;
const AndroidInAppWebViewMixedContentMode._internal(this._value); const AndroidMixedContentMode._internal(this._value);
static AndroidInAppWebViewMixedContentMode fromValue(int value) { static AndroidMixedContentMode fromValue(int value) {
if (value != null && value >= 0 && value <= 2) if (value != null && value >= 0 && value <= 2)
return AndroidInAppWebViewMixedContentMode._internal(value); return AndroidMixedContentMode._internal(value);
return null; return null;
} }
...@@ -923,20 +923,20 @@ class AndroidInAppWebViewMixedContentMode { ...@@ -923,20 +923,20 @@ class AndroidInAppWebViewMixedContentMode {
///In this mode, the WebView will allow a secure origin to load content from any other origin, even if that origin is insecure. ///In this mode, the WebView will allow a secure origin to load content from any other origin, even if that origin is insecure.
///This is the least secure mode of operation for the WebView, and where possible apps should not set this mode. ///This is the least secure mode of operation for the WebView, and where possible apps should not set this mode.
static const MIXED_CONTENT_ALWAYS_ALLOW = static const MIXED_CONTENT_ALWAYS_ALLOW =
const AndroidInAppWebViewMixedContentMode._internal(0); const AndroidMixedContentMode._internal(0);
///In this mode, the WebView will not allow a secure origin to load content from an insecure origin. ///In this mode, the WebView will not allow a secure origin to load content from an insecure origin.
///This is the preferred and most secure mode of operation for the WebView and apps are strongly advised to use this mode. ///This is the preferred and most secure mode of operation for the WebView and apps are strongly advised to use this mode.
static const MIXED_CONTENT_NEVER_ALLOW = static const MIXED_CONTENT_NEVER_ALLOW =
const AndroidInAppWebViewMixedContentMode._internal(1); const AndroidMixedContentMode._internal(1);
///In this mode, the WebView will attempt to be compatible with the approach of a modern web browser with regard to mixed content. ///In this mode, the WebView will attempt to be compatible with the approach of a modern web browser with regard to mixed content.
///Some insecure content may be allowed to be loaded by a secure origin and other types of content will be blocked. ///Some insecure content may be allowed to be loaded by a secure origin and other types of content will be blocked.
///The types of content are allowed or blocked may change release to release and are not explicitly defined. ///The types of content are allowed or blocked may change release to release and are not explicitly defined.
///This mode is intended to be used by apps that are not in control of the content that they render but desire to operate in a reasonably secure environment. ///This mode is intended to be used by apps that are not in control of the content that they render but desire to operate in a reasonably secure environment.
///For highest security, apps are recommended to use [AndroidInAppWebViewMixedContentMode.MIXED_CONTENT_NEVER_ALLOW]. ///For highest security, apps are recommended to use [AndroidMixedContentMode.MIXED_CONTENT_NEVER_ALLOW].
static const MIXED_CONTENT_COMPATIBILITY_MODE = static const MIXED_CONTENT_COMPATIBILITY_MODE =
const AndroidInAppWebViewMixedContentMode._internal(2); const AndroidMixedContentMode._internal(2);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -944,13 +944,13 @@ class AndroidInAppWebViewMixedContentMode { ...@@ -944,13 +944,13 @@ class AndroidInAppWebViewMixedContentMode {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///IOSInAppWebViewSelectionGranularity class represents an iOS-specific class used to set the level of granularity with which the user can interactively select content in the web view. ///IOSWKSelectionGranularity class represents an iOS-specific class used to set the level of granularity with which the user can interactively select content in the web view.
class IOSInAppWebViewSelectionGranularity { class IOSWKSelectionGranularity {
final int _value; final int _value;
const IOSInAppWebViewSelectionGranularity._internal(this._value); const IOSWKSelectionGranularity._internal(this._value);
static IOSInAppWebViewSelectionGranularity fromValue(int value) { static IOSWKSelectionGranularity fromValue(int value) {
if (value != null && value >= 0 && value <= 1) if (value != null && value >= 0 && value <= 1)
return IOSInAppWebViewSelectionGranularity._internal(value); return IOSWKSelectionGranularity._internal(value);
return null; return null;
} }
...@@ -967,11 +967,11 @@ class IOSInAppWebViewSelectionGranularity { ...@@ -967,11 +967,11 @@ class IOSInAppWebViewSelectionGranularity {
} }
///Selection granularity varies automatically based on the selection. ///Selection granularity varies automatically based on the selection.
static const DYNAMIC = const IOSInAppWebViewSelectionGranularity._internal(0); static const DYNAMIC = const IOSWKSelectionGranularity._internal(0);
///Selection endpoints can be placed at any character boundary. ///Selection endpoints can be placed at any character boundary.
static const CHARACTER = static const CHARACTER =
const IOSInAppWebViewSelectionGranularity._internal(1); const IOSWKSelectionGranularity._internal(1);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -979,13 +979,13 @@ class IOSInAppWebViewSelectionGranularity { ...@@ -979,13 +979,13 @@ class IOSInAppWebViewSelectionGranularity {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///IOSInAppWebViewDataDetectorTypes class represents an iOS-specific class used to specify a dataDetectoryTypes value that adds interactivity to web content that matches the value. ///IOSWKDataDetectorTypes class represents an iOS-specific class used to specify a dataDetectoryTypes value that adds interactivity to web content that matches the value.
/// ///
///**NOTE**: available on iOS 10.0+. ///**NOTE**: available on iOS 10.0+.
class IOSInAppWebViewDataDetectorTypes { class IOSWKDataDetectorTypes {
final String _value; final String _value;
const IOSInAppWebViewDataDetectorTypes._internal(this._value); const IOSWKDataDetectorTypes._internal(this._value);
static IOSInAppWebViewDataDetectorTypes fromValue(String value) { static IOSWKDataDetectorTypes fromValue(String value) {
return ([ return ([
"NONE", "NONE",
"PHONE_NUMBER", "PHONE_NUMBER",
...@@ -999,7 +999,7 @@ class IOSInAppWebViewDataDetectorTypes { ...@@ -999,7 +999,7 @@ class IOSInAppWebViewDataDetectorTypes {
"SPOTLIGHT_SUGGESTION", "SPOTLIGHT_SUGGESTION",
"ALL" "ALL"
].contains(value)) ].contains(value))
? IOSInAppWebViewDataDetectorTypes._internal(value) ? IOSWKDataDetectorTypes._internal(value)
: null; : null;
} }
...@@ -1008,41 +1008,41 @@ class IOSInAppWebViewDataDetectorTypes { ...@@ -1008,41 +1008,41 @@ class IOSInAppWebViewDataDetectorTypes {
String toString() => _value; String toString() => _value;
///No detection is performed. ///No detection is performed.
static const NONE = const IOSInAppWebViewDataDetectorTypes._internal("NONE"); static const NONE = const IOSWKDataDetectorTypes._internal("NONE");
///Phone numbers are detected and turned into links. ///Phone numbers are detected and turned into links.
static const PHONE_NUMBER = static const PHONE_NUMBER =
const IOSInAppWebViewDataDetectorTypes._internal("PHONE_NUMBER"); const IOSWKDataDetectorTypes._internal("PHONE_NUMBER");
///URLs in text are detected and turned into links. ///URLs in text are detected and turned into links.
static const LINK = const IOSInAppWebViewDataDetectorTypes._internal("LINK"); static const LINK = const IOSWKDataDetectorTypes._internal("LINK");
///Addresses are detected and turned into links. ///Addresses are detected and turned into links.
static const ADDRESS = static const ADDRESS =
const IOSInAppWebViewDataDetectorTypes._internal("ADDRESS"); const IOSWKDataDetectorTypes._internal("ADDRESS");
///Dates and times that are in the future are detected and turned into links. ///Dates and times that are in the future are detected and turned into links.
static const CALENDAR_EVENT = static const CALENDAR_EVENT =
const IOSInAppWebViewDataDetectorTypes._internal("CALENDAR_EVENT"); const IOSWKDataDetectorTypes._internal("CALENDAR_EVENT");
///Tracking numbers are detected and turned into links. ///Tracking numbers are detected and turned into links.
static const TRACKING_NUMBER = static const TRACKING_NUMBER =
const IOSInAppWebViewDataDetectorTypes._internal("TRACKING_NUMBER"); const IOSWKDataDetectorTypes._internal("TRACKING_NUMBER");
///Flight numbers are detected and turned into links. ///Flight numbers are detected and turned into links.
static const FLIGHT_NUMBER = static const FLIGHT_NUMBER =
const IOSInAppWebViewDataDetectorTypes._internal("FLIGHT_NUMBER"); const IOSWKDataDetectorTypes._internal("FLIGHT_NUMBER");
///Lookup suggestions are detected and turned into links. ///Lookup suggestions are detected and turned into links.
static const LOOKUP_SUGGESTION = static const LOOKUP_SUGGESTION =
const IOSInAppWebViewDataDetectorTypes._internal("LOOKUP_SUGGESTION"); const IOSWKDataDetectorTypes._internal("LOOKUP_SUGGESTION");
///Spotlight suggestions are detected and turned into links. ///Spotlight suggestions are detected and turned into links.
static const SPOTLIGHT_SUGGESTION = static const SPOTLIGHT_SUGGESTION =
const IOSInAppWebViewDataDetectorTypes._internal("SPOTLIGHT_SUGGESTION"); const IOSWKDataDetectorTypes._internal("SPOTLIGHT_SUGGESTION");
///All of the above data types are turned into links when detected. Choosing this value will automatically include any new detection type that is added. ///All of the above data types are turned into links when detected. Choosing this value will automatically include any new detection type that is added.
static const ALL = const IOSInAppWebViewDataDetectorTypes._internal("ALL"); static const ALL = const IOSWKDataDetectorTypes._internal("ALL");
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -1050,13 +1050,13 @@ class IOSInAppWebViewDataDetectorTypes { ...@@ -1050,13 +1050,13 @@ class IOSInAppWebViewDataDetectorTypes {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///InAppWebViewUserPreferredContentMode class represents the content mode to prefer when loading and rendering a webpage. ///UserPreferredContentMode class represents the content mode to prefer when loading and rendering a webpage.
class InAppWebViewUserPreferredContentMode { class UserPreferredContentMode {
final int _value; final int _value;
const InAppWebViewUserPreferredContentMode._internal(this._value); const UserPreferredContentMode._internal(this._value);
static InAppWebViewUserPreferredContentMode fromValue(int value) { static UserPreferredContentMode fromValue(int value) {
if (value != null && value >= 0 && value <= 2) if (value != null && value >= 0 && value <= 2)
return InAppWebViewUserPreferredContentMode._internal(value); return UserPreferredContentMode._internal(value);
return null; return null;
} }
...@@ -1076,14 +1076,14 @@ class InAppWebViewUserPreferredContentMode { ...@@ -1076,14 +1076,14 @@ class InAppWebViewUserPreferredContentMode {
///The recommended content mode for the current platform. ///The recommended content mode for the current platform.
static const RECOMMENDED = static const RECOMMENDED =
const InAppWebViewUserPreferredContentMode._internal(0); const UserPreferredContentMode._internal(0);
///Represents content targeting mobile browsers. ///Represents content targeting mobile browsers.
static const MOBILE = const InAppWebViewUserPreferredContentMode._internal(1); static const MOBILE = const UserPreferredContentMode._internal(1);
///Represents content targeting desktop browsers. ///Represents content targeting desktop browsers.
static const DESKTOP = static const DESKTOP =
const InAppWebViewUserPreferredContentMode._internal(2); const UserPreferredContentMode._internal(2);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -1091,13 +1091,13 @@ class InAppWebViewUserPreferredContentMode { ...@@ -1091,13 +1091,13 @@ class InAppWebViewUserPreferredContentMode {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///IOSWebViewOptionsPresentationStyle class represents an iOS-specific class used to specify the modal presentation style when presenting a view controller. ///IOSUIModalPresentationStyle class represents an iOS-specific class used to specify the modal presentation style when presenting a view controller.
class IOSWebViewOptionsPresentationStyle { class IOSUIModalPresentationStyle {
final int _value; final int _value;
const IOSWebViewOptionsPresentationStyle._internal(this._value); const IOSUIModalPresentationStyle._internal(this._value);
static IOSWebViewOptionsPresentationStyle fromValue(int value) { static IOSUIModalPresentationStyle fromValue(int value) {
if (value != null && value >= 0 && value <= 9) if (value != null && value >= 0 && value <= 9)
return IOSWebViewOptionsPresentationStyle._internal(value); return IOSUIModalPresentationStyle._internal(value);
return null; return null;
} }
...@@ -1131,42 +1131,42 @@ class IOSWebViewOptionsPresentationStyle { ...@@ -1131,42 +1131,42 @@ class IOSWebViewOptionsPresentationStyle {
///A presentation style in which the presented view covers the screen. ///A presentation style in which the presented view covers the screen.
static const FULL_SCREEN = static const FULL_SCREEN =
const IOSWebViewOptionsPresentationStyle._internal(0); const IOSUIModalPresentationStyle._internal(0);
///A presentation style that partially covers the underlying content. ///A presentation style that partially covers the underlying content.
static const PAGE_SHEET = static const PAGE_SHEET =
const IOSWebViewOptionsPresentationStyle._internal(1); const IOSUIModalPresentationStyle._internal(1);
///A presentation style that displays the content centered in the screen. ///A presentation style that displays the content centered in the screen.
static const FORM_SHEET = static const FORM_SHEET =
const IOSWebViewOptionsPresentationStyle._internal(2); const IOSUIModalPresentationStyle._internal(2);
///A presentation style where the content is displayed over another view controller’s content. ///A presentation style where the content is displayed over another view controller’s content.
static const CURRENT_CONTEXT = static const CURRENT_CONTEXT =
const IOSWebViewOptionsPresentationStyle._internal(3); const IOSUIModalPresentationStyle._internal(3);
///A custom view presentation style that is managed by a custom presentation controller and one or more custom animator objects. ///A custom view presentation style that is managed by a custom presentation controller and one or more custom animator objects.
static const CUSTOM = const IOSWebViewOptionsPresentationStyle._internal(4); static const CUSTOM = const IOSUIModalPresentationStyle._internal(4);
///A view presentation style in which the presented view covers the screen. ///A view presentation style in which the presented view covers the screen.
static const OVER_FULL_SCREEN = static const OVER_FULL_SCREEN =
const IOSWebViewOptionsPresentationStyle._internal(5); const IOSUIModalPresentationStyle._internal(5);
///A presentation style where the content is displayed over another view controller’s content. ///A presentation style where the content is displayed over another view controller’s content.
static const OVER_CURRENT_CONTEXT = static const OVER_CURRENT_CONTEXT =
const IOSWebViewOptionsPresentationStyle._internal(6); const IOSUIModalPresentationStyle._internal(6);
///A presentation style where the content is displayed in a popover view. ///A presentation style where the content is displayed in a popover view.
static const POPOVER = const IOSWebViewOptionsPresentationStyle._internal(7); static const POPOVER = const IOSUIModalPresentationStyle._internal(7);
///A presentation style that indicates no adaptations should be made. ///A presentation style that indicates no adaptations should be made.
static const NONE = const IOSWebViewOptionsPresentationStyle._internal(8); static const NONE = const IOSUIModalPresentationStyle._internal(8);
///The default presentation style chosen by the system. ///The default presentation style chosen by the system.
/// ///
///**NOTE**: available on iOS 13.0+. ///**NOTE**: available on iOS 13.0+.
static const AUTOMATIC = static const AUTOMATIC =
const IOSWebViewOptionsPresentationStyle._internal(9); const IOSUIModalPresentationStyle._internal(9);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -1174,13 +1174,13 @@ class IOSWebViewOptionsPresentationStyle { ...@@ -1174,13 +1174,13 @@ class IOSWebViewOptionsPresentationStyle {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///IOSWebViewOptionsTransitionStyle class represents an iOS-specific class used to specify the transition style when presenting a view controller. ///IOSUIModalTransitionStyle class represents an iOS-specific class used to specify the transition style when presenting a view controller.
class IOSWebViewOptionsTransitionStyle { class IOSUIModalTransitionStyle {
final int _value; final int _value;
const IOSWebViewOptionsTransitionStyle._internal(this._value); const IOSUIModalTransitionStyle._internal(this._value);
static IOSWebViewOptionsTransitionStyle fromValue(int value) { static IOSUIModalTransitionStyle fromValue(int value) {
if (value != null && value >= 0 && value <= 3) if (value != null && value >= 0 && value <= 3)
return IOSWebViewOptionsTransitionStyle._internal(value); return IOSUIModalTransitionStyle._internal(value);
return null; return null;
} }
...@@ -1203,24 +1203,24 @@ class IOSWebViewOptionsTransitionStyle { ...@@ -1203,24 +1203,24 @@ class IOSWebViewOptionsTransitionStyle {
///When the view controller is presented, its view slides up from the bottom of the screen. ///When the view controller is presented, its view slides up from the bottom of the screen.
///On dismissal, the view slides back down. This is the default transition style. ///On dismissal, the view slides back down. This is the default transition style.
static const COVER_VERTICAL = static const COVER_VERTICAL =
const IOSWebViewOptionsTransitionStyle._internal(0); const IOSUIModalTransitionStyle._internal(0);
///When the view controller is presented, the current view initiates a horizontal 3D flip from right-to-left, ///When the view controller is presented, the current view initiates a horizontal 3D flip from right-to-left,
///resulting in the revealing of the new view as if it were on the back of the previous view. ///resulting in the revealing of the new view as if it were on the back of the previous view.
///On dismissal, the flip occurs from left-to-right, returning to the original view. ///On dismissal, the flip occurs from left-to-right, returning to the original view.
static const FLIP_HORIZONTAL = static const FLIP_HORIZONTAL =
const IOSWebViewOptionsTransitionStyle._internal(1); const IOSUIModalTransitionStyle._internal(1);
///When the view controller is presented, the current view fades out while the new view fades in at the same time. ///When the view controller is presented, the current view fades out while the new view fades in at the same time.
///On dismissal, a similar type of cross-fade is used to return to the original view. ///On dismissal, a similar type of cross-fade is used to return to the original view.
static const CROSS_DISSOLVE = static const CROSS_DISSOLVE =
const IOSWebViewOptionsTransitionStyle._internal(2); const IOSUIModalTransitionStyle._internal(2);
///When the view controller is presented, one corner of the current view curls up to reveal the presented view underneath. ///When the view controller is presented, one corner of the current view curls up to reveal the presented view underneath.
///On dismissal, the curled up page unfurls itself back on top of the presented view. ///On dismissal, the curled up page unfurls itself back on top of the presented view.
///A view controller presented using this transition is itself prevented from presenting any additional view controllers. ///A view controller presented using this transition is itself prevented from presenting any additional view controllers.
static const PARTIAL_CURL = static const PARTIAL_CURL =
const IOSWebViewOptionsTransitionStyle._internal(3); const IOSUIModalTransitionStyle._internal(3);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
...@@ -1228,15 +1228,15 @@ class IOSWebViewOptionsTransitionStyle { ...@@ -1228,15 +1228,15 @@ class IOSWebViewOptionsTransitionStyle {
int get hashCode => _value.hashCode; int get hashCode => _value.hashCode;
} }
///IOSSafariOptionsDismissButtonStyle class represents an iOS-specific class used to set the custom style for the dismiss button. ///IOSSafariDismissButtonStyle class represents an iOS-specific class used to set the custom style for the dismiss button.
/// ///
///**NOTE**: available on iOS 11.0+. ///**NOTE**: available on iOS 11.0+.
class IOSSafariOptionsDismissButtonStyle { class IOSSafariDismissButtonStyle {
final int _value; final int _value;
const IOSSafariOptionsDismissButtonStyle._internal(this._value); const IOSSafariDismissButtonStyle._internal(this._value);
static IOSSafariOptionsDismissButtonStyle fromValue(int value) { static IOSSafariDismissButtonStyle fromValue(int value) {
if (value != null && value >= 0 && value <= 2) if (value != null && value >= 0 && value <= 2)
return IOSSafariOptionsDismissButtonStyle._internal(value); return IOSSafariDismissButtonStyle._internal(value);
return null; return null;
} }
...@@ -1255,13 +1255,13 @@ class IOSSafariOptionsDismissButtonStyle { ...@@ -1255,13 +1255,13 @@ class IOSSafariOptionsDismissButtonStyle {
} }
///Makes the button title the localized string "Done". ///Makes the button title the localized string "Done".
static const DONE = const IOSSafariOptionsDismissButtonStyle._internal(0); static const DONE = const IOSSafariDismissButtonStyle._internal(0);
///Makes the button title the localized string "Close". ///Makes the button title the localized string "Close".
static const CLOSE = const IOSSafariOptionsDismissButtonStyle._internal(1); static const CLOSE = const IOSSafariDismissButtonStyle._internal(1);
///Makes the button title the localized string "Cancel". ///Makes the button title the localized string "Cancel".
static const CANCEL = const IOSSafariOptionsDismissButtonStyle._internal(2); static const CANCEL = const IOSSafariDismissButtonStyle._internal(2);
bool operator ==(value) => value == _value; bool operator ==(value) => value == _value;
......
...@@ -98,10 +98,10 @@ class InAppWebViewOptions ...@@ -98,10 +98,10 @@ class InAppWebViewOptions
///**NOTE**: available on iOS 11.0+. ///**NOTE**: available on iOS 11.0+.
List<ContentBlocker> contentBlockers; List<ContentBlocker> contentBlockers;
///Sets the content mode that the WebView needs to use when loading and rendering a webpage. The default value is [InAppWebViewUserPreferredContentMode.RECOMMENDED]. ///Sets the content mode that the WebView needs to use when loading and rendering a webpage. The default value is [UserPreferredContentMode.RECOMMENDED].
/// ///
///**NOTE**: available on iOS 13.0+. ///**NOTE**: available on iOS 13.0+.
InAppWebViewUserPreferredContentMode preferredContentMode; UserPreferredContentMode preferredContentMode;
///Set to `true` to be able to listen at the [shouldInterceptAjaxRequest] event. The default value is `false`. ///Set to `true` to be able to listen at the [shouldInterceptAjaxRequest] event. The default value is `false`.
bool useShouldInterceptAjaxRequest; bool useShouldInterceptAjaxRequest;
...@@ -145,7 +145,7 @@ class InAppWebViewOptions ...@@ -145,7 +145,7 @@ class InAppWebViewOptions
this.resourceCustomSchemes = const [], this.resourceCustomSchemes = const [],
this.contentBlockers = const [], this.contentBlockers = const [],
this.preferredContentMode = this.preferredContentMode =
InAppWebViewUserPreferredContentMode.RECOMMENDED, UserPreferredContentMode.RECOMMENDED,
this.useShouldInterceptAjaxRequest = false, this.useShouldInterceptAjaxRequest = false,
this.useShouldInterceptFetchRequest = false, this.useShouldInterceptFetchRequest = false,
this.incognito = false, this.incognito = false,
...@@ -223,7 +223,7 @@ class InAppWebViewOptions ...@@ -223,7 +223,7 @@ class InAppWebViewOptions
List<String>.from(map["resourceCustomSchemes"] ?? []); List<String>.from(map["resourceCustomSchemes"] ?? []);
options.contentBlockers = contentBlockers; options.contentBlockers = contentBlockers;
options.preferredContentMode = options.preferredContentMode =
InAppWebViewUserPreferredContentMode.fromValue( UserPreferredContentMode.fromValue(
map["preferredContentMode"]); map["preferredContentMode"]);
options.useShouldInterceptAjaxRequest = options.useShouldInterceptAjaxRequest =
map["useShouldInterceptAjaxRequest"]; map["useShouldInterceptAjaxRequest"];
...@@ -277,7 +277,7 @@ class AndroidInAppWebViewOptions ...@@ -277,7 +277,7 @@ class AndroidInAppWebViewOptions
///Configures the WebView's behavior when a secure origin attempts to load a resource from an insecure origin. ///Configures the WebView's behavior when a secure origin attempts to load a resource from an insecure origin.
/// ///
///**NOTE**: available on Android 21+. ///**NOTE**: available on Android 21+.
AndroidInAppWebViewMixedContentMode mixedContentMode; AndroidMixedContentMode mixedContentMode;
///Enables or disables content URL access within WebView. Content URL access allows WebView to load content from a content provider installed in the system. The default value is `true`. ///Enables or disables content URL access within WebView. Content URL access allows WebView to load content from a content provider installed in the system. The default value is `true`.
bool allowContentAccess; bool allowContentAccess;
...@@ -307,8 +307,8 @@ class AndroidInAppWebViewOptions ...@@ -307,8 +307,8 @@ class AndroidInAppWebViewOptions
bool blockNetworkLoads; bool blockNetworkLoads;
///Overrides the way the cache is used. The way the cache is used is based on the navigation type. For a normal page load, the cache is checked and content is re-validated as needed. ///Overrides the way the cache is used. The way the cache is used is based on the navigation type. For a normal page load, the cache is checked and content is re-validated as needed.
///When navigating back, content is not revalidated, instead the content is just retrieved from the cache. The default value is [AndroidInAppWebViewCacheMode.LOAD_DEFAULT]. ///When navigating back, content is not revalidated, instead the content is just retrieved from the cache. The default value is [AndroidCacheMode.LOAD_DEFAULT].
AndroidInAppWebViewCacheMode cacheMode; AndroidCacheMode cacheMode;
///Sets the cursive font family name. The default value is `"cursive"`. ///Sets the cursive font family name. The default value is `"cursive"`.
String cursiveFontFamily; String cursiveFontFamily;
...@@ -325,7 +325,7 @@ class AndroidInAppWebViewOptions ...@@ -325,7 +325,7 @@ class AndroidInAppWebViewOptions
///Disables the action mode menu items according to menuItems flag. ///Disables the action mode menu items according to menuItems flag.
/// ///
///**NOTE**: available on Android 24+. ///**NOTE**: available on Android 24+.
AndroidInAppWebViewModeMenuItem disabledActionModeMenuItems; AndroidActionModeMenuItem disabledActionModeMenuItems;
///Sets the fantasy font family name. The default value is `"fantasy"`. ///Sets the fantasy font family name. The default value is `"fantasy"`.
String fantasyFontFamily; String fantasyFontFamily;
...@@ -333,16 +333,16 @@ class AndroidInAppWebViewOptions ...@@ -333,16 +333,16 @@ class AndroidInAppWebViewOptions
///Sets the fixed font family name. The default value is `"monospace"`. ///Sets the fixed font family name. The default value is `"monospace"`.
String fixedFontFamily; String fixedFontFamily;
///Set the force dark mode for this WebView. The default value is [AndroidInAppWebViewForceDark.FORCE_DARK_OFF]. ///Set the force dark mode for this WebView. The default value is [AndroidForceDark.FORCE_DARK_OFF].
/// ///
///**NOTE**: available on Android 29+. ///**NOTE**: available on Android 29+.
AndroidInAppWebViewForceDark forceDark; AndroidForceDark forceDark;
///Sets whether Geolocation API is enabled. The default value is `true`. ///Sets whether Geolocation API is enabled. The default value is `true`.
bool geolocationEnabled; bool geolocationEnabled;
///Sets the underlying layout algorithm. This will cause a re-layout of the WebView. ///Sets the underlying layout algorithm. This will cause a re-layout of the WebView.
AndroidInAppWebViewLayoutAlgorithm layoutAlgorithm; AndroidLayoutAlgorithm layoutAlgorithm;
///Sets whether the WebView loads pages in overview mode, that is, zooms out the content to fit on screen by width. ///Sets whether the WebView loads pages in overview mode, that is, zooms out the content to fit on screen by width.
///This setting is taken into account when the content width is greater than the width of the WebView control, for example, when [useWideViewPort] is enabled. ///This setting is taken into account when the content width is greater than the width of the WebView control, for example, when [useWideViewPort] is enabled.
...@@ -426,7 +426,7 @@ class AndroidInAppWebViewOptions ...@@ -426,7 +426,7 @@ class AndroidInAppWebViewOptions
this.appCachePath, this.appCachePath,
this.blockNetworkImage = false, this.blockNetworkImage = false,
this.blockNetworkLoads = false, this.blockNetworkLoads = false,
this.cacheMode = AndroidInAppWebViewCacheMode.LOAD_DEFAULT, this.cacheMode = AndroidCacheMode.LOAD_DEFAULT,
this.cursiveFontFamily = "cursive", this.cursiveFontFamily = "cursive",
this.defaultFixedFontSize = 16, this.defaultFixedFontSize = 16,
this.defaultFontSize = 16, this.defaultFontSize = 16,
...@@ -434,7 +434,7 @@ class AndroidInAppWebViewOptions ...@@ -434,7 +434,7 @@ class AndroidInAppWebViewOptions
this.disabledActionModeMenuItems, this.disabledActionModeMenuItems,
this.fantasyFontFamily = "fantasy", this.fantasyFontFamily = "fantasy",
this.fixedFontFamily = "monospace", this.fixedFontFamily = "monospace",
this.forceDark = AndroidInAppWebViewForceDark.FORCE_DARK_OFF, this.forceDark = AndroidForceDark.FORCE_DARK_OFF,
this.geolocationEnabled = true, this.geolocationEnabled = true,
this.layoutAlgorithm, this.layoutAlgorithm,
this.loadWithOverviewMode = true, this.loadWithOverviewMode = true,
...@@ -512,7 +512,7 @@ class AndroidInAppWebViewOptions ...@@ -512,7 +512,7 @@ class AndroidInAppWebViewOptions
options.useWideViewPort = map["useWideViewPort"]; options.useWideViewPort = map["useWideViewPort"];
options.safeBrowsingEnabled = map["safeBrowsingEnabled"]; options.safeBrowsingEnabled = map["safeBrowsingEnabled"];
options.mixedContentMode = options.mixedContentMode =
AndroidInAppWebViewMixedContentMode.fromValue(map["mixedContentMode"]); AndroidMixedContentMode.fromValue(map["mixedContentMode"]);
options.allowContentAccess = map["allowContentAccess"]; options.allowContentAccess = map["allowContentAccess"];
options.allowFileAccess = map["allowFileAccess"]; options.allowFileAccess = map["allowFileAccess"];
options.allowFileAccessFromFileURLs = map["allowFileAccessFromFileURLs"]; options.allowFileAccessFromFileURLs = map["allowFileAccessFromFileURLs"];
...@@ -522,21 +522,21 @@ class AndroidInAppWebViewOptions ...@@ -522,21 +522,21 @@ class AndroidInAppWebViewOptions
options.blockNetworkImage = map["blockNetworkImage"]; options.blockNetworkImage = map["blockNetworkImage"];
options.blockNetworkLoads = map["blockNetworkLoads"]; options.blockNetworkLoads = map["blockNetworkLoads"];
options.cacheMode = options.cacheMode =
AndroidInAppWebViewCacheMode.fromValue(map["cacheMode"]); AndroidCacheMode.fromValue(map["cacheMode"]);
options.cursiveFontFamily = map["cursiveFontFamily"]; options.cursiveFontFamily = map["cursiveFontFamily"];
options.defaultFixedFontSize = map["defaultFixedFontSize"]; options.defaultFixedFontSize = map["defaultFixedFontSize"];
options.defaultFontSize = map["defaultFontSize"]; options.defaultFontSize = map["defaultFontSize"];
options.defaultTextEncodingName = map["defaultTextEncodingName"]; options.defaultTextEncodingName = map["defaultTextEncodingName"];
options.disabledActionModeMenuItems = options.disabledActionModeMenuItems =
AndroidInAppWebViewModeMenuItem.fromValue( AndroidActionModeMenuItem.fromValue(
map["disabledActionModeMenuItems"]); map["disabledActionModeMenuItems"]);
options.fantasyFontFamily = map["fantasyFontFamily"]; options.fantasyFontFamily = map["fantasyFontFamily"];
options.fixedFontFamily = map["fixedFontFamily"]; options.fixedFontFamily = map["fixedFontFamily"];
options.forceDark = options.forceDark =
AndroidInAppWebViewForceDark.fromValue(map["forceDark"]); AndroidForceDark.fromValue(map["forceDark"]);
options.geolocationEnabled = map["geolocationEnabled"]; options.geolocationEnabled = map["geolocationEnabled"];
options.layoutAlgorithm = options.layoutAlgorithm =
AndroidInAppWebViewLayoutAlgorithm.fromValue(map["layoutAlgorithm"]); AndroidLayoutAlgorithm.fromValue(map["layoutAlgorithm"]);
options.loadWithOverviewMode = map["loadWithOverviewMode"]; options.loadWithOverviewMode = map["loadWithOverviewMode"];
options.loadsImagesAutomatically = map["loadsImagesAutomatically"]; options.loadsImagesAutomatically = map["loadsImagesAutomatically"];
options.minimumLogicalFontSize = map["minimumLogicalFontSize"]; options.minimumLogicalFontSize = map["minimumLogicalFontSize"];
...@@ -599,15 +599,15 @@ class IOSInAppWebViewOptions ...@@ -599,15 +599,15 @@ class IOSInAppWebViewOptions
bool isFraudulentWebsiteWarningEnabled; bool isFraudulentWebsiteWarningEnabled;
///The level of granularity with which the user can interactively select content in the web view. ///The level of granularity with which the user can interactively select content in the web view.
///The default value is [IOSInAppWebViewSelectionGranularity.DYNAMIC] ///The default value is [IOSWKSelectionGranularity.DYNAMIC]
IOSInAppWebViewSelectionGranularity selectionGranularity; IOSWKSelectionGranularity selectionGranularity;
///Specifying a dataDetectoryTypes value adds interactivity to web content that matches the value. ///Specifying a dataDetectoryTypes value adds interactivity to web content that matches the value.
///For example, Safari adds a link to “apple.com” in the text “Visit apple.com” if the dataDetectorTypes property is set to [IOSInAppWebViewDataDetectorTypes.LINK]. ///For example, Safari adds a link to “apple.com” in the text “Visit apple.com” if the dataDetectorTypes property is set to [IOSWKDataDetectorTypes.LINK].
///The default value is [IOSInAppWebViewDataDetectorTypes.NONE]. ///The default value is [IOSWKDataDetectorTypes.NONE].
/// ///
///**NOTE**: available on iOS 10.0+. ///**NOTE**: available on iOS 10.0+.
List<IOSInAppWebViewDataDetectorTypes> dataDetectorTypes; List<IOSWKDataDetectorTypes> dataDetectorTypes;
///Set `true` if shared cookies from `HTTPCookieStorage.shared` should used for every load request in the WebView. ///Set `true` if shared cookies from `HTTPCookieStorage.shared` should used for every load request in the WebView.
///The default value is `false`. ///The default value is `false`.
...@@ -632,8 +632,8 @@ class IOSInAppWebViewOptions ...@@ -632,8 +632,8 @@ class IOSInAppWebViewOptions
this.allowsInlineMediaPlayback = false, this.allowsInlineMediaPlayback = false,
this.allowsPictureInPictureMediaPlayback = true, this.allowsPictureInPictureMediaPlayback = true,
this.isFraudulentWebsiteWarningEnabled = true, this.isFraudulentWebsiteWarningEnabled = true,
this.selectionGranularity = IOSInAppWebViewSelectionGranularity.DYNAMIC, this.selectionGranularity = IOSWKSelectionGranularity.DYNAMIC,
this.dataDetectorTypes = const [IOSInAppWebViewDataDetectorTypes.NONE], this.dataDetectorTypes = const [IOSWKDataDetectorTypes.NONE],
this.sharedCookiesEnabled = false, this.sharedCookiesEnabled = false,
this.automaticallyAdjustsScrollIndicatorInsets = false}); this.automaticallyAdjustsScrollIndicatorInsets = false});
...@@ -665,12 +665,12 @@ class IOSInAppWebViewOptions ...@@ -665,12 +665,12 @@ class IOSInAppWebViewOptions
} }
static IOSInAppWebViewOptions fromMap(Map<String, dynamic> map) { static IOSInAppWebViewOptions fromMap(Map<String, dynamic> map) {
List<IOSInAppWebViewDataDetectorTypes> dataDetectorTypes = []; List<IOSWKDataDetectorTypes> dataDetectorTypes = [];
List<String> dataDetectorTypesList = List<String> dataDetectorTypesList =
List<String>.from(map["dataDetectorTypes"] ?? []); List<String>.from(map["dataDetectorTypes"] ?? []);
dataDetectorTypesList.forEach((dataDetectorType) { dataDetectorTypesList.forEach((dataDetectorType) {
dataDetectorTypes dataDetectorTypes
.add(IOSInAppWebViewDataDetectorTypes.fromValue(dataDetectorType)); .add(IOSWKDataDetectorTypes.fromValue(dataDetectorType));
}); });
IOSInAppWebViewOptions options = new IOSInAppWebViewOptions(); IOSInAppWebViewOptions options = new IOSInAppWebViewOptions();
...@@ -690,7 +690,7 @@ class IOSInAppWebViewOptions ...@@ -690,7 +690,7 @@ class IOSInAppWebViewOptions
options.isFraudulentWebsiteWarningEnabled = options.isFraudulentWebsiteWarningEnabled =
map["isFraudulentWebsiteWarningEnabled"]; map["isFraudulentWebsiteWarningEnabled"];
options.selectionGranularity = options.selectionGranularity =
IOSInAppWebViewSelectionGranularity.fromValue( IOSWKSelectionGranularity.fromValue(
map["selectionGranularity"]); map["selectionGranularity"]);
options.dataDetectorTypes = dataDetectorTypes; options.dataDetectorTypes = dataDetectorTypes;
options.sharedCookiesEnabled = map["sharedCookiesEnabled"]; options.sharedCookiesEnabled = map["sharedCookiesEnabled"];
...@@ -798,11 +798,11 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions { ...@@ -798,11 +798,11 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
///Set the custom color for the close button. ///Set the custom color for the close button.
String closeButtonColor; String closeButtonColor;
///Set the custom modal presentation style when presenting the WebView. The default value is [IOSWebViewOptionsPresentationStyle.FULL_SCREEN]. ///Set the custom modal presentation style when presenting the WebView. The default value is [IOSUIModalPresentationStyle.FULL_SCREEN].
IOSWebViewOptionsPresentationStyle presentationStyle; IOSUIModalPresentationStyle presentationStyle;
///Set to the custom transition style when presenting the WebView. The default value is [IOSWebViewOptionsTransitionStyle.COVER_VERTICAL]. ///Set to the custom transition style when presenting the WebView. The default value is [IOSUIModalTransitionStyle.COVER_VERTICAL].
IOSWebViewOptionsTransitionStyle transitionStyle; IOSUIModalTransitionStyle transitionStyle;
///Set to `false` to hide the spinner when the WebView is loading a page. The default value is `true`. ///Set to `false` to hide the spinner when the WebView is loading a page. The default value is `true`.
bool spinner; bool spinner;
...@@ -813,8 +813,8 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions { ...@@ -813,8 +813,8 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
this.toolbarBottomTranslucent = true, this.toolbarBottomTranslucent = true,
this.closeButtonCaption = "", this.closeButtonCaption = "",
this.closeButtonColor = "", this.closeButtonColor = "",
this.presentationStyle = IOSWebViewOptionsPresentationStyle.FULL_SCREEN, this.presentationStyle = IOSUIModalPresentationStyle.FULL_SCREEN,
this.transitionStyle = IOSWebViewOptionsTransitionStyle.COVER_VERTICAL, this.transitionStyle = IOSUIModalTransitionStyle.COVER_VERTICAL,
this.spinner = true}); this.spinner = true});
@override @override
...@@ -839,9 +839,9 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions { ...@@ -839,9 +839,9 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
options.closeButtonCaption = map["closeButtonCaption"]; options.closeButtonCaption = map["closeButtonCaption"];
options.closeButtonColor = map["closeButtonColor"]; options.closeButtonColor = map["closeButtonColor"];
options.presentationStyle = options.presentationStyle =
IOSWebViewOptionsPresentationStyle.fromValue(map["presentationStyle"]); IOSUIModalPresentationStyle.fromValue(map["presentationStyle"]);
options.transitionStyle = options.transitionStyle =
IOSWebViewOptionsTransitionStyle.fromValue(map["transitionStyle"]); IOSUIModalTransitionStyle.fromValue(map["transitionStyle"]);
options.spinner = map["spinner"]; options.spinner = map["spinner"];
return options; return options;
} }
...@@ -850,8 +850,8 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions { ...@@ -850,8 +850,8 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
///This class represents all the Android-only [ChromeSafariBrowser] options available. ///This class represents all the Android-only [ChromeSafariBrowser] options available.
class AndroidChromeCustomTabsOptions class AndroidChromeCustomTabsOptions
implements ChromeSafariBrowserOptions, AndroidOptions { implements ChromeSafariBrowserOptions, AndroidOptions {
///Set to `false` if you don't want the default share button. The default value is `true`. ///Set to `false` if you don't want the default share item to the menu. The default value is `true`.
bool addShareButton; bool addDefaultShareMenuItem;
///Set to `false` if the title shouldn't be shown in the custom tab. The default value is `true`. ///Set to `false` if the title shouldn't be shown in the custom tab. The default value is `true`.
bool showTitle; bool showTitle;
...@@ -865,32 +865,48 @@ class AndroidChromeCustomTabsOptions ...@@ -865,32 +865,48 @@ class AndroidChromeCustomTabsOptions
///Set to `true` to enable Instant Apps. The default value is `false`. ///Set to `true` to enable Instant Apps. The default value is `false`.
bool instantAppsEnabled; bool instantAppsEnabled;
///Set an explicit application package name that limits
///the components this Intent will resolve to. If left to the default
///value of null, all components in all applications will considered.
///If non-null, the Intent can only match the components in the given
///application package.
String packageName;
///Set to `true` to enable Keep Alive. The default value is `false`.
bool keepAliveEnabled;
AndroidChromeCustomTabsOptions( AndroidChromeCustomTabsOptions(
{this.addShareButton = true, {this.addDefaultShareMenuItem = true,
this.showTitle = true, this.showTitle = true,
this.toolbarBackgroundColor = "", this.toolbarBackgroundColor = "",
this.enableUrlBarHiding = false, this.enableUrlBarHiding = false,
this.instantAppsEnabled = false}); this.instantAppsEnabled = false,
this.packageName,
this.keepAliveEnabled = false});
@override @override
Map<String, dynamic> toMap() { Map<String, dynamic> toMap() {
return { return {
"addShareButton": addShareButton, "addDefaultShareMenuItem": addDefaultShareMenuItem,
"showTitle": showTitle, "showTitle": showTitle,
"toolbarBackgroundColor": toolbarBackgroundColor, "toolbarBackgroundColor": toolbarBackgroundColor,
"enableUrlBarHiding": enableUrlBarHiding, "enableUrlBarHiding": enableUrlBarHiding,
"instantAppsEnabled": instantAppsEnabled "instantAppsEnabled": instantAppsEnabled,
"packageName": packageName,
"keepAliveEnabled": keepAliveEnabled
}; };
} }
static AndroidChromeCustomTabsOptions fromMap(Map<String, dynamic> map) { static AndroidChromeCustomTabsOptions fromMap(Map<String, dynamic> map) {
AndroidChromeCustomTabsOptions options = AndroidChromeCustomTabsOptions options =
new AndroidChromeCustomTabsOptions(); new AndroidChromeCustomTabsOptions();
options.addShareButton = map["addShareButton"]; options.addDefaultShareMenuItem = map["addDefaultShareMenuItem"];
options.showTitle = map["showTitle"]; options.showTitle = map["showTitle"];
options.toolbarBackgroundColor = map["toolbarBackgroundColor"]; options.toolbarBackgroundColor = map["toolbarBackgroundColor"];
options.enableUrlBarHiding = map["enableUrlBarHiding"]; options.enableUrlBarHiding = map["enableUrlBarHiding"];
options.instantAppsEnabled = map["instantAppsEnabled"]; options.instantAppsEnabled = map["instantAppsEnabled"];
options.packageName = map["packageName"];
options.keepAliveEnabled = map["keepAliveEnabled"];
return options; return options;
} }
} }
...@@ -903,10 +919,10 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions { ...@@ -903,10 +919,10 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions {
///Set to `true` to enable bar collapsing. The default value is `false`. ///Set to `true` to enable bar collapsing. The default value is `false`.
bool barCollapsingEnabled; bool barCollapsingEnabled;
///Set the custom style for the dismiss button. The default value is [IOSSafariOptionsDismissButtonStyle.DONE]. ///Set the custom style for the dismiss button. The default value is [IOSSafariDismissButtonStyle.DONE].
/// ///
///**NOTE**: available on iOS 11.0+. ///**NOTE**: available on iOS 11.0+.
IOSSafariOptionsDismissButtonStyle dismissButtonStyle; IOSSafariDismissButtonStyle dismissButtonStyle;
///Set the custom background color of the navigation bar and the toolbar. ///Set the custom background color of the navigation bar and the toolbar.
/// ///
...@@ -918,20 +934,20 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions { ...@@ -918,20 +934,20 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions {
///**NOTE**: available on iOS 10.0+. ///**NOTE**: available on iOS 10.0+.
String preferredControlTintColor; String preferredControlTintColor;
///Set the custom modal presentation style when presenting the WebView. The default value is [IOSWebViewOptionsPresentationStyle.FULL_SCREEN]. ///Set the custom modal presentation style when presenting the WebView. The default value is [IOSUIModalPresentationStyle.FULL_SCREEN].
IOSWebViewOptionsPresentationStyle presentationStyle; IOSUIModalPresentationStyle presentationStyle;
///Set to the custom transition style when presenting the WebView. The default value is [IOSWebViewOptionsTransitionStyle.COVER_VERTICAL]. ///Set to the custom transition style when presenting the WebView. The default value is [IOSUIModalTransitionStyle.COVER_VERTICAL].
IOSWebViewOptionsTransitionStyle transitionStyle; IOSUIModalTransitionStyle transitionStyle;
IOSSafariOptions( IOSSafariOptions(
{this.entersReaderIfAvailable = false, {this.entersReaderIfAvailable = false,
this.barCollapsingEnabled = false, this.barCollapsingEnabled = false,
this.dismissButtonStyle = IOSSafariOptionsDismissButtonStyle.DONE, this.dismissButtonStyle = IOSSafariDismissButtonStyle.DONE,
this.preferredBarTintColor = "", this.preferredBarTintColor = "",
this.preferredControlTintColor = "", this.preferredControlTintColor = "",
this.presentationStyle = IOSWebViewOptionsPresentationStyle.FULL_SCREEN, this.presentationStyle = IOSUIModalPresentationStyle.FULL_SCREEN,
this.transitionStyle = IOSWebViewOptionsTransitionStyle.COVER_VERTICAL}); this.transitionStyle = IOSUIModalTransitionStyle.COVER_VERTICAL});
@override @override
Map<String, dynamic> toMap() { Map<String, dynamic> toMap() {
...@@ -951,13 +967,13 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions { ...@@ -951,13 +967,13 @@ class IOSSafariOptions implements ChromeSafariBrowserOptions, IosOptions {
options.entersReaderIfAvailable = map["entersReaderIfAvailable"]; options.entersReaderIfAvailable = map["entersReaderIfAvailable"];
options.barCollapsingEnabled = map["barCollapsingEnabled"]; options.barCollapsingEnabled = map["barCollapsingEnabled"];
options.dismissButtonStyle = options.dismissButtonStyle =
IOSSafariOptionsDismissButtonStyle.fromValue(map["dismissButtonStyle"]); IOSSafariDismissButtonStyle.fromValue(map["dismissButtonStyle"]);
options.preferredBarTintColor = map["preferredBarTintColor"]; options.preferredBarTintColor = map["preferredBarTintColor"];
options.preferredControlTintColor = map["preferredControlTintColor"]; options.preferredControlTintColor = map["preferredControlTintColor"];
options.presentationStyle = options.presentationStyle =
IOSWebViewOptionsPresentationStyle.fromValue(map["presentationStyle"]); IOSUIModalPresentationStyle.fromValue(map["presentationStyle"]);
options.transitionStyle = options.transitionStyle =
IOSWebViewOptionsTransitionStyle.fromValue(map["transitionStyle"]); IOSUIModalTransitionStyle.fromValue(map["transitionStyle"]);
return options; return options;
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment