public async Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) { switch (options.LaunchMode) { case BrowserLaunchMode.SystemPreferred: var nativeUrl = new NSUrl(uri.AbsoluteUri); var sfViewController = new SFSafariViewController(nativeUrl, false); var vc = Platform.GetCurrentViewController(); if (options.PreferredToolbarColor != null) { sfViewController.PreferredBarTintColor = options.PreferredToolbarColor.AsUIColor(); } if (options.PreferredControlColor != null) { sfViewController.PreferredControlTintColor = options.PreferredControlColor.AsUIColor(); } if (sfViewController.PopoverPresentationController != null) { sfViewController.PopoverPresentationController.SourceView = vc.View; } if (options.HasFlag(BrowserLaunchFlags.PresentAsFormSheet)) { sfViewController.ModalPresentationStyle = UIModalPresentationStyle.FormSheet; } else if (options.HasFlag(BrowserLaunchFlags.PresentAsPageSheet)) { sfViewController.ModalPresentationStyle = UIModalPresentationStyle.PageSheet; } await vc.PresentViewControllerAsync(sfViewController, true); break; case BrowserLaunchMode.External: return(await Launcher.PlatformOpenAsync(uri)); } return(true); }
public Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) { var nativeUri = AndroidUri.Parse(uri.AbsoluteUri); switch (options.LaunchMode) { case BrowserLaunchMode.SystemPreferred: var tabsBuilder = new CustomTabsIntent.Builder(); tabsBuilder.SetShowTitle(true); if (options.PreferredToolbarColor != null) #pragma warning disable CS0618 // Type or member is obsolete { tabsBuilder.SetToolbarColor(options.PreferredToolbarColor.ToInt()); } #pragma warning restore CS0618 // Type or member is obsolete if (options.TitleMode != BrowserTitleMode.Default) { tabsBuilder.SetShowTitle(options.TitleMode == BrowserTitleMode.Show); } var tabsIntent = tabsBuilder.Build(); ActivityFlags?tabsFlags = null; Context context = Platform.GetCurrentActivity(false); if (context == null) { context = Platform.AppContext; // If using ApplicationContext we need to set ClearTop/NewTask (See #225) tabsFlags = ActivityFlags.ClearTop | ActivityFlags.NewTask; } #if __ANDROID_24__ if (Platform.HasApiLevelN && options.HasFlag(BrowserLaunchFlags.LaunchAdjacent)) { if (tabsFlags.HasValue) { tabsFlags |= ActivityFlags.LaunchAdjacent | ActivityFlags.NewTask; } else { tabsFlags = ActivityFlags.LaunchAdjacent | ActivityFlags.NewTask; } } #endif // Check if there's flags specified to use if (tabsFlags.HasValue) { tabsIntent.Intent.SetFlags(tabsFlags.Value); } tabsIntent.LaunchUrl(context, nativeUri); break; case BrowserLaunchMode.External: var intent = new Intent(Intent.ActionView, nativeUri); var flags = ActivityFlags.ClearTop | ActivityFlags.NewTask; #if __ANDROID_24__ if (Platform.HasApiLevelN && options.HasFlag(BrowserLaunchFlags.LaunchAdjacent)) { flags |= ActivityFlags.LaunchAdjacent; } #endif intent.SetFlags(flags); if (!Platform.IsIntentSupported(intent)) { throw new FeatureNotSupportedException(); } Platform.AppContext.StartActivity(intent); break; } return(Task.FromResult(true)); }