Exemplo n.º 1
0
        public StopDetailViewModel(IMotiveConfiguration motiveConfig, IRepoManager repoManager, INavigation navigation, StopVisit stopVisit)
        {
            _repoManager  = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _stopVisit    = stopVisit ?? throw new ArgumentNullException(nameof(stopVisit));
            _navigation   = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _motiveConfig = motiveConfig ?? throw new ArgumentNullException(nameof(motiveConfig));

            StopVisit = new StopVisitViewModel(stopVisit);

            OpenStopNameCommand = new Command(async() =>
            {
                StopDetailNamePage namePage = new StopDetailNamePage(StopVisit);
                await OpenPage(namePage);
            });

            OpenStopMotiveCommand = new Command(async() =>
            {
                StopDetailMotivePage motivePage = new StopDetailMotivePage(Motive);
                await OpenPage(motivePage);
            });

            DataItems     = new ObservableRangeCollection <ListItem>();
            StopName      = StopNameFromString(StopVisit.Name);
            CompletedName = !string.IsNullOrEmpty(StopVisit.Name);

            StopVisit.PropertyChanged += StopVisit_PropertyChanged;

            if (_motiveConfig.Stops)
            {
                PrepareForMotive();
            }
        }
Exemplo n.º 2
0
        public DaySelectorViewModel(INavigation navigation, IRepoManager repoManager, DateService dateService)
        {
            _navigation  = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _dateService = dateService ?? throw new ArgumentNullException(nameof(dateService));

            DataObjects.StopVisit stopVisit = repoManager.StopVisitRepository.First();

            DateTimeOffset firstDate = DateTime.Today;

            if (stopVisit != null)
            {
                firstDate = stopVisit.BeginTimestamp;
            }

            double days = (DateTime.Today - firstDate.Date).TotalDays;

            for (int i = 0; i <= days; i++)
            {
                DateTime currentDate = DateTime.Today.AddDays(-1 * i);
                Items.Add(new Day()
                {
                    Time = currentDate
                });
            }

            CancelCommand = new Command(async() =>
            {
                Analytics.TrackEvent("Cancel dayselector clicked");
                await _navigation.PopModalAsync();
            });
        }
Exemplo n.º 3
0
        public TransportSelectionViewModel(IRepoManager repoManager, INavigation navigation, ITransportationModeConfiguration transportConfiguration, TrackEntry trackEntry)
        {
            _repoManager     = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _navigation      = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _trackEntry      = trackEntry ?? throw new ArgumentNullException(nameof(trackEntry));
            _transportConfig = transportConfiguration ?? throw new ArgumentNullException(nameof(transportConfiguration));

            Items = new SelectableObservableCollection <TransportModeItem>();

            SaveCommand = new Command(async() =>
            {
                FinishedTransportSelection();
                await _navigation.PopModalAsync();
            });

            CancelCommand = new Command(async() =>
            {
                await _navigation.PopModalAsync();
            });

            CustomTransportModeCommand = new Command(async() =>
            {
                await _navigation.PushModalAsync(new NavigationPage(new CustomTransportSelectionPage(Items)));
            });

            SetActualTransportModes();
        }
Exemplo n.º 4
0
        public void TimeKeeperSetDone()
        {
            Mock <IRepoManager> mockRepo    = new Mock <IRepoManager>();
            IRepoManager        repoManager = mockRepo.Object;

            Mock <IUploadEntryRepository> ueRep = new Mock <IUploadEntryRepository>();

            UploadEntry addedUploadEntry = null;

            mockRepo.Setup(x => x.UploadEntryRepository).Returns(ueRep.Object);
            ueRep.Setup(x => x.Add(It.IsAny <UploadEntry>())).Callback((UploadEntry ue) => addedUploadEntry = ue);


            ISyncTimeKeeper tk  = new SyncTimeKeeper(repoManager);
            DateTimeOffset  now = DateTimeOffset.Now;

            tk.SetDone(UploadType.Attribute, now, 10);


            mockRepo.Verify(x => x.UploadEntryRepository);
            ueRep.Verify(x => x.Add(It.IsAny <UploadEntry>()));

            Assert.Equal(10, addedUploadEntry.Count);
            Assert.Equal(now, addedUploadEntry.Timestamp);
            Assert.Equal(UploadType.Attribute, addedUploadEntry.Type);
        }
