Created
January 12, 2022 20:46
-
-
Save rdelrosario/87b0c884f37a7a59ead1a6d1459bef5c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace UberClone.ViewModels | |
{ | |
public class MapPageViewModel : INotifyPropertyChanged | |
{ | |
... | |
public MapPageViewModel() | |
{ | |
var _stateMachine = new StateMachine<XUberState, XUberTrigger>(XUberState.Initial); | |
CalculateRouteTrigger = _stateMachine.SetTriggerParameters<GooglePlaceAutoCompletePrediction>(XUberTrigger.CalculateRoute); | |
_stateMachine.Configure(XUberState.Initial) | |
.OnEntry(Initialize) | |
.OnExit(() => { Places = new ObservableCollection<GooglePlaceAutoCompletePrediction>(RecentPlaces); }) | |
.OnActivateAsync(GetActualUserLocation) | |
.Permit(XUberTrigger.ChooseDestination, XUberState.SearchingDestination) | |
.Permit(XUberTrigger.CalculateRoute, XUberState.CalculatingRoute); | |
_stateMachine | |
.Configure(XUberState.SearchingOrigin) | |
.Permit(XUberTrigger.Cancel, XUberState.Initial) | |
.Permit(XUberTrigger.ChooseDestination, XUberState.SearchingDestination); | |
_stateMachine | |
.Configure(XUberState.SearchingDestination) | |
.Permit(XUberTrigger.Cancel, XUberState.Initial) | |
.Permit(XUberTrigger.ChooseOrigin, XUberState.SearchingOrigin) | |
.PermitIf(XUberTrigger.CalculateRoute, XUberState.CalculatingRoute, () => OriginCoordinates != null); | |
_stateMachine | |
.Configure(XUberState.CalculatingRoute) | |
.OnEntryFromAsync(CalculateRouteTrigger, GetPlacesDetail) | |
.Permit(XUberTrigger.ChooseRide, XUberState.ChoosingRide) | |
.Permit(XUberTrigger.Cancel, XUberState.Initial); | |
_stateMachine | |
.Configure(XUberState.ChoosingRide) | |
.Permit(XUberTrigger.Cancel, XUberState.Initial) | |
.Permit(XUberTrigger.ChooseDestination, XUberState.SearchingDestination) | |
.Permit(XUberTrigger.ConfirmPickUp, XUberState.ConfirmingPickUp); | |
_stateMachine | |
.Configure(XUberState.ConfirmingPickUp) | |
.Permit(XUberTrigger.ChooseRide, XUberState.ChoosingRide) | |
.Permit(XUberTrigger.ShowXUberPass, XUberState.ShowingXUberPass); | |
_stateMachine | |
.Configure(XUberState.ShowingXUberPass) | |
.Permit(XUberTrigger.ConfirmPickUp, XUberState.ConfirmingPickUp) | |
.Permit(XUberTrigger.WaitForDriver, XUberState.WaitingForDriver); | |
_stateMachine | |
.Configure(XUberState.WaitingForDriver) | |
.Permit(XUberTrigger.CancelTrip, XUberState.Initial) | |
.Permit(XUberTrigger.StartTrip, XUberState.TripInProgress); | |
State = _stateMachine.State; | |
_stateMachine.ActivateAsync(); | |
} | |
private void Initialize() | |
{ | |
CleanPolylineCommand.Execute(null); | |
DestinationLocation = string.Empty; | |
} | |
private async Task GetActualUserLocation() | |
{ | |
try | |
{ | |
await Task.Yield(); | |
var request = new GeolocationRequest(GeolocationAccuracy.High,TimeSpan.FromSeconds(5000)); | |
var location = await Geolocation.GetLocationAsync(request); | |
if (location != null) | |
{ | |
OriginCoordinates = location; | |
CenterMapCommand.Execute(location); | |
GetLocationNameCommand.Execute(new Position(location.Latitude, location.Longitude)); | |
} | |
} | |
catch (Exception) | |
{ | |
await UserDialogs.Instance.AlertAsync("Error", "Unable to get actual location", "Ok"); | |
} | |
} | |
... | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment