Example #1
0
        public async Task <Response> CheckConnection()
        {
            if (!CrossConnectivity.Current.IsConnected)
            {
                return(new Response
                {
                    IsSuccess = false,
                    Message = Languages.TurnOnInternet,
                });
            }
            var isReachable = await CrossConnectivity.Current.IsRemoteReachable("google.com");

            if (!isReachable)
            {
                CrossConnectivity.Dispose();
                return(new Response
                {
                    IsSuccess = false,
                    Message = Languages.NoInternet,
                });
            }

            CrossConnectivity.Dispose();

            return(new Response
            {
                IsSuccess = true,
            });
        }
        /// <summary>
        /// Check if the given server url is reachable.
        /// </summary>
        /// <returns>The server reachable.</returns>
        /// <param name="url">Server URL.</param>
        public async Task <bool> IsServerReachable(string url = "https://www.google.com", int msTimeout = 2000)
        {
            bool reachable = false;

            try
            {
                CrossConnectivity.Dispose();
                reachable = await ConnectionCheck.IsRemoteReachable(url, 80, msTimeout);
            }
            catch (Exception ex)
            {
                Log.Error <CoreController>("IsServerReachable", ex.Message);
            }

            return(reachable);
        }
Example #3
0
        public bool DoIHaveInternet()
        {
            if (!CrossConnectivity.IsSupported)
            {
                return(true);
            }

            var connectivity = CrossConnectivity.Current;

            try
            {
                return(connectivity.IsConnected);
            }
            finally
            {
                CrossConnectivity.Dispose();
            }
        }
Example #4
0
        public bool DoIHaveInternet()
        {
            if (!CrossConnectivity.IsSupported)
            {
                return(true);
            }

            //Do this only if you need to and aren't listening to any other events as they will not fire.
            var connectivity = CrossConnectivity.Current;

            try
            {
                return(connectivity.IsConnected);
            }
            finally
            {
                CrossConnectivity.Dispose();
            }
        }
        public async Task <bool> IsApiReachableAndRunning()
        {
            try
            {
                var connectivity = CrossConnectivity.Current;
                if (!connectivity.IsConnected)
                {
                    btnConnect2.IsVisible       = true;
                    btnConnect2.Text            = "-- OFFLINE --";
                    btnConnect2.BackgroundColor = Color.Red;
                    return(false);
                }

                /// <summary>
                /// Tests if a remote host name is reachable (no http:// or www.)
                /// </summary>
                /// <param name="host">Host name can be a remote IP or URL of website</param>
                /// <param name="port">Port to attempt to check is reachable.</param>
                /// <param name="msTimeout">Timeout in milliseconds.</param>
                /// <returns></returns>
                var reachable = await connectivity.IsRemoteReachable("caprex.ddns.net", 5505, 2000);

                if (reachable == false)
                {
                    btnConnect2.IsVisible       = true;
                    btnConnect2.Text            = "-- TIMEDOC OFFLINE --";
                    btnConnect2.BackgroundColor = Color.Red;
                    return(false);
                }

                btnConnect2.IsVisible = false;
                return(reachable);
            }
            finally
            {
                CrossConnectivity.Dispose();
            }
        }
        public void connectedToInternet()
        {
            var dialog = UserDialogs.Instance;

            if (!CrossConnectivity.IsSupported)
            {
            }

            //Do this only if you need to and aren't listening to any other events as they will not fire.
            var connectivity = CrossConnectivity.Current;

            try
            {
                if (!connectivity.IsConnected)
                {
                    dialog.AlertAsync("No internet connection detected", "Connection error!");
                }
            }
            finally
            {
                CrossConnectivity.Dispose();
            }
        }
Example #7
0
        public async Task <bool> IsNetworkAvailableAsync()
        {
            bool isConnected = false;

            if (CrossConnectivity.IsSupported)
            {
                var connectivity = CrossConnectivity.Current;

                try
                {
                    isConnected = connectivity.IsConnected;
                    isConnected = isConnected ? await connectivity.IsRemoteReachable(Configurations.ReachableUrl) : isConnected;
                }
                catch
                {
                }
                finally
                {
                    CrossConnectivity.Dispose();
                }
            }

            return(isConnected);
        }
