private async Task HandleIncidentSelection(IncidentModel incident)
        {
            if (CurrentUserStatus.CanNavigate)
            {
                RouteManager.ClearAllUserRoutes();
            }

            if (incident != null)
            {
                PushpinManager.ShowIncidentInformationPanel(incident);
                FormsMap.SetPosition(incident.GeoLocation);

                if (CurrentUserStatus.CanNavigate)
                {
                    await RouteManager.DrawRouteToIncident(incident);
                }
            }
            else
            {
                PushpinManager.HideIncidentInformationPanel();
                PushpinManager.SetInteraction(true);
                if (CurrentUserStatus.IsAttendingAnIncident)
                {
                    ResponderManager.DismissCurrentUserIncident();
                }
            }
        }
        private void AddManagers()
        {
            var annotationManager = new MarkerManager(_nativeMap, _customMap);
            var routeManager      = new RouteManager(_nativeMap, _customMap, annotationManager);
            var responderManager  = new ResponderManager(_nativeMap, _customMap, routeManager, annotationManager);
            var heatMapManager    = new HeatMapManager(_androidMapView, _nativeMap, _customMap);

            _mapManager = new MapManager(_customMap, annotationManager, routeManager, responderManager, heatMapManager);
        }
        private void AddManagers()
        {
            var annotationManager = new AnnotationManager(_iosMapView, _customMap);
            var routeManager      = new RouteManager(_iosMapView, _customMap, annotationManager);
            var responderManager  = new ResponderManager(_iosMapView, _customMap, routeManager, annotationManager);
            var heatMapManager    = new HeatMapManager(_iosMapView, _customMap);

            _mapManager = new MapManager(_customMap, annotationManager, routeManager, responderManager, heatMapManager);
            _iosMapView.GetViewForAnnotation = annotationManager.GetViewForAnnotation;

            _drawingManager             = new MapDrawingManager(_customMap);
            _iosMapView.OverlayRenderer = _drawingManager.GetOverlayRenderer;
        }
        public void HandleCustomMapPropertyChange(PropertyChangedEventArgs e)
        {
            if (e.PropertyName.Equals(CustomMap.CurrentIncidentProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                SetCurrentIncident(FormsMap.CurrentIncident);
            }
            else if (e.PropertyName.Equals(CustomMap.IncidentsProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                _incidentsObserver.AttachIncidents(FormsMap.Incidents);

                if (!_mapAlreadyCentered && FormsMap.Incidents?.Any() == true)
                {
                    InitializeMapPosition();
                    _mapAlreadyCentered = true;
                }
            }
            else if (e.PropertyName.Equals(CustomMap.RespondersProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                AttachResponders(FormsMap.Responders);
            }
            else if (e.PropertyName.Equals(CustomMap.RoutesProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                PushpinManager.AddUser();
                ResponderManager.StartResponderUpdater();
            }
            else if (e.PropertyName.Equals(CustomMap.IsHeatMapVisibleProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                HeatMapManager.UpdateVisibility();
            }
            else if (e.PropertyName.Equals(CustomMap.IsForceNavigationProperty.PropertyName, StringComparison.CurrentCultureIgnoreCase))
            {
                if (FormsMap.IsForceNavigation)
                {
                    ResponderManager.StartUserNavigation();
                }
            }
        }
 private void NavigationRequested(object sender, IncidentModel incident)
 {
     ResponderManager.StartUserNavigation();
 }