private async void MakeNewSpot(string spotName, bool isPrivate, string spotPassword = NULL_PASSWORD)
        {
            if (NetworkInterface.GetIsNetworkAvailable())
            {
                // Check whether GPS is on or not
                if (GeoHelper.GetLocationStatus() != PositionStatus.Disabled)  // GPS is on
                {
                    // Show Pining message and Progress Indicator
                    base.SetProgressRing(uiSpotListProgressRing, true);
                    await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        uiSpotGridView.Visibility    = Visibility.Collapsed;
                        uiSpotGridMessage.Text       = AppResources.PiningSpot;
                        uiSpotGridMessage.Visibility = Visibility.Visible;
                    });

                    try
                    {
                        // Wait sign in tastk
                        // Get this Ptc account to make a new spot
                        await TaskHelper.WaitTask(App.AccountManager.GetPtcId());

                        PtcAccount account = await App.AccountManager.GetPtcAccountAsync();

                        // Make a new spot around position where the user is.
                        Geoposition geo = await GeoHelper.GetGeopositionAsync();

                        SpotObject spotObject = new SpotObject(spotName, geo.Coordinate.Point.Position.Latitude, geo.Coordinate.Point.Position.Longitude, account.Email, account.Name, 0, isPrivate, spotPassword, DateTime.Now.ToString());
                        await App.SpotManager.CreateSpotAsync(spotObject);

                        this.NearSpotViewModel.IsDataLoaded = false;
                        this.Frame.Navigate(typeof(ExplorerPage), new SpotViewItem(spotObject));
                    }
                    catch
                    {
                        // Show Pining message and Progress Indicator
                        uiSpotGridMessage.Text = AppResources.BadCreateSpotMessage;
                    }

                    // Hide Progress ring.
                    base.SetProgressRing(uiSpotListProgressRing, false);
                }
                else  // GPS is not on
                {
                    await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        uiSpotGridMessage.Text = base.GeolocatorStatusMessage();
                    });
                }
            }
            else
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    uiSpotGridMessage.Text = AppResources.InternetUnavailableMessage;
                });
            }
        }
        private async void SetSpotGridViewItemAsync(string message)
        {
            // Show Progress Indicator
            base.SetProgressRing(uiSpotListProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                uiSpotGridView.Visibility    = Visibility.Collapsed;
                uiSpotGridMessage.Text       = message;
                uiSpotGridMessage.Visibility = Visibility.Visible;
            });

            // Check whether GPS is on or not
            if (GeoHelper.GetLocationStatus() != PositionStatus.Disabled)  // GPS is on
            {
                try
                {
                    // Check whether GPS works well or not
                    Geoposition currentGeoposition = await GeoHelper.GetGeopositionAsync();

                    if (currentGeoposition != null)  // GPS works well
                    {
                        // If there is near spots, Clear and Add spots to list
                        // Otherwise, Show none message.
                        List <SpotObject> spots = await App.SpotManager.GetNearSpotListAsync(currentGeoposition);

                        this.NearSpotViewModel.IsDataLoaded = true;
                        if (spots.Count > 0)  // There are near spots
                        {
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                            {
                                uiSpotGridView.Visibility    = Visibility.Visible;
                                uiSpotGridMessage.Visibility = Visibility.Collapsed;
                                this.NearSpotViewModel.SetItems(spots);
                            });
                        }
                        else  // No near spots
                        {
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                            {
                                uiSpotGridMessage.Text = AppResources.NoNearSpotMessage;
                            });
                        }
                    }
                    else  // GPS works bad
                    {
                        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            uiSpotGridMessage.Text = AppResources.BadLocationServiceMessage;
                        });
                    }
                }
                catch (UnauthorizedAccessException)  // User didn't approve location service.
                {
                    uiSpotGridMessage.Text = base.GeolocatorStatusMessage();
                }
                catch
                {
                    uiSpotGridMessage.Text = AppResources.BadLoadingSpotMessage;
                }
            }
            else  // GPS is off
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    uiSpotGridMessage.Text = base.GeolocatorStatusMessage();
                });
            }

            // Hide progress indicator
            base.SetProgressRing(uiSpotListProgressRing, false);
        }