Example #8
0
        public static Page GetMainPage()
        {
            return(new NavigationPage(new Home()));

            var speakButton = new Button
            {
                Text = "Speak"
            };

            var languageButton = new Button
            {
                Text = "Default Language"
            };

            var sliderPitch  = new Slider(0, 2.0, 1.0);
            var sliderRate   = new Slider(0, 2.0, Device.OnPlatform(.25, 1.0, 1.0));
            var sliderVolume = new Slider(0, 1.0, 1.0);

            var useDefaults = new Switch
            {
                IsToggled = false
            };

            speakButton.Clicked += (sender, args) =>
            {
                //CrossSms.Current.SendSms("Hello there!", "+16024926689");
                var text = "The quick brown fox jumped over the lazy dog.";
                if (useDefaults.IsToggled)
                {
                    CrossTextToSpeech.Current.Speak(text);
                    return;
                }

                CrossTextToSpeech.Current.Speak(text,
                                                pitch: (float)sliderPitch.Value,
                                                speakRate: (float)sliderRate.Value,
                                                volume: (float)sliderVolume.Value,
                                                crossLocale: locale);
            };

            var vibrateButton = new Button
            {
                Text = "Vibrate"
            };

            var sliderVibrate = new Slider(0, 10000.0, 500.0);



            var connectivityButton = new Button
            {
                Text = "Connectivity Test"
            };

            var connected = new Label
            {
                Text = "Is Connected: "
            };

            var connectionTypes = new Label
            {
                Text = "Connection Types: "
            };

            var bandwidths = new Label
            {
                Text = "Bandwidths"
            };

            var host = new Entry
            {
                Text = "127.0.0.1"
            };


            var host2 = new Entry
            {
                Text = "montemagno.com"
            };

            var port = new Entry
            {
                Text     = "80",
                Keyboard = Keyboard.Numeric
            };

            var canReach1 = new Label
            {
                Text = "Can reach1: "
            };

            var canReach2 = new Label
            {
                Text = "Can reach2: "
            };


            connectivityButton.Clicked += async(sender, args) =>
            {
                connected.Text  = CrossConnectivity.Current.IsConnected ? "Connected" : "No Connection";
                bandwidths.Text = "Bandwidths: ";
                foreach (var band in CrossConnectivity.Current.Bandwidths)
                {
                    bandwidths.Text += band.ToString() + ", ";
                }
                connectionTypes.Text = "ConnectionTypes:  ";
                foreach (var band in CrossConnectivity.Current.ConnectionTypes)
                {
                    connectionTypes.Text += band.ToString() + ", ";
                }

                try
                {
                    canReach1.Text = await CrossConnectivity.Current.IsReachable(host.Text) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
                try
                {
                    canReach2.Text = await CrossConnectivity.Current.IsRemoteReachable(host2.Text, int.Parse(port.Text)) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
            };


            languageButton.Clicked += async(sender, args) =>
            {
                var locales = CrossTextToSpeech.Current.GetInstalledLanguages();
                var items   = locales.Select(a => a.ToString()).ToArray();

                if (Device.OS == TargetPlatform.Android)
                {
                    DependencyService.Get <IDialogs>().DisplayActionSheet("Language", "OK",
                                                                          items,
                                                                          which =>
                    {
                        languageButton.Text = items[which];
                        locale = locales.ElementAt(which);
                    });
                }
                else
                {
                    var selected = await page.DisplayActionSheet("Language", "OK", null, items);

                    if (string.IsNullOrWhiteSpace(selected) || selected == "OK")
                    {
                        return;
                    }
                    languageButton.Text = selected;
                    locale = new CrossLocale {
                        Language = selected
                    };                                       //fine for iOS/WP
                }
            };


            var disposeButton = new Button
            {
                Text = "Dispose Me"
            };

            disposeButton.Clicked += (sender, args) =>
            {
                CrossConnectivity.Dispose();
                CrossTextToSpeech.Dispose();
                CrossBattery.Dispose();
            };

            var getBatteryButton = new Button
            {
                Text = "Get Battery Stats"
            };

            var batteryLevel = new Label
            {
                Text = "Level?"
            };


            var batteryStatus = new Label
            {
                Text = "Status?"
            };

            var batteryChargeType = new Label
            {
                Text = "ChargeType?"
            };


            var batteryIsLow = new Label
            {
                Text = "IsLow"
            };

            getBatteryButton.Clicked += (sender, args) =>
            {
                batteryLevel.Text      = "Level: " + CrossBattery.Current.RemainingChargePercent;
                batteryStatus.Text     = "Status: " + CrossBattery.Current.Status.ToString();
                batteryChargeType.Text = "ChargeType: " + CrossBattery.Current.PowerSource.ToString();
                batteryIsLow.Text      = "IsLow: " + ((CrossBattery.Current.RemainingChargePercent <= 15) ? "YES" : "NO");
            };

            CrossBattery.Current.BatteryChanged += (sender, args) =>
            {
                batteryLevel.Text      = "Changed EVENT! Level: " + args.RemainingChargePercent;
                batteryStatus.Text     = "Status: " + args.Status.ToString();
                batteryChargeType.Text = "ChargeType: " + args.PowerSource.ToString();
                batteryIsLow.Text      = "IsLow: " + ((args.IsLow) ? "YES" : "NO");
            };

            var navigateLatLong = new Button
            {
                Text = "Navigate Lat Long"
            };

            navigateLatLong.Clicked += (sender, args) =>
            {
                CrossExternalMaps.Current.NavigateTo("Space Needle", 47.6204, -122.3491);
            };


            var navigateAddress = new Button
            {
                Text = "Navigate Address"
            };

            navigateAddress.Clicked += (sender, args) =>
            {
                CrossExternalMaps.Current.NavigateTo("Xamarin", "394 pacific ave.", "San Francisco", "CA", "94111", "USA", "USA");
            };

            var buttonContacts = new Button
            {
                Text = "Contacts"
            };

            buttonContacts.Clicked += (sender, args) =>
            {
                page.Navigation.PushAsync(new ContactsPage());
            };


            var buttonGetGPS = new Button
            {
                Text = "GetGPS"
            };

            var labelGPS = new Label
            {
                Text = "GPS goes here"
            };

            buttonGetGPS.Clicked += async(sender, args) =>
            {
                var locator = CrossGeolocator.Current;
                locator.DesiredAccuracy = 50;
                labelGPS.Text           = "Getting gps";

                var position = await locator.GetPositionAsync(timeout : 10000);

                if (position == null)
                {
                    labelGPS.Text = "null gps :(";
                    return;
                }
                labelGPS.Text = string.Format("Time: {0} \nLat: {1} \nLong: {2} \n Altitude: {3} \nAltitude Accuracy: {4} \nAccuracy: {5} \n Heading: {6} \n Speed: {7}",
                                              position.Timestamp, position.Latitude, position.Longitude,
                                              position.Altitude, position.AltitudeAccuracy, position.Accuracy, position.Heading, position.Speed);
            };

            page = new ContentPage
            {
                Content = new ScrollView
                {
                    Content = new StackLayout
                    {
                        Padding  = 40,
                        Spacing  = 10,
                        Children =
                        {
                            new Label {
                                Text = "Hello, Forms!"
                            },
                            new Label {
                                Text = "Pitch"
                            },
                            sliderPitch,
                            new Label {
                                Text = "Speak Rate"
                            },
                            sliderRate,
                            new Label {
                                Text = "Volume"
                            },
                            sliderVolume,
                            new Label {
                                Text = "Use Defaults"
                            },
                            useDefaults,
                            languageButton,
                            speakButton,
                            new Label {
                                Text = "Vibrate Length"
                            },
                            sliderVibrate,
                            vibrateButton,
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId()
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true)
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello")
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello", "world")
                            },
                            new Label {
                                Text = "Id: " + CrossDeviceInfo.Current.Id
                            },
                            new Label {
                                Text = "Model: " + CrossDeviceInfo.Current.Model
                            },
                            new Label {
                                Text = "Platform: " + CrossDeviceInfo.Current.Platform
                            },
                            new Label {
                                Text = "Version: " + CrossDeviceInfo.Current.Version
                            },
                            connectivityButton,
                            connected,
                            bandwidths,
                            connectionTypes,
                            host,
                            host2,
                            port,
                            canReach1,
                            canReach2,
                            disposeButton,
                            new CircleImage
                            {
                                BorderColor       = Color.Pink,
                                BorderThickness   = 3,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/5/55/Tamarin_portrait.JPG"))
                            },
                            new CircleImage
                            {
                                BorderColor       = Color.Purple,
                                BorderThickness   = 6,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/e/ed/Saguinus_tripartitus_-_Golden-mantled_Tamarin.jpg"))
                            },
                            new CircleImage
                            {
                                BorderColor       = Color.Yellow,
                                BorderThickness   = 9,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/5/53/Golden_Lion_Tamarin_Leontopithecus_rosalia.jpg"))
                            },
                            getBatteryButton,
                            new Label {
                                Text = "Battery Level"
                            },
                            batteryLevel,
                            new Label {
                                Text = "Battery Status"
                            },
                            batteryStatus,
                            new Label {
                                Text = "Battery Charge Type"
                            },
                            batteryChargeType,
                            new Label {
                                Text = "Battery is low"
                            },
                            batteryIsLow,
                            navigateAddress,
                            navigateLatLong,
                            buttonContacts,
                            buttonGetGPS,
                            labelGPS
                        }
                    }
                }
            };

            CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
            {
                page.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
            };

            return(new NavigationPage(page));
        }