Exemplo n.º 5
0
        public void TimeKeeperGetPreviousDone()
        {
            Mock <IRepoManager> mockRepo    = new Mock <IRepoManager>();
            IRepoManager        repoManager = mockRepo.Object;

            Mock <IUploadEntryRepository> ueRep = new Mock <IUploadEntryRepository>();

            UploadEntry resultUploadEntry = new UploadEntry
            {
                Count     = 10,
                Timestamp = DateTimeOffset.Now,
                Type      = UploadType.Attribute,
            };

            mockRepo.Setup(x => x.UploadEntryRepository).Returns(ueRep.Object);
            ueRep.Setup(x => x.GetLastUploadEntry(UploadType.Attribute)).Returns(resultUploadEntry);
            ISyncTimeKeeper tk = new SyncTimeKeeper(repoManager);


            DateTimeOffset resultDto = tk.GetPreviousDone(UploadType.Attribute);


            mockRepo.Verify(x => x.UploadEntryRepository);
            ueRep.Verify(x => x.GetLastUploadEntry(UploadType.Attribute));
            Assert.Equal(resultUploadEntry.Timestamp, resultDto);
        }
Exemplo n.º 6
0
        public SensorManagerImplementation(IRepoManager repoManager, CMMotionManager motionManager, CLLocationManager locationManager, CMPedometer pedometer)
        {
            _repoManager     = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _motionManager   = motionManager ?? throw new ArgumentNullException(nameof(motionManager));
            _locationManager = locationManager ?? throw new ArgumentNullException(nameof(locationManager));
            _pedometer       = pedometer ?? throw new ArgumentNullException(nameof(pedometer));

            _queue = new NSOperationQueue();

            _sensorMeasurementSessionRepository = _repoManager.SensorMeasurementSessionRepository;
            _accelerometerRepository            = _repoManager.AccelerometerRepository;
            _gyroscoperRepository         = _repoManager.GyroscopeRepository;
            _magnetometerRepository       = _repoManager.MagnetometerRepository;
            _linearAccelerationRepository = _repoManager.LinearAccelerationRepository;
            _orientationRepository        = _repoManager.OrientationRepository;
            _quaternionRepository         = _repoManager.QuaternionRepository;
            _gravityRepository            = _repoManager.GravityRepository;

            locationManager.DesiredAccuracy = CLLocation.AccuracyBest;
            locationManager.HeadingFilter   = 1;
            locationManager.AllowsBackgroundLocationUpdates = true;

            motionManager.DeviceMotionUpdateInterval  = 0.1;
            motionManager.AccelerometerUpdateInterval = 0.1;
            motionManager.GyroUpdateInterval          = 0.1;
            motionManager.MagnetometerUpdateInterval  = 0.1;
        }
Exemplo n.º 7
0
        public TrackDetailViewModel(IRepoManager repoManager, INavigation navigation, IMotiveConfiguration motiveConfig, TrackEntry trackEntry)
        {
            _repoManager  = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _navigation   = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _trackEntry   = trackEntry ?? throw new ArgumentNullException(nameof(trackEntry));
            _motiveConfig = motiveConfig ?? throw new ArgumentNullException(nameof(Motive));

            TransportationModeEntry modeEntry = _repoManager.TransportationModeRepository.GetLastWithTrackEntry(_trackEntry.Id);

            TransportModeSelectionCommand = new Command(async() =>
            {
                await _navigation.PushModalAsync(new NavigationPage(new TransportSelectionPage(_trackEntry)));
            });

            OpenTrackMotiveCommand = new Command(async() =>
            {
                TrackDetailMotivePage motivePage = new TrackDetailMotivePage(Motive);
                await _navigation.PushModalAsync(new NavigationPage(motivePage));
            });

            DataItems = new ObservableRangeCollection <ListItem>();

            if (_motiveConfig.Tracks)
            {
                PrepareForMotive();
            }

            CompletedTransport = modeEntry != null;
        }
        public SensorMeasurementSessionService()
        {
            _repoManager = App.Container.Resolve <IRepoManager>();

            _sensorMeasurementSessionRepository = _repoManager.SensorMeasurementSessionRepository;
            _sensorMeasurementSession           = new SensorMeasurementSession();
        }
Exemplo n.º 9
0
        public SensorService()
        {
            _repoManager = App.Container.Resolve <IRepoManager>();

            _accelerometerRepository = _repoManager.AccelerometerRepository;
            _gyroscopeRepository     = _repoManager.GyroscopeRepository;
            _magnetometerRepository  = _repoManager.MagnetometerRepository;
        }
