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); } }
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; } }
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; }