Example #9
0
        public static Page GetMainPage()
        {
            var speakButton = new Button
            {
                Text = "Speak"
            };

            var languageButton = new Button
            {
                Text = "Default Language"
            };

            var sliderPitch  = new Slider(0, 2.0, 1.0);
            var sliderRate   = new Slider(0, 2.0, Device.OnPlatform(.25, 1.0, 1.0));
            var sliderVolume = new Slider(0, 1.0, 1.0);

            var useDefaults = new Switch
            {
                IsToggled = false
            };

            speakButton.Clicked += (sender, args) =>
            {
                var text = "The quick brown fox jumped over the lazy dog.";
                if (useDefaults.IsToggled)
                {
                    CrossTextToSpeech.Current.Speak(text);
                    return;
                }

                CrossTextToSpeech.Current.Speak(text,
                                                pitch: (float)sliderPitch.Value,
                                                speakRate: (float)sliderRate.Value,
                                                volume: (float)sliderVolume.Value,
                                                crossLocale: locale);
            };

            var vibrateButton = new Button
            {
                Text = "Vibrate"
            };

            var sliderVibrate = new Slider(0, 10000.0, 500.0);

            vibrateButton.Clicked += (sender, args) =>
            {
                //var v = DependencyService.Get<IVibrate>();
                //v.Vibration((int)sliderVibrate.Value);
                Refractored.Xam.Vibrate.CrossVibrate.Current.Vibration((int)sliderVibrate.Value);
            };


            var connectivityButton = new Button
            {
                Text = "Connectivity Test"
            };

            var connected = new Label
            {
                Text = "Is Connected: "
            };

            var connectionTypes = new Label
            {
                Text = "Connection Types: "
            };

            var bandwidths = new Label
            {
                Text = "Bandwidths"
            };

            var host = new Entry
            {
                Text = "127.0.0.1"
            };


            var host2 = new Entry
            {
                Text = "montemagno.com"
            };

            var port = new Entry
            {
                Text     = "80",
                Keyboard = Keyboard.Numeric
            };

            var canReach1 = new Label
            {
                Text = "Can reach1: "
            };

            var canReach2 = new Label
            {
                Text = "Can reach2: "
            };


            connectivityButton.Clicked += async(sender, args) =>
            {
                connected.Text  = CrossConnectivity.Current.IsConnected ? "Connected" : "No Connection";
                bandwidths.Text = "Bandwidths: ";
                foreach (var band in CrossConnectivity.Current.Bandwidths)
                {
                    bandwidths.Text += band.ToString() + ", ";
                }
                connectionTypes.Text = "ConnectionTypes:  ";
                foreach (var band in CrossConnectivity.Current.ConnectionTypes)
                {
                    connectionTypes.Text += band.ToString() + ", ";
                }

                try
                {
                    canReach1.Text = await CrossConnectivity.Current.IsReachable(host.Text) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
                try
                {
                    canReach2.Text = await CrossConnectivity.Current.IsRemoteReachable(host2.Text, int.Parse(port.Text)) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
            };


            languageButton.Clicked += async(sender, args) =>
            {
                var locales = CrossTextToSpeech.Current.GetInstalledLanguages();
                var items   = locales.Select(a => a.ToString()).ToArray();

                if (Device.OS == TargetPlatform.Android)
                {
                    DependencyService.Get <IDialogs>().DisplayActionSheet("Language", "OK",
                                                                          items,
                                                                          which =>
                    {
                        languageButton.Text = items[which];
                        locale = locales.ElementAt(which);
                    });
                }
                else
                {
                    var selected = await page.DisplayActionSheet("Language", "OK", null, items);

                    if (string.IsNullOrWhiteSpace(selected) || selected == "OK")
                    {
                        return;
                    }
                    languageButton.Text = selected;
                    locale = new CrossLocale {
                        Language = selected
                    };                                       //fine for iOS/WP
                }
            };


            var disposeButton = new Button
            {
                Text = "Dispose Me"
            };

            disposeButton.Clicked += (sender, args) =>
            {
                CrossConnectivity.Dispose();
                CrossTextToSpeech.Dispose();
            };


            page = new ContentPage
            {
                Content = new ScrollView
                {
                    Content = new StackLayout
                    {
                        Padding  = 40,
                        Spacing  = 10,
                        Children =
                        {
                            new Label {
                                Text = "Hello, Forms!"
                            },
                            new Label {
                                Text = "Pitch"
                            },
                            sliderPitch,
                            new Label {
                                Text = "Speak Rate"
                            },
                            sliderRate,
                            new Label {
                                Text = "Volume"
                            },
                            sliderVolume,
                            new Label {
                                Text = "Use Defaults"
                            },
                            useDefaults,
                            languageButton,
                            speakButton,
                            new Label {
                                Text = "Vibrate Length"
                            },
                            sliderVibrate,
                            vibrateButton,
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId()
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true)
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello")
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello", "world")
                            },
                            new Label {
                                Text = "Id: " + CrossDeviceInfo.Current.Id
                            },
                            new Label {
                                Text = "Model: " + CrossDeviceInfo.Current.Model
                            },
                            new Label {
                                Text = "Platform: " + CrossDeviceInfo.Current.Platform
                            },
                            new Label {
                                Text = "Version: " + CrossDeviceInfo.Current.Version
                            },
                            connectivityButton,
                            connected,
                            bandwidths,
                            connectionTypes,
                            host,
                            host2,
                            port,
                            canReach1,
                            canReach2,
                            disposeButton
                        }
                    }
                }
            };

            CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
            {
                page.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
            };

            return(page);
        }
