Ejemplo n.º 1
0
 private async Task SetupPin(RideStates state, Geoposition position = null, LatLng latLng = null)
 {
     if (position == null && latLng == null)
     {
         position = await geolocator.GetGeopositionAsync();
     }
     if (state == RideStates.Pickup)
     {
         if (startLocation != null && map.MapElements.Contains(startLocation))
         {
             map.MapElements.Remove(startLocation);
         }
         startLocation = new MapIcon();
         if (latLng == null)
         {
             startLocation.Location = position.Coordinate.Point;
         }
         else
         {
             SetPinLocation(startLocation, latLng);
         }
         startLocation.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
         startLocation.Title = "Pickup location";
         map.MapElements.Add(startLocation);
     }
     else if (state == RideStates.Dropoff)
     {
         RemoveEndLocationPin();
         endLocation = new MapIcon();
         if (latLng == null)
         {
             endLocation.Location = position.Coordinate.Point;
         }
         else
         {
             SetPinLocation(endLocation, latLng);
         }
         endLocation.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
         endLocation.Title = "Dropoff location";
         map.MapElements.Add(endLocation);
     }
 }
Ejemplo n.º 2
0
        private async Task SetRideState(RideStates state)
        {
            if (RideState == RideStates.RideStaging && state == RideStates.Dropoff)
            {
                dropoffSearchBox.Visibility = Visibility.Collapsed;
                searchBox.Visibility        = Visibility.Visible;
                costTextBlock.Visibility    = Visibility.Collapsed;
                map.Routes.Clear();
            }
            RideState = state;
            if (state == RideStates.Pickup)
            {
                SetPickupView();
                await SetupPin(RideStates.Pickup);
                await GetAvailableTypes(map.Center.Position);

                var preferredRideType = GetPreferredType(availableRideTypes);
                if (preferredRideType.HasValue)
                {
                    SelectPreferredType(preferredRideType.Value);
                    await DisplayDrivers(map.Center.Position, preferredRideType.Value);
                    await GetEta(map.Center.Position, preferredRideType.Value);
                }
                else
                {
                    button.IsEnabled = false;
                    button.Content   = "No rides available";
                }
            }
            else if (state == RideStates.Dropoff)
            {
                SetDropoffView();
                pickupSearchBox.Text = searchBox.Text;
                await SetupPin(RideStates.Dropoff);

                pickupLocation = startLocation.Location.Position;
                button.Content = "Set destination";
            }
            else if (state == RideStates.RideStaging)
            {
                SetRideStagingView();
                dropoffSearchBox.Text = searchBox.Text;
                dropoffLocation       = endLocation.Location.Position;
                selectedRideType      = GetSelectedRideType();
                if (selectedRideType.HasValue)
                {
                    await GetCostEstimate(pickupLocation.Value, dropoffLocation.Value, selectedRideType.Value);

                    button.Content = $"Request {GetDisplayName(selectedRideType.Value)}";
                    await ShowRoute(pickupLocation.Value, dropoffLocation.Value);
                }
            }
            else if (state == RideStates.Ride)
            {
                selectedRideType = GetSelectedRideType();
                if (selectedRideType.HasValue)
                {
                    await RequestRide();
                }
            }
            else if (state == RideStates.Complete)
            {
                ratingGrid.Visibility = Visibility.Visible;
            }
        }
Ejemplo n.º 3
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
            GeolocationAccessStatus accessStatus = await Geolocator.RequestAccessAsync();

            //if (accessStatus == GeolocationAccessStatus.Unspecified)
            //{
            //    // don't actually do this
            //    throw new Exception();
            //}

            Geoposition position = await geolocator.GetGeopositionAsync();

            map.Center    = position.Coordinate.Point;
            map.ZoomLevel = 15;
            List <MapElement> layer = new List <MapElement>();

            userLocation          = new MapIcon();
            userLocation.Location = position.Coordinate.Point;
            userLocation.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
            userLocation.Title = "Your location";
            map.MapElements.Add(userLocation);

            UpdateFromMapCenterTimer();
            var history = await AppConstants.ShyftClient.RetrieveRideHistory();

            if (history.Count > 0)
            {
                if (history[0].Status == LyftConstants.RideStatus.Canceled ||
                    history[0].Status == LyftConstants.RideStatus.Unknown)
                {
                    await SetRideState(RideStates.Pickup);
                }
                else
                {
                    if (history[0].Status == LyftConstants.RideStatus.DroppedOff)
                    {
                        if (history[0].Charges != null && history[0].Charges.Count > 0)
                        {
                            await SetRideState(RideStates.Pickup);
                        }
                        else
                        {
                            currentRideId    = history[0].RideId;
                            selectedRideType = history[0].RideType;
                            RideState        = RideStates.Ride;
                            GoToRide();
                        }
                    }
                    else
                    {
                        currentRideId    = history[0].RideId;
                        selectedRideType = history[0].RideType;
                        RideState        = RideStates.Ride;
                        GoToRide();
                    }
                }
            }
            else
            {
                await SetRideState(RideStates.Pickup);
            }
            loaded = true;
        }