Exemplo n.º 10
0
 public TrackDetailMotiveViewModel(IRepoManager repoManager,
                                   INavigation navigation,
                                   ITabiConfiguration configuration,
                                   TrackMotiveViewModel motiveViewModel,
                                   MotiveSelectionViewModel motiveSelectionViewModel) : base(repoManager, navigation, configuration, motiveSelectionViewModel)
 {
     Motive = motiveViewModel ?? throw new ArgumentNullException(nameof(motiveViewModel));
     SetupMotives();
 }
Exemplo n.º 11
0
        public GoogleLocationServicesAPI()
        {
            _repoManager   = App.Container.Resolve <IRepoManager>();
            _batteryHelper = App.Container.Resolve <BatteryHelper>();

            positionEntryRepository = _repoManager.PositionEntryRepository;


            currentProfile = App.CollectionProfile.AndroidProfile;
        }
Exemplo n.º 12
0
        public SensorFusionService()
        {
            // TODO Service locator style. Use constructor injection. Not possible at the moment
            // because this service is instantiated by android.
            _repoManager = App.Container.Resolve <IRepoManager>();

            _linearAccelerationRepository = _repoManager.LinearAccelerationRepository;
            _orientationRepository        = _repoManager.OrientationRepository;
            _quaternionRepository         = _repoManager.QuaternionRepository;
            _gravityRepository            = _repoManager.GravityRepository;
        }
Exemplo n.º 13
0
        public DataResolver(IRepoManager repoManager, IStopResolver stopResolver)
        {
            _repoManager  = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _stopResolver = stopResolver ?? throw new ArgumentNullException(nameof(stopResolver));

            _positionEntryRepository = _repoManager.PositionEntryRepository;
            _trackEntryRepository    = _repoManager.TrackEntryRepository;
            _stopVisitRepository     = _repoManager.StopVisitRepository;
            _stopRepository          = _repoManager.StopRepository;

            _accuracy = 10000;
        }
Exemplo n.º 14
0
 private RepoWorker(
     IRepoManager repoManager,
     string workerName,
     IPullRequestAnalyzer prAnalyzer,
     IRepositoryAnalyzer repoAnalyzer,
     IHistoricalAnalysisManager analysisManager,
     IClock clock,
     ILogger logger)
 {
     _repoManager     = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
     Name             = workerName;
     _prAnalyzer      = prAnalyzer ?? throw new ArgumentNullException(nameof(prAnalyzer));
     _repoAnalyzer    = repoAnalyzer ?? throw new ArgumentNullException(nameof(repoAnalyzer));
     _analysisManager = analysisManager ?? throw new ArgumentNullException(nameof(analysisManager));
     _clock           = clock ?? throw new ArgumentNullException(nameof(clock));
     _logger          = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Exemplo n.º 15
0
        public void TimeKeeperMockStoresTime()
        {
            Mock <IRepoManager>    mockRepo = new Mock <IRepoManager>();
            IUploadEntryRepository ueRep    = new MockUploadEntryRepository();

            mockRepo.Setup(r => r.UploadEntryRepository).Returns(ueRep);

            IRepoManager repoManager = mockRepo.Object;

            ISyncTimeKeeper tk  = new SyncTimeKeeper(repoManager);
            DateTimeOffset  now = DateTimeOffset.Now;

            tk.SetDone(UploadType.Attribute, now, 10);

            DateTimeOffset previousDone = tk.GetPreviousDone(UploadType.Attribute);

            Assert.Equal(now, previousDone);
        }
Exemplo n.º 16
0
        protected DetailMotiveViewModel(IRepoManager repoManager,
                                        INavigation navigation,
                                        ITabiConfiguration configuration,
                                        MotiveSelectionViewModel motiveSelectionViewModel)
        {
            _navigation = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _motiveSelectionViewModel = motiveSelectionViewModel ?? throw new ArgumentNullException(nameof(motiveSelectionViewModel));
            _configuration            = configuration ?? throw new ArgumentNullException(nameof(configuration));
            _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));

            SaveCommand   = new Command(Save);
            CancelCommand = new Command(async() =>
            {
                ResetViewModel();
                await PopPageAsync();
            });

            _motiveSelectionViewModel.PropertyChanged += _motiveSelectionViewModel_PropertyChanged;

            PossibleMotives = new ObservableRangeCollection <MotiveOptionViewModel>();
        }
