diff --git a/BeSafePlus/ViewModels/ActivityHistoryViewModel.cs b/BeSafePlus/ViewModels/ActivityHistoryViewModel.cs index 1da8524ebe3eb93ab1dcbba938cb3d06e99abeb9..ad4e78dc56d25804d13a57d15df2962922187d41 100644 --- a/BeSafePlus/ViewModels/ActivityHistoryViewModel.cs +++ b/BeSafePlus/ViewModels/ActivityHistoryViewModel.cs @@ -74,9 +74,9 @@ namespace BeSafePlus.ViewModels } } } - private void UpdateSteps(int steps) + private async void UpdateSteps(int steps) { - MainThread.BeginInvokeOnMainThread(() => + await MainThread.InvokeOnMainThreadAsync(async () => { AccumulatedSteps = steps; @@ -101,21 +101,35 @@ namespace BeSafePlus.ViewModels TotalStepsThisWeek = WeeklyStepData.Sum(data => data.Steps); - Task.Run(async () => + var todayMonthlyEntry = MonthlyStepData.FirstOrDefault(data => DateTime.Parse(data.Date).Date == today); + + if (todayMonthlyEntry == null) { - await LoadMonthlySteps(); + todayMonthlyEntry = new StepCount { Date = today.ToString("yyyy-MM-dd"), Steps = steps }; + + MonthlyStepData.Add(todayMonthlyEntry); + } - MainThread.BeginInvokeOnMainThread(() => - { - OnPropertyChanged(nameof(TotalStepsThisMonth)); - }); - }); + else + { + todayMonthlyEntry.Steps = steps; + } + + var firstDayOfMonth = new DateTime(today.Year, today.Month, 1); + + var lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1); + + TotalStepsThisMonth = MonthlyStepData + .Where(data => DateTime.Parse(data.Date) >= firstDayOfMonth && DateTime.Parse(data.Date) <= lastDayOfMonth) + .Sum(data => data.Steps); OnPropertyChanged(nameof(WeeklyStepData)); OnPropertyChanged(nameof(TotalStepsThisWeek)); OnPropertyChanged(nameof(AccumulatedSteps)); + + OnPropertyChanged(nameof(TotalStepsThisMonth)); }); } public void SetProgress(int steps) @@ -146,7 +160,13 @@ namespace BeSafePlus.ViewModels public int TotalStepsThisMonth { get => _totalStepsThisMonth; - set => SetProperty(ref _totalStepsThisMonth, value); + set + { + if (SetProperty(ref _totalStepsThisMonth, value)) + { + OnPropertyChanged(nameof(TotalStepsThisMonth)); + } + } } public string WeekLabel => GetWeekLabel(); public string MonthLabel => GetMonthLabel(); @@ -221,16 +241,27 @@ namespace BeSafePlus.ViewModels int totalSteps = 0; + var newMonthlyData = new List<StepCount>(); + for (var date = firstDayOfMonth; date <= lastDayOfMonth; date = date.AddDays(1)) { var stepData = await _database.GetStepCountByDate(date); if (stepData != null) { + newMonthlyData.Add(stepData); + totalSteps += stepData.Steps; } + + else + { + newMonthlyData.Add(new StepCount { Date = date.ToString("yyyy-MM-dd"), Steps = 0 }); + } } + MonthlyStepData = newMonthlyData; + TotalStepsThisMonth = totalSteps; } private string GetWeekLabel() diff --git a/BeSafePlus/Views/ActivityHistoryPage.xaml.cs b/BeSafePlus/Views/ActivityHistoryPage.xaml.cs index e9cd98cae4b0d6fccacbee9dacde99c2ce12f916..4582489efc299184203be3325c07ebcb23083d64 100644 --- a/BeSafePlus/Views/ActivityHistoryPage.xaml.cs +++ b/BeSafePlus/Views/ActivityHistoryPage.xaml.cs @@ -40,13 +40,20 @@ namespace BeSafePlus { base.OnAppearing(); - await _viewModel.LoadStepGoal(); + var loadStepGoalTask = _viewModel.LoadStepGoal(); - await _viewModel.LoadWeeklySteps(); + var loadWeeklyStepsTask = _viewModel.LoadWeeklySteps(); - await _viewModel.LoadMonthlySteps(); + var loadMonthlyStepsTask = _viewModel.LoadMonthlySteps(); - _viewModel.AccumulatedSteps = await _viewModel.GetStepCount(); + var getStepCountTask = _viewModel.GetStepCount(); + + await Task.WhenAll(loadStepGoalTask, loadWeeklyStepsTask, loadMonthlyStepsTask, getStepCountTask); + + if (_viewModel.AccumulatedSteps == 0) + { + _viewModel.AccumulatedSteps = await getStepCountTask; + } LoadChart();