void HandleItemTapped(object sender, ItemTappedEventArgs e)
        {
            Device.BeginInvokeOnMainThread(async() =>
            {
                if (sender is ListView listView && e?.Item is StoryModel storyTapped)
                {
                    if (string.IsNullOrWhiteSpace(storyTapped.Url))
                    {
                        await DisplayAlert("No Website", "Ask HN articles do not contain a URL", "OK");
                    }
                    else
                    {
                        listView.SelectedItem = null;

                        var browserOptions = new BrowserLaunchOptions
                        {
                            PreferredControlColor = ColorConstants.BrowserNavigationBarTextColor,
                            PreferredToolbarColor = ColorConstants.BrowserNavigationBarBackgroundColor
                        };

                        await Browser.OpenAsync(storyTapped.Url, browserOptions);
                    }
                }
            });
        }
Example #2
0
 public static void LaunchBrowser(this Uri uri, BrowserLaunchOptions options)
 {
     if (options == null)
     {
         Browser.OpenAsync(uri);
     }
     else
     {
         Browser.OpenAsync(uri, options);
     }
 }
Example #3
0
        public WelcomePage(GitHubAuthenticationService gitHubAuthenticationService, AnalyticsService analyticsService, WelcomeViewModel welcomeViewModel)
            : base(welcomeViewModel, analyticsService, shouldUseSafeArea: true)
        {
            RemoveDynamicResource(BackgroundColorProperty);
            On <iOS>().SetModalPresentationStyle(UIModalPresentationStyle.OverFullScreen);

            var pageBackgroundColor = Color.FromHex(BaseTheme.LightTealColorHex);

            BackgroundColor = pageBackgroundColor;

            gitHubAuthenticationService.DemoUserActivated         += HandleDemoUserActivated;
            gitHubAuthenticationService.AuthorizeSessionCompleted += HandleAuthorizeSessionCompleted;

            var browserLaunchOptions = new BrowserLaunchOptions
            {
                PreferredToolbarColor = pageBackgroundColor.MultiplyAlpha(0.75),
                PreferredControlColor = Color.White,
                Flags = BrowserLaunchFlags.PresentAsFormSheet
            };

            Content = new Grid
            {
                RowSpacing = 24,

                RowDefinitions = Rows.Define(
                    (Row.WelcomeLabel, StarGridLength(2)),
                    (Row.Image, StarGridLength(4)),
                    (Row.GitHubButton, StarGridLength(2)),
                    (Row.DemoButton, StarGridLength(1)),
                    (Row.VersionLabel, StarGridLength(1))),

                Children =
                {
                    new WelcomeLabel()
                    .Row(Row.WelcomeLabel),
                    new Image {
                        Source = "WelcomeImage"
                    }.Center()
                    .Row(Row.Image),
                    new ConnectToGitHubButton(_connectToGitHubCancellationTokenSource.Token, browserLaunchOptions)
                    .Row(Row.GitHubButton),
                    new DemoLabel()
                    .Row(Row.DemoButton),
                    new ConnectToGitHubActivityIndicator()
                    .Row(Row.DemoButton),
                    new VersionNumberLabel()
                    .Row(Row.VersionLabel)
                }
            };
        }
Example #4
0
        void HandleItemTapped(object sender, ItemTappedEventArgs e)
        {
            if (sender is ListView listView && e?.Item is StoryModel storyTapped)
            {
                Device.BeginInvokeOnMainThread(async() =>
                {
                    listView.SelectedItem = null;

                    var browserOptions = new BrowserLaunchOptions
                    {
                        PreferredControlColor = ColorConstants.BrowserNavigationBarTextColor,
                        PreferredToolbarColor = ColorConstants.BrowserNavigationBarBackgroundColor
                    };

                    await Browser.OpenAsync(storyTapped.Url, browserOptions);
                });
            }
        }
Example #5
0
        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);
        }
Example #6
0
        public Task <bool> PlatformOpenAsync(Uri uri, BrowserLaunchOptions launchMode)
        {
            if (uri == null)
            {
                throw new ArgumentNullException(nameof(uri));
            }

            Permissions.EnsureDeclared <Permissions.LaunchApp>();

            var appControl = new AppControl
            {
                Operation = AppControlOperations.View,
                Uri       = uri.AbsoluteUri
            };

            var hasMatches = AppControl.GetMatchedApplicationIds(appControl).Any();

            if (hasMatches)
            {
                AppControl.SendLaunchRequest(appControl);
            }

            return(Task.FromResult(hasMatches));
        }
Example #7
0
 public ConnectToGitHubButton(CancellationToken cancellationToken, BrowserLaunchOptions browserLaunchOptions) : base(WelcomePageAutomationIds.ConnectToGitHubButton, cancellationToken, browserLaunchOptions)
 {
     HorizontalOptions = LayoutOptions.Center;
     VerticalOptions   = LayoutOptions.End;
 }
Example #8
0
 public Task OpenAsync(string uri, BrowserLaunchOptions options)
 {
     return(OpenAsync(new Uri(uri), options));
 }
Example #9
0
        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));
        }
Example #10
0
 public Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) => Task.FromResult(true);
Example #11
0
 public async Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options)
 {
     return(await DispatcherRunTaskAsync(CoreDispatcherPriority.Normal, async() => await _innerBrowser.OpenAsync(uri, options)));
 }
Example #12
0
 public async Task OpenAsync(string uri, BrowserLaunchOptions options)
 {
     await DispatcherRunTaskAsync(CoreDispatcherPriority.Normal, () => _innerBrowser.OpenAsync(new Uri(uri), options));
 }
Example #13
0
 public Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) =>
 throw ExceptionUtils.NotSupportedOrImplementedException;
Example #14
0
 public Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) =>
 global::Windows.System.Launcher.LaunchUriAsync(uri).AsTask();
Example #15
0
 static Task <bool> OpenAsync(Uri uri, BrowserLaunchOptions options) =>
 Task.FromResult(NSWorkspace.SharedWorkspace.OpenUrl(new NSUrl(uri.AbsoluteUri)));
 /// <inheritdoc />
 public IObservable <bool> Open(Uri uri, BrowserLaunchOptions launchOptions) =>
 Observable.FromAsync(() => Browser.OpenAsync(uri, launchOptions));
Example #17
0
 public Task OpenAsync(string uri, BrowserLaunchOptions options) => OpenAsync(new Uri(uri), options);