Exemplo n.º 17
0
        public LocationManagerImplementation(IRepoManager repoManager, ProfileiOS profile, BatteryHelper batteryHelper)
        {
            _currentProfile = profile ?? throw new ArgumentNullException(nameof(profile));
            _repoManager    = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _batteryHelper  = batteryHelper ?? throw new ArgumentNullException(nameof(batteryHelper));

            _significantLocationManager = new CLLocationManager();
            _significantLocationManager.LocationsUpdated += _significantLocationManager_LocationsUpdated;
            _significantLocationManager.AllowsBackgroundLocationUpdates = true;

            _clManager = new CLLocationManager();
            _clManager.LocationsUpdated        += ClManager_LocationsUpdated;
            _clManager.RegionLeft              += _clManager_RegionLeft;
            _clManager.DeferredUpdatesFinished += ClManagerOnDeferredUpdatesFinished;
            _clManager.AuthorizationChanged    += ClManager_AuthorizationChanged;

            _listenLocationManager     = new CLLocationManager();
            _clManager.DesiredAccuracy = CLLocation.AccuracyThreeKilometers;
            _clManager.ActivityType    = CLActivityType.Fitness;

            _positionEntryRepo = _repoManager.PositionEntryRepository;
            _motionEntryRepo   = _repoManager.MotionEntryRepository;
        }
Exemplo n.º 18
0
        public DayCommentViewModel(INavigation navigation, DateService dateService, IRepoManager repoManager)
        {
            _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _dateService = dateService ?? throw new ArgumentNullException(nameof(dateService));

            SaveCommand = new Command(async() =>
            {
                _repoManager.QuestionRepository.Add(new Question()
                {
                    QuestionKey  = NotesQuestion,
                    QuestionDate = _dateService.SelectedDay.Time,
                    Answer       = Notes,
                    Timestamp    = DateTimeOffset.Now
                });

                _repoManager.QuestionRepository.Add(new Question()
                {
                    QuestionKey  = TravelQuestion,
                    QuestionDate = _dateService.SelectedDay.Time,
                    Answer       = SaveItemsToString(TravelItems),
                    Timestamp    = DateTimeOffset.Now
                });

                _repoManager.QuestionRepository.Add(new Question()
                {
                    QuestionKey  = PhoneQuestion,
                    QuestionDate = _dateService.SelectedDay.Time,
                    Answer       = SaveItemsToString(PhoneItems),
                    Timestamp    = DateTimeOffset.Now
                });

                await navigation.PopAsync();
            });

            CancelCommand = new Command(async() =>
            {
                await navigation.PopAsync();
            });

            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "NoSpecial", Item = AppResources.NoSpecialQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "NotApplicable", Item = AppResources.NotApplicableQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "DifferentAddresses", Item = AppResources.DifferentAddressesQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "DifferentTransportModes", Item = AppResources.DifferentTransportModesQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "DifferentTravelTimes", Item = AppResources.DifferentTravelTimesQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "DifferentTravelDuration", Item = AppResources.DifferentTravelDurationQuestionAnswerLabel
            });
            TravelItems.Add(new SelectionKeyItem()
            {
                Key = "DifferentTravelRoutes", Item = AppResources.DifferentTravelRoutesQuestionAnswerLabel
            });

            PhoneItems.Add(new SelectionKeyItem()
            {
                Key = "TRUE", Item = AppResources.YesQuestionAnswerLabel
            });
            PhoneItems.Add(new SelectionKeyItem()
            {
                Key = "FALSE", Item = AppResources.NoQuestionAnswerLabel
            });
        }
Exemplo n.º 19
0
 public RouteTracker(IRepoManager repoManager)
 {
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
 }
Exemplo n.º 20
0
 public SyncService(ApiClient apiClient, IRepoManager repoManager)
 {
     _apiClient   = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
 }
