Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • au304578/besafeplus
1 result
Show changes
Commits on Source (8)
......@@ -22,7 +22,7 @@ namespace BeSafePlus.Platforms.Android.AndroidSensor
private bool _isFirstReading = true; // true on first load
public event Action? ResetStepCountEvent;
public event Func<Task>? ResetStepCountEvent;
public event Action<int, DateTime>? StepCounterChangeEvent;
......@@ -48,6 +48,8 @@ namespace BeSafePlus.Platforms.Android.AndroidSensor
_sensorManager?.RegisterListener(this, _stepSensor, SensorDelay.Ui);
_sensorManager?.RegisterListener(this, _accelerometerSensor, SensorDelay.Normal);
Log.Info("ActivityTrackingSensor", "Sensors registered sucessfully");
return;
}
......@@ -115,9 +117,12 @@ namespace BeSafePlus.Platforms.Android.AndroidSensor
AccelerometerChangeEvent?.Invoke(values[0], values[1], values[2], DateTime.Now);
}
}
public void ResetDailySteps()
public async Task ResetDailySteps()
{
ResetStepCountEvent?.Invoke();
if (ResetStepCountEvent != null)
{
await ResetStepCountEvent.Invoke();
}
}
}
}
\ No newline at end of file
......@@ -101,9 +101,9 @@ namespace BeSafePlus.Platforms.Android.AndroidSensor
{
_activityTrackingSensor?.Start();
_scheduleService?.ScheduleAlarm<MidnightResetReceiver>(AndroidRequestCodes.MidnightReset, TimeExtensions.GetTimeUntilMidnight());
_scheduleService?.ScheduleAlarm<HealthCheckReceiver>(AndroidRequestCodes.HealthCheck, TimeSpan.FromHours(2));
_scheduleService?.ScheduleAlarm<MidnightReportReceiver>(AndroidRequestCodes.MidnightReport, TimeExtensions.GetTimeUntilMidnight() /*TimeSpan.FromSeconds(5)*/);
_scheduleService?.ScheduleAlarm<MidnightResetReceiver>(AndroidRequestCodes.MidnightReset, TimeExtensions.GetTimeUntilMidnight() /*TimeSpan.FromSeconds(5)*/);
//_scheduleService?.ScheduleAlarm<HealthCheckReceiver>(AndroidRequestCodes.HealthCheck, TimeSpan.FromSeconds(5));
_scheduleService?.ScheduleAlarm<MidnightReportReceiver>(AndroidRequestCodes.MidnightReport, TimeExtensions.GetTimeUntilMidnight()+TimeSpan.FromMinutes(10) /*TimeSpan.FromSeconds(5)*/);
IsRunning = true;
}
......
......@@ -13,6 +13,7 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
[BroadcastReceiver(Enabled = true, Exported = false)]
public class HealthCheckReceiver : BroadcastReceiver
{
bool serviceRunning = false;
public override async void OnReceive(Context? context, Intent? intent)
{
try
......@@ -23,7 +24,6 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
// Check if ActivityTrackingService is running
var isTrackingServiceRunning = runningServices?.Any(s => s.Service?.ClassName == typeof(ActivityTrackingService).Name);
bool serviceRunning = false;
if (isTrackingServiceRunning != null)
{
......@@ -35,6 +35,8 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
{
var serviceIntent = new Intent(context, typeof(ActivityTrackingService));
context.StartForegroundService(serviceIntent);
Log.Warn("ServiceHealthCheck", "ActivityTrackingService started sucessfully");
}
}
else
......@@ -46,22 +48,34 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
{
Log.Debug("ServiceHealthCheck", "GetRunningServices returned null.");
}
}
catch (Exception ex) // Escalation 1
{
Log.Error("ServiceHealthCheck", $"Error occurred during healthcheck: {ex.Message}");
Log.Error("ServiceHealthCheck", $"Attempting to wake app with push notifications....");
var firestoreService = IPlatformApplication.Current?.Services?.GetService<FirestoreService>();
if (firestoreService != null)
try
{
var deviceId = "010101";
await firestoreService.InsertServiceStatus(deviceId, serviceRunning);
var firestoreService = IPlatformApplication.Current?.Services?.GetService<FirestoreService>();
if (firestoreService != null)
{
var deviceId = "010101";
await firestoreService.InsertServiceStatus(deviceId, serviceRunning);
}
}
catch(Exception ex2) // Escalation 2
{
Log.Error("ServiceHealthCheck", $"Error occurred during healthcheck, when trying to wake app with push notifications: {ex.Message}");
Log.Error("ServiceHealthCheck", $"Sending post notification to use as last resort");
// Send post notification
var scheduleService = IPlatformApplication.Current?.Services?.GetService<IScheduleService>();
scheduleService?.ScheduleAlarm<HealthCheckReceiver>(AndroidRequestCodes.HealthCheck, TimeSpan.FromHours(2));
}
catch (Exception ex)
{
Log.Error("ServiceHealthCheck", $"Error occurred during healthcheck: {ex.Message}");
// if it fails catch from outer or alert redcap
}
}
var scheduleService = IPlatformApplication.Current?.Services?.GetService<IScheduleService>();
scheduleService?.ScheduleAlarm<HealthCheckReceiver>(AndroidRequestCodes.HealthCheck, TimeSpan.FromHours(2));
}
}
}
......@@ -10,9 +10,25 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
{
public override void OnReceive(Context? context, Intent? intent)
{
ResetDailySteps();
var pendingResult = GoAsync();
Task.Run(async () =>
{
try
{
await ResetDailySteps();
}
catch (Exception ex)
{
Log.Error("MidnightResetReceiver", $"Exception during ResetDailySteps: {ex.Message}");
}
finally
{
pendingResult?.Finish();
}
});
}
private static void ResetDailySteps()
private static async Task ResetDailySteps()
{
var serviceProvider = IPlatformApplication.Current?.Services;
......@@ -22,7 +38,7 @@ namespace BeSafePlus.Platforms.Android.CustomBroadcastReceivers
if (activityTrackingSensor != null && scheduleService != null)
{
activityTrackingSensor.ResetDailySteps();
await activityTrackingSensor.ResetDailySteps();
scheduleService.ScheduleAlarm<MidnightResetReceiver>(AndroidRequestCodes.MidnightReset, TimeExtensions.GetTimeUntilMidnight());
......
......@@ -42,13 +42,13 @@ namespace BeSafePlus.Platforms.Android.Workers
{
if (reportService != null && scheduleService != null)
{
reportService.WriteAndSendReport().Wait(); // block til finished
reportService.WriteAndSendReport().GetAwaiter().GetResult();
stopwatch.Stop();
Log.Info("BeSafeReportWorker", $"Report was written and send to database. Elapsed: {stopwatch.ElapsedMilliseconds}. Attempt: {RunAttemptCount}");
scheduleService.ScheduleAlarm<MidnightReportReceiver>(AndroidRequestCodes.MidnightReport, TimeExtensions.GetTimeUntilMidnight());
scheduleService.ScheduleAlarm<MidnightReportReceiver>(AndroidRequestCodes.MidnightReport, TimeExtensions.GetTimeUntilMidnight()+ TimeSpan.FromMinutes(5));
return Result.InvokeSuccess();
}
......
......@@ -12,9 +12,9 @@ namespace BeSafePlus.Sensors
public event Action<float, float, float, DateTime>? AccelerometerChangeEvent;
public event Action? ResetStepCountEvent;
public event Func<Task>? ResetStepCountEvent;
public void Start();
public void Stop();
public void ResetDailySteps();
public Task ResetDailySteps();
}
}
\ No newline at end of file
......@@ -76,12 +76,15 @@ namespace BeSafePlus.Sensors
DailySteps += stepCount?.Steps ?? 0;
SendDailyStepUpdate();
}
private void OnResetDailySteps()
private async Task OnResetDailySteps()
{
DailySteps = 0;
SendDailyStepUpdate();
_db.CreateOrUpdateStepCount(DailySteps).Wait();
LastSaveTimeStamp = DateTime.Now;
if (_db != null)
{
await _db.CreateOrUpdateStepCount(DailySteps);
LastSaveTimeStamp = DateTime.Now;
}
}
#endregion
......
......@@ -192,12 +192,20 @@ namespace BeSafePlus.ViewModels
var newWeeklyData = new List<StepCount>();
var monthCount = new Dictionary<int, int>();
int totalSteps = 0;
for (int i = 0; i < 7; i++)
{
var date = startOfWeek.AddDays(i);
int monthKey = date.Month + date.Year * 100;
if (!monthCount.ContainsKey(monthKey)) monthCount[monthKey] = 0;
monthCount[monthKey]++;
var stepData = await _database.GetStepCountByDate(date);
if (stepData != null)
......@@ -217,11 +225,17 @@ namespace BeSafePlus.ViewModels
TotalStepsThisWeek = totalSteps;
var currentWeekReferenceDate = today;
int dominantMonthKey = monthCount.OrderByDescending(kv => kv.Value).First().Key;
int dominantYear = dominantMonthKey / 100;
int dominantMonth = dominantMonthKey % 100;
var dominantMonthDate = new DateTime(dominantYear, dominantMonth, 1);
var realMonthOffset = (currentWeekReferenceDate.Year - DateTime.Now.Year) * 12 + (currentWeekReferenceDate.Month - DateTime.Now.Month);
var now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
_currentMonthOffset = realMonthOffset;
_currentMonthOffset = ((dominantMonthDate.Year - now.Year) * 12) + (dominantMonthDate.Month - now.Month);
await LoadMonthlySteps();
......