Example #10
0
        public static Page GetMainPage()
        {
            var speakButton = new Button
            {
                Text = "Speak"
            };

            var languageButton = new Button
            {
                Text = "Default Language"
            };

            var sliderPitch  = new Slider(0, 2.0, 1.0);
            var sliderRate   = new Slider(0, 2.0, Device.OnPlatform(.25, 1.0, 1.0));
            var sliderVolume = new Slider(0, 1.0, 1.0);

            var useDefaults = new Switch
            {
                IsToggled = false
            };

            speakButton.Clicked += (sender, args) =>
            {
                CrossSms.Current.SendSms("Hello there!", "+16024926689");
                var text = "The quick brown fox jumped over the lazy dog.";
                if (useDefaults.IsToggled)
                {
                    CrossTextToSpeech.Current.Speak(text);
                    return;
                }

                CrossTextToSpeech.Current.Speak(text,
                                                pitch: (float)sliderPitch.Value,
                                                speakRate: (float)sliderRate.Value,
                                                volume: (float)sliderVolume.Value,
                                                crossLocale: locale);
            };

            var vibrateButton = new Button
            {
                Text = "Vibrate"
            };

            var sliderVibrate = new Slider(0, 10000.0, 500.0);

            vibrateButton.Clicked += (sender, args) =>
            {
                //var v = DependencyService.Get<IVibrate>();
                //v.Vibration((int)sliderVibrate.Value);
                Refractored.Xam.Vibrate.CrossVibrate.Current.Vibration((int)sliderVibrate.Value);
            };


            var connectivityButton = new Button
            {
                Text = "Connectivity Test"
            };

            var connected = new Label
            {
                Text = "Is Connected: "
            };

            var connectionTypes = new Label
            {
                Text = "Connection Types: "
            };

            var bandwidths = new Label
            {
                Text = "Bandwidths"
            };

            var host = new Entry
            {
                Text = "127.0.0.1"
            };


            var host2 = new Entry
            {
                Text = "montemagno.com"
            };

            var port = new Entry
            {
                Text     = "80",
                Keyboard = Keyboard.Numeric
            };

            var canReach1 = new Label
            {
                Text = "Can reach1: "
            };

            var canReach2 = new Label
            {
                Text = "Can reach2: "
            };


            connectivityButton.Clicked += async(sender, args) =>
            {
                connected.Text  = CrossConnectivity.Current.IsConnected ? "Connected" : "No Connection";
                bandwidths.Text = "Bandwidths: ";
                foreach (var band in CrossConnectivity.Current.Bandwidths)
                {
                    bandwidths.Text += band.ToString() + ", ";
                }
                connectionTypes.Text = "ConnectionTypes:  ";
                foreach (var band in CrossConnectivity.Current.ConnectionTypes)
                {
                    connectionTypes.Text += band.ToString() + ", ";
                }

                try
                {
                    canReach1.Text = await CrossConnectivity.Current.IsReachable(host.Text) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
                try
                {
                    canReach2.Text = await CrossConnectivity.Current.IsRemoteReachable(host2.Text, int.Parse(port.Text)) ? "Reachable" : "Not reachable";
                }
                catch (Exception ex)
                {
                }
            };


            languageButton.Clicked += async(sender, args) =>
            {
                var locales = CrossTextToSpeech.Current.GetInstalledLanguages();
                var items   = locales.Select(a => a.ToString()).ToArray();

                if (Device.OS == TargetPlatform.Android)
                {
                    DependencyService.Get <IDialogs>().DisplayActionSheet("Language", "OK",
                                                                          items,
                                                                          which =>
                    {
                        languageButton.Text = items[which];
                        locale = locales.ElementAt(which);
                    });
                }
                else
                {
                    var selected = await page.DisplayActionSheet("Language", "OK", null, items);

                    if (string.IsNullOrWhiteSpace(selected) || selected == "OK")
                    {
                        return;
                    }
                    languageButton.Text = selected;
                    locale = new CrossLocale {
                        Language = selected
                    };                                       //fine for iOS/WP
                }
            };


            var disposeButton = new Button
            {
                Text = "Dispose Me"
            };

            disposeButton.Clicked += (sender, args) =>
            {
                CrossConnectivity.Dispose();
                CrossTextToSpeech.Dispose();
            };


            page = new ContentPage
            {
                Content = new ScrollView
                {
                    Content = new StackLayout
                    {
                        Padding  = 40,
                        Spacing  = 10,
                        Children =
                        {
                            new Label {
                                Text = "Hello, Forms!"
                            },
                            new Label {
                                Text = "Pitch"
                            },
                            sliderPitch,
                            new Label {
                                Text = "Speak Rate"
                            },
                            sliderRate,
                            new Label {
                                Text = "Volume"
                            },
                            sliderVolume,
                            new Label {
                                Text = "Use Defaults"
                            },
                            useDefaults,
                            languageButton,
                            speakButton,
                            new Label {
                                Text = "Vibrate Length"
                            },
                            sliderVibrate,
                            vibrateButton,
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId()
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true)
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello")
                            },
                            new Label {
                                Text = "Generated AppId: " + CrossDeviceInfo.Current.GenerateAppId(true, "hello", "world")
                            },
                            new Label {
                                Text = "Id: " + CrossDeviceInfo.Current.Id
                            },
                            new Label {
                                Text = "Model: " + CrossDeviceInfo.Current.Model
                            },
                            new Label {
                                Text = "Platform: " + CrossDeviceInfo.Current.Platform
                            },
                            new Label {
                                Text = "Version: " + CrossDeviceInfo.Current.Version
                            },
                            connectivityButton,
                            connected,
                            bandwidths,
                            connectionTypes,
                            host,
                            host2,
                            port,
                            canReach1,
                            canReach2,
                            disposeButton,
                            new StackLayout
                            {
                                HeightRequest = 300
                            },
                            new CircleImage
                            {
                                BorderColor       = Color.Pink,
                                BorderThickness   = 3,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/5/55/Tamarin_portrait.JPG"))
                            },
                            new CircleImage
                            {
                                BorderColor       = Color.Purple,
                                BorderThickness   = 6,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/e/ed/Saguinus_tripartitus_-_Golden-mantled_Tamarin.jpg"))
                            },
                            new CircleImage
                            {
                                BorderColor       = Color.Yellow,
                                BorderThickness   = 9,
                                HeightRequest     = 150,
                                WidthRequest      = 150,
                                Aspect            = Aspect.AspectFill,
                                HorizontalOptions = LayoutOptions.Center,
                                Source            = UriImageSource.FromUri(new Uri("http://upload.wikimedia.org/wikipedia/commons/5/53/Golden_Lion_Tamarin_Leontopithecus_rosalia.jpg"))
                            }
                        }
                    }
                }
            };

            CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
            {
                page.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
            };

            return(page);
        }
 public static void DisposeResources()
 {
     CrossConnectivity.Dispose();
 }