Exemplo n.º 21
0
        public SettingsViewModel(TabiConfiguration config, INavigation navigation, IRepoManager repoManager, SyncService syncService, DataResolver dataResolver)
        {
            _navigation   = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _config       = config ?? throw new ArgumentNullException(nameof(config));
            _repoManager  = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _dataResolver = dataResolver ?? throw new ArgumentNullException(nameof(dataResolver));
            _syncService  = syncService ?? throw new ArgumentNullException(nameof(syncService));


            ExportDatabaseCommand = new Command(async key =>
            {
                Log.Info("Command: Exporting database");

                IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage;
                var t = await rootFolder.GetFileAsync("tabi.db");
                DependencyService.Get <IShareFile>().ShareFile(t.Path);
            });

            DropDatabaseCommand = new Command(async() =>
            {
                Log.Info("Command: Dropping database");

                var answer =
                    await Application.Current.MainPage.DisplayAlert("Confirm", "Drop database?", "Yes", "Cancel");
                if (answer)
                {
                    //SQLiteHelper.Instance.ClearPositions();
                }
            });

            InfoCommand = new Command((obj) =>
            {
                InfoCount++;
                if (InfoCount == 10 && App.Developer)
                {
                    Settings.Developer = true;
                    InfoCount          = 0;
                }
            });

            ExportKMLCommand = new Command(async key =>

            {
                Log.Info("Command: Export KML");
                //IFolder rootFolder = FileSystem.Current.LocalStorage;
                //string fileName = "Tabi-Export.kml";
                //IFile file = await rootFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
                ////Repository<Position> posRepo = new Repository<Position>(SQLiteHelper.Instance.Connection);


                //var result = await posRepo.Get(p => p.Accuracy < 100, x => x.Timestamp);
                //string kml = GeoUtil.GeoSerialize(result);
                //await file.WriteAllTextAsync(kml);
                //DependencyService.Get<IShareFile>().ShareFile(file.Path);
            });

            ExportCSVCommand = new Command(async key =>

            {
                Log.Info("Command: Export CSV");

                IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage;

                string fileName = "Tabi-Export.txt";
                string path     = PortablePath.Combine(rootFolder.Path, fileName);
                IFile file      = await rootFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);

                IPositionEntryRepository positionEntryRepository = _repoManager.PositionEntryRepository;
                var result = positionEntryRepository.FilterAccuracy(100).ToList();

                Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite);
                GeoUtil.PositionsToCsv(result, stream);

                DependencyService.Get <IShareFile>().ShareFile(path, "text/csv");
            });

            ExportBatteryCSVCommand = new Command(async key =>

            {
                Log.Info("Command: Export Battery CSV");

                IFolder rootFolder = PCLStorage.FileSystem.Current.LocalStorage;

                string fileName = "Tabi-Export-Battery.txt";
                string path     = PortablePath.Combine(rootFolder.Path, fileName);
                IFile file      = await rootFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);

                var batteryEntryRepo = _repoManager.BatteryEntryRepository;
                var result           = batteryEntryRepo.GetAll().ToList();

                Stream stream = await file.OpenAsync(FileAccess.ReadAndWrite);

                using (TextWriter tw = new StreamWriter(stream))
                {
                    var csv = new CsvWriter(tw);
                    csv.Configuration.RegisterClassMap <BatteryEntryMap>();
                    csv.WriteRecords(result);
                }

                DependencyService.Get <IShareFile>().ShareFile(path, "text/csv");
            });



            ClearStopsCommand = new Command((obj) =>
            {
                _repoManager.StopVisitRepository.ClearAll();
                _repoManager.TrackEntryRepository.ClearAll();
            });

            OpenLogsCommand = new Command((obj) =>
            {
                LogsPage page = new LogsPage();
                _navigation.PushAsync(page);
            });

            LoadSampleCommand = new Command(async() =>
            {
                DummyDbLoader dummy = new DummyDbLoader();
                await dummy.LoadAsync();
            });

            ShowMockupCommand = new Command(() =>
            {
                var assembly = typeof(SettingsViewModel).GetTypeInfo().Assembly;

                using (Stream stream = assembly.GetManifestResourceStream("Tabi.DemoCsv"))
                {
                    List <PositionEntry> entries = GeoUtil.CsvToPositions(stream).ToList();
                    _dataResolver.ResolveData(DateTimeOffset.MinValue, DateTimeOffset.Now);


                    //var x = sv.GroupPositions(entries, 100);
                    //var z = sv.DetermineStopVisits(x, null);

                    //Log.Debug(z.ToString());
                }
                //                ActivityOverviewMockupPage sPage = new ActivityOverviewMockupPage();
                //                navigationPage.PushAsync(sPage);
            });
            ShowPageCommand = new Command(() =>
            {
                TourVideoPage sPage = new TourVideoPage();
                _navigation.PushModalAsync(sPage);
            });

            ShowTourCommand = new Command(async() =>
            {
                Page tPage = new TourVideoPage();
                Analytics.TrackEvent("ShowTour clicked");

                await _navigation.PushModalAsync(tPage);
            });

            PrivacyDataCommand = new Command(async() =>
            {
                Analytics.TrackEvent("Privacy & data settings clicked");

                await _navigation.PushAsync(new SettingsPrivacyPage(this));
            });

            AppAboutCommand = new Command(async() =>
            {
                Analytics.TrackEvent("Privacy & data settings clicked");

                await _navigation.PushAsync(new AboutSettings(this));
            });

            SendSupportCallCommand = new Command(async() =>
            {
                try
                {
                    PhoneDialer.Open(_config.Support.PhoneNumber);
                }
                catch (ArgumentNullException ex)
                {
                    await UserDialogs.Instance.AlertAsync(AppResources.ErrorOccurredTitle, okText: AppResources.OkText);
                    Log.Error(ex);
                }
                catch (FeatureNotSupportedException ex)
                {
                    await UserDialogs.Instance.AlertAsync(AppResources.DeviceUnsupportedText, AppResources.DeviceUnsupportedTitle, AppResources.OkText);
                    Log.Error(ex);
                }
                catch (Exception ex)
                {
                    await UserDialogs.Instance.AlertAsync(AppResources.ErrorOccurredTitle, AppResources.OkText);
                    Log.Error(ex);
                }
            });

            SendSupportEmailCommand = new Command(async() =>
            {
                string subject = _config.Support.EmailSubject ?? "Tabi app";

                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendLine(" ");
                stringBuilder.AppendLine("==========================");
                stringBuilder.AppendLine($"{_config.App.AppName} app");
                stringBuilder.AppendLine($"Version: {VersionTracking.CurrentVersion} ({VersionTracking.CurrentBuild})");
                stringBuilder.AppendLine($"Platform: {DeviceInfo.Platform} ({DeviceInfo.VersionString})");
                stringBuilder.AppendLine($"Model: {DeviceInfo.Manufacturer} ({DeviceInfo.Model})");
                stringBuilder.AppendLine($"API URL: {_config.Api.Url}");
                stringBuilder.AppendLine($"Client Id: {_config.Api.ClientIdentifier}");
                stringBuilder.AppendLine($"Device ID: {Settings.Device}");
                stringBuilder.AppendLine($"Username: {Settings.Username}");

                List <string> to = new List <string>()
                {
                    _config.Support.Email
                };

                try
                {
                    var message = new EmailMessage
                    {
                        Subject = subject,
                        Body    = stringBuilder.ToString(),
                        To      = to,
                    };

                    await Email.ComposeAsync(message);
                }
                catch (FeatureNotSupportedException ex)
                {
                    await UserDialogs.Instance.AlertAsync(AppResources.DeviceUnsupportedText, AppResources.DeviceUnsupportedTitle, AppResources.OkText);
                    Log.Error(ex);
                }
                catch (Exception ex)
                {
                    Log.Error(ex);
                }
            });

            OpenSupportWebsiteCommand = new Command(async() =>
            {
                await Browser.OpenAsync(_config.Support.Url);
            });

            LicensesCommand = new Command(async() =>
            {
                await Browser.OpenAsync(_config.App.LicensesUrl);
            });

            AgreementCommand = new Command(async() =>
            {
                await Browser.OpenAsync(_config.App.AgreementUrl);
            });

            UploadCommand = new Command(async() =>
            {
                Analytics.TrackEvent("Upload clicked");

                // Check if there is an active internet connection
                if (CrossConnectivity.Current.IsConnected)
                {
                    bool wifiAvailable = CrossConnectivity.Current.ConnectionTypes.Contains(Plugin.Connectivity.Abstractions.ConnectionType.WiFi);
                    bool upload        = !Settings.WifiOnly || wifiAvailable;

                    // Check if connected to WiFI
                    if (!upload)
                    {
                        upload = await UserDialogs.Instance.ConfirmAsync(AppResources.MobileDataUsageText, AppResources.MobileDataUsageTitle, AppResources.ContinueButton, AppResources.CancelText);
                    }

                    if (upload)
                    {
                        UserDialogs.Instance.ShowLoading(AppResources.UploadDataInProgress, MaskType.Black);

                        // Check if the API is available (within 5 seconds).
                        // Display message to user if api is unavailable.
                        bool available = await _syncService.Ping(5);

                        if (!available)
                        {
                            UserDialogs.Instance.HideLoading();

                            await UserDialogs.Instance.AlertAsync(AppResources.APIUnavailableText, AppResources.APIUnavailableTitle, AppResources.OkText);
                            return;
                        }

                        try
                        {
                            await _syncService.UploadAll(false);

                            UserDialogs.Instance.HideLoading();

                            Settings.LastUpload = DateTime.Now.Ticks;

                            UserDialogs.Instance.Toast(AppResources.DataUploadSuccesful);
                        }
                        catch (Exception e)
                        {
                            UserDialogs.Instance.HideLoading();
                            await UserDialogs.Instance.AlertAsync(AppResources.UploadDataErrorText, AppResources.ErrorOccurredTitle, AppResources.OkText);
                            Log.Error($"UploadAll exception {e.Message}: {e.StackTrace}");
                        }
                    }
                }
                else
                {
                    UserDialogs.Instance.HideLoading();
                    // Show user a message that there is no internet connection
                    await UserDialogs.Instance.AlertAsync(AppResources.NoInternetConnectionText, AppResources.NoInternetConnectionTitle, AppResources.OkText);
                }
            });

            Settings.PropertyChanged += Settings_PropertyChanged;
        }
