diff --git a/docs/pages/versions/unversioned/sdk/webbrowser.md b/docs/pages/versions/unversioned/sdk/webbrowser.md index 92d8a9492f045..4a9f0b7a0003c 100644 --- a/docs/pages/versions/unversioned/sdk/webbrowser.md +++ b/docs/pages/versions/unversioned/sdk/webbrowser.md @@ -68,12 +68,15 @@ Opens the url with Safari in a modal on iOS using [`SFSafariViewController`](htt - **browserParams (_object_)** (_optional_) -- A dictionary with following key-value pairs: - - **toolbarColor (_optional_) (_string_)** -- color of the toolbar in either `#AARRGGBB` or `#RRGGBB` format. - - **enableBarCollapsing (_optional_) (_boolean_)** -- a boolean determining whether the toolbar should be hiding when a user scrolls the website - - **showInRecents (_optional_) (_boolean_)** -- (_Android only_) a boolean determining whether browsed website should be shown as separate entry in Android recents/multitasking view. Default: `false` - **controlsColor (_optional_) (_string_)** -- (_iOS only_) tint color for controls in SKSafariViewController in `#AARRGGBB` or `#RRGGBB` format. - - **showTitle (_optional_) (_boolean_)** -- (_Android only_) a boolean determining whether the browser should show the title of website on the toolbar + - **dismissButtonStyle (_optional_) (_string_)** -- (_iOS only_) The style of the dismiss button. Should be one of: `done`, `close`, or `cancel`. + - **enableBarCollapsing (_optional_) (_boolean_)** -- a boolean determining whether the toolbar should be hiding when a user scrolls the website. + - **enableDefaultShare (_optional_) (_boolean_)** -- (_Android only_) a boolean determining whether a default share item should be added to the menu. - **package (_optional_) (_string_)** -- (_Android only_). Package name of a browser to be used to handle Custom Tabs. List of available packages is to be queried by [getCustomTabsSupportingBrowsers](#webbrowsergetcustomtabssupportingbrowsers) method. + - **readerMode (_optional_) (_boolean_)** -- (_iOS only_) a boolean determining whether Safari should enter Reader mode, if it is available. + - **showInRecents (_optional_) (_boolean_)** -- (_Android only_) a boolean determining whether browsed website should be shown as separate entry in Android recents/multitasking view. Default: `false` + - **showTitle (_optional_) (_boolean_)** -- (_Android only_) a boolean determining whether the browser should show the title of website on the toolbar. + - **toolbarColor (_optional_) (_string_)** -- color of the toolbar in either `#AARRGGBB` or `#RRGGBB` format. Note that behavior customization options depend on the actual browser and its version. Some or all of the arguments may be ignored. diff --git a/packages/expo-web-browser/android/src/main/java/expo/modules/webbrowser/WebBrowserModule.java b/packages/expo-web-browser/android/src/main/java/expo/modules/webbrowser/WebBrowserModule.java index a26551baf3dc1..a089ab4b6b718 100644 --- a/packages/expo-web-browser/android/src/main/java/expo/modules/webbrowser/WebBrowserModule.java +++ b/packages/expo-web-browser/android/src/main/java/expo/modules/webbrowser/WebBrowserModule.java @@ -34,6 +34,7 @@ public class WebBrowserModule extends ExportedModule { private final static String SHOW_IN_RECENTS = "showInRecents"; + private final static String DEFAULT_SHARE_MENU_ITEM_KEY = "enableDefaultShare"; private final static String TOOLBAR_COLOR_KEY = "toolbarColor"; private final static String ERROR_CODE = "EXWebBrowser"; private static final String TAG = "ExpoWebBrowser"; @@ -163,6 +164,10 @@ private Intent createCustomTabsIntent(ReadableArguments arguments) { builder.setShowTitle(arguments.getBoolean(SHOW_TITLE_KEY, false)); + if (arguments.hasKey(DEFAULT_SHARE_MENU_ITEM_KEY) && options.getBoolean(KEY_DEFAULT_SHARE_MENU_ITEM)) { + builder.addDefaultShareMenuItem(); + } + Intent intent = builder.build().intent; // We cannot use builder's method enableUrlBarHiding, because there is no corresponding disable method and some browsers enables it by default. diff --git a/packages/expo-web-browser/ios/EXWebBrowser/EXWebBrowser.m b/packages/expo-web-browser/ios/EXWebBrowser/EXWebBrowser.m index de03ab1583470..a536d017230bf 100644 --- a/packages/expo-web-browser/ios/EXWebBrowser/EXWebBrowser.m +++ b/packages/expo-web-browser/ios/EXWebBrowser/EXWebBrowser.m @@ -89,13 +89,29 @@ - (dispatch_queue_t)methodQueue } NSURL *url = [[NSURL alloc] initWithString:authURL]; + BOOL readerMode = [arguments[@"readerMode"] boolValue]; + BOOL enableBarCollapsing = [arguments[@"enableBarCollapsing"] boolValue]; SFSafariViewController *safariVC = nil; if (@available(iOS 11, *)) { SFSafariViewControllerConfiguration *config = [[SFSafariViewControllerConfiguration alloc] init]; - config.barCollapsingEnabled = [arguments[@"enableBarCollapsing"] boolValue]; + config.barCollapsingEnabled = enableBarCollapsing; + config.entersReaderIfAvailable = readerMode; safariVC = [[SFSafariViewController alloc] initWithURL:url configuration:config]; } else { - safariVC = [[SFSafariViewController alloc] initWithURL:url]; + safariVC = [[SFSafariViewController alloc] initWithURL:url entersReaderIfAvailable:readerMode]; + } + + if (@available(iOS 11.0, *)) { + NSString *dismissButtonStyle = [arguments valueForKey:@"dismissButtonStyle"]; + if ([dismissButtonStyle isEqualToString:@"done"]) { + safariVC.dismissButtonStyle = SFSafariViewControllerDismissButtonStyleDone; + } + else if ([dismissButtonStyle isEqualToString:@"close"]) { + safariVC.dismissButtonStyle = SFSafariViewControllerDismissButtonStyleClose; + } + else if ([dismissButtonStyle isEqualToString:@"cancel"]) { + safariVC.dismissButtonStyle = SFSafariViewControllerDismissButtonStyleCancel; + } } if([[arguments allKeys] containsObject:WebBrowserToolbarColorKey]) { diff --git a/packages/expo-web-browser/src/WebBrowser.types.ts b/packages/expo-web-browser/src/WebBrowser.types.ts index 7258b72a310bf..046b989941cac 100644 --- a/packages/expo-web-browser/src/WebBrowser.types.ts +++ b/packages/expo-web-browser/src/WebBrowser.types.ts @@ -9,10 +9,13 @@ export type WebBrowserOpenOptions = { showTitle?: boolean; /** Android only */ + enableDefaultShare?: boolean; showInRecents?: boolean; /** iOS only */ controlsColor?: string; + dismissButtonStyle?: 'done' | 'close' | 'cancel'; + readerMode?: boolean; // Web windowName?: string;