Exemplo n.º 22
0
 public BatteryHelper(IRepoManager repoManager)
 {
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
 }
Exemplo n.º 23
0
 public SyncTimeKeeper(IRepoManager repoManager)
 {
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
 }
Exemplo n.º 24
0
 public DayMapViewModel(IRepoManager repoManager)
 {
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
 }
Exemplo n.º 25
0
        public StopDetailNameViewModel(IRepoManager repoManager, INavigation navigation, IUserInterfaceConfiguration userInterfaceConfiguration, StopVisitViewModel stopVisitViewModel)

        {
            _repoManager                = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
            _navigation                 = navigation ?? throw new ArgumentNullException(nameof(navigation));
            _stopVisitViewModel         = stopVisitViewModel ?? throw new ArgumentNullException(nameof(stopVisitViewModel));
            _userInterfaceConfiguration = userInterfaceConfiguration ?? throw new ArgumentNullException(nameof(userInterfaceConfiguration));

            SaveCommand = new Command(async() =>
            {
                saved        = true;
                Stop newStop = StopVisit.SaveViewModelToStop();
                if (useExistingStop != null)
                {
                    stopVisitViewModel.StopVisit.StopId = useExistingStop.Id;;
                }
                else if (ChangeAll && nameChanged)
                {
                    newStop.Id = stopVisitViewModel.StopVisit.StopId;
                    stopVisitViewModel.StopVisit.Stop = newStop;
                    repoManager.StopRepository.Update(newStop);
                }
                else if (nameChanged)
                {
                    // Add to repo and newStop will have an ID set
                    repoManager.StopRepository.Add(newStop);
                    stopVisitViewModel.StopVisit.StopId = newStop.Id;
                    stopVisitViewModel.StopVisit.Stop   = newStop;
                }

                repoManager.StopVisitRepository.Update(stopVisitViewModel.StopVisit);

                await PopPageAsync();
            });
            CancelCommand = new Command(async() =>
            {
                StopVisit.ResetViewModel();
                await PopPageAsync();
            });

            ChangeAllVisible = ShouldChangeAllBeVisible();
            if (ChangeAllVisible)
            {
                changeAll = true;
            }

            StopVisit.PropertyChanged += NameChanged;


            if (_userInterfaceConfiguration.StopNameReplaceAllEnabled)
            {
                // Only show the list of possible nearby stops if there are more than 1 stops nearby.
                int existingStopVisits = _repoManager.StopVisitRepository.MatchingStop(stopVisitViewModel.StopVisit.Stop).ToList().Count;
                if (existingStopVisits > 1)
                {
                    changeAllVisible = true;
                    changeAll        = true;
                }
            }

            if (_userInterfaceConfiguration.SuggestPossibleNearbyStopsEnabled)
            {
                PossibleStops        = ListNearbyStops(stopVisitViewModel, _userInterfaceConfiguration.SuggestPossibleNearbyStopsDistance);
                PossibleStopsVisible = PossibleStops.Count >= _userInterfaceConfiguration.SuggestPossibleNearbyStopsCount;
            }
        }
Exemplo n.º 26
0
        public static async Task <RepoWorker> InitializeAsync(
            IRepoManager repoManager,
            IPullRequestAnalyzer prAnalyzer,
            IRepositoryAnalyzer repoAnalyzer,
            IHistoricalAnalysisManager analysisManager,
            IClock clock,
            ILogger logger)
        {
            if (repoManager is null)
            {
                throw new ArgumentNullException(nameof(repoManager));
            }
            if (prAnalyzer is null)
            {
                throw new ArgumentNullException(nameof(prAnalyzer));
            }
            if (repoAnalyzer is null)
            {
                throw new ArgumentNullException(nameof(repoAnalyzer));
            }
            if (analysisManager is null)
            {
                throw new ArgumentNullException(nameof(analysisManager));
            }
            if (clock is null)
            {
                throw new ArgumentNullException(nameof(clock));
            }
            if (logger is null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            var name = $"{repoManager.RepoOwner}:{repoManager.RepoName}";

            // Analysis steps
            // 1a) Find metrics for where the set of analyzers has differed
            // 1b) Recompute those metrics
            // 1c) Overwrite the old metric snapshots
            // 2a) Find things known to the cache, but that haven't been analyzed
            // 2b) Analyze this new stuff
            // 2c) Write down the new snapshot

            var cachedPullRequestByNumber = (await repoManager.GetPullRequestsAsync())
                                            .ToDictionary(pr => pr.Number);

            var previousMetrics = (await analysisManager.LoadHistoryAsync(repoManager.RepoOwner, repoManager.RepoName))
                                  ?? new List <MetricSnapshot>();

            var previousPullRequestMetricsByNumber = previousMetrics
                                                     .SelectMany(m => m.PullRequestMetrics.Values)
                                                     .ToDictionary(pr => pr.Number);

            // 1a) Find metrics for where the set of analyzers has differed
            var previouslyComputedButHasChanged = previousMetrics
                                                  .Where(m => !m.Scorers.SetEquals(prAnalyzer.Scorers))
                                                  .ToList();

            // 2a) Find things known to the cache, but that haven't been analyzed
            var cachedButNotAnalyzed = cachedPullRequestByNumber
                                       .Where(pr => !previousPullRequestMetricsByNumber.ContainsKey(pr.Key))
                                       .Select(pr => pr.Key)
                                       .ToList();

            var worker = new RepoWorker(repoManager, name, prAnalyzer, repoAnalyzer, analysisManager, clock, logger);

            var analysisToBeDone = previouslyComputedButHasChanged.Any() || cachedButNotAnalyzed.Any();

            if (!analysisToBeDone)
            {
                return(worker);
            }

            // 1b) Recompute those metrics
            var toBeSaved = new List <MetricSnapshot>();

            if (previouslyComputedButHasChanged.Any())
            {
                var now = clock.DateTimeOffsetUtcNow();

                var scorers = prAnalyzer.Scorers.ToHashSet();
                foreach (var originalMetric in previouslyComputedButHasChanged)
                {
                    var prMetrics = originalMetric.PullRequestMetrics
                                    .Select(prMetric => prMetric.Value.Number)
                                    .Select(nbr => cachedPullRequestByNumber[nbr])
                                    .Select(prAnalyzer.CalculatePullRequestMetrics)
                                    .ToList();
                    var replacements = repoAnalyzer.CalculateRepositoryMetricsOverTime(prMetrics);

                    foreach (var replacement in replacements)
                    {
                        replacement.CreatedAt = originalMetric.CreatedAt;
                        replacement.UpdatedAt = now;
                        replacement.Scorers   = scorers;
                        replacement.Owner     = repoManager.RepoOwner;
                        replacement.Name      = repoManager.RepoName;
                        replacement.Url       = repoManager.RepoUrl;
                    }
                    toBeSaved.AddRange(replacements);
                }
            }

            if (cachedButNotAnalyzed.Any())
            {
                // 2b) Analyze this new stuff
                var now = clock.DateTimeOffsetUtcNow();
                var newPullRequestMetrics = cachedButNotAnalyzed
                                            .Select(nbr => cachedPullRequestByNumber[nbr])
                                            .Select(prAnalyzer.CalculatePullRequestMetrics)
                                            .ToList();
                var newRepoMetrics = repoAnalyzer.CalculateRepositoryMetricsOverTime(newPullRequestMetrics);
                var prAnalyzers    = prAnalyzer.Scorers.ToHashSet();
                foreach (var newRepoMetric in newRepoMetrics)
                {
                    newRepoMetric.CreatedAt = now;
                    newRepoMetric.UpdatedAt = now;
                    newRepoMetric.Scorers   = prAnalyzers;
                    newRepoMetric.Owner     = repoManager.RepoOwner;
                    newRepoMetric.Name      = repoManager.RepoName;
                    newRepoMetric.Url       = repoManager.RepoUrl;
                }

                toBeSaved.AddRange(newRepoMetrics);
            }

            // 1c) Overwrite the old metric snapshots
            // 2c) Write down the new snapshot
            await analysisManager.SaveAsync(toBeSaved);

            return(worker);
        }
Exemplo n.º 27
0
 public DbLogWriter(IRepoManager repoManager, LogSeverity logLevel = LogSeverity.Info) : base()
 {
     _repoManager = repoManager ?? throw new ArgumentNullException(nameof(repoManager));
     _severity    = logLevel;
 }