From 8034c7411d512c991eb055d72d41a70ce9f926e3 Mon Sep 17 00:00:00 2001 From: Bart Sopers <bart@sopers.nl> Date: Thu, 7 Jan 2021 03:56:54 +0100 Subject: [PATCH] Only automatically update Omnipod time for DST and TZ changes --- .../receivers/TimeDateOrTZChangeReceiver.kt | 4 ++-- .../overview/notifications/Notification.java | 1 + .../androidaps/utils/TimeChangeType.java | 4 ++-- .../pump/omnipod/OmnipodPumpPlugin.java | 23 +++++++++++++++---- .../driver/definition/OmnipodConstants.java | 3 +++ .../omnipod/manager/AapsOmnipodManager.java | 5 ++++ .../omnipod/ui/OmnipodOverviewFragment.kt | 2 +- omnipod/src/main/res/values/strings.xml | 1 + 8 files changed, 33 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/TimeDateOrTZChangeReceiver.kt b/app/src/main/java/info/nightscout/androidaps/receivers/TimeDateOrTZChangeReceiver.kt index de7249b938..bcf3091c86 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/TimeDateOrTZChangeReceiver.kt +++ b/app/src/main/java/info/nightscout/androidaps/receivers/TimeDateOrTZChangeReceiver.kt @@ -49,14 +49,14 @@ class TimeDateOrTZChangeReceiver : DaggerBroadcastReceiver() { Intent.ACTION_TIMEZONE_CHANGED == action -> { aapsLogger.info(LTag.PUMP, "TimeDateOrTZChangeReceiver::Timezone changed. Notifying pump driver.") - activePump.timezoneOrDSTChanged(TimeChangeType.TimezoneChange) + activePump.timezoneOrDSTChanged(TimeChangeType.TimezoneChanged) } Intent.ACTION_TIME_CHANGED == action -> { val currentDst = calculateDST() if (currentDst == isDST) { aapsLogger.info(LTag.PUMP, "TimeDateOrTZChangeReceiver::Time changed (manual). Notifying pump driver.") - activePump.timezoneOrDSTChanged(TimeChangeType.ManualTimeChange) + activePump.timezoneOrDSTChanged(TimeChangeType.TimeChanged) } else { if (currentDst) { aapsLogger.info(LTag.PUMP, "TimeDateOrTZChangeReceiver::DST started. Notifying pump driver.") diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java index b35d65e62c..f25ea06380 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java +++ b/core/src/main/java/info/nightscout/androidaps/plugins/general/overview/notifications/Notification.java @@ -78,6 +78,7 @@ public class Notification { public static final int OMNIPOD_UNCERTAIN_SMB = 67; public static final int OMNIPOD_UNKNOWN_TBR = 68; public static final int OMNIPOD_STARTUP_STATUS_REFRESH_FAILED = 69; + public static final int OMNIPOD_TIME_OUT_OF_SYNC = 70; public static final int IMPORTANCE_HIGH = 2; diff --git a/core/src/main/java/info/nightscout/androidaps/utils/TimeChangeType.java b/core/src/main/java/info/nightscout/androidaps/utils/TimeChangeType.java index 720ecc1a1b..b822b4c849 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/TimeChangeType.java +++ b/core/src/main/java/info/nightscout/androidaps/utils/TimeChangeType.java @@ -1,8 +1,8 @@ package info.nightscout.androidaps.utils; public enum TimeChangeType { - TimezoneChange, + TimezoneChanged, DST_Started, DST_Ended, - ManualTimeChange + TimeChanged } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java index c0c74a01d2..5161648e10 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java @@ -256,7 +256,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, queueAcknowledgeAlertsCommand(); } } else { - aapsLogger.debug(LTag.PUMPCOMM, "Skipping Pod status check because command queue is not empty"); + aapsLogger.debug(LTag.PUMP, "Skipping Pod status check because command queue is not empty"); } updatePodWarningNotifications(); @@ -457,6 +457,13 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, rxBus.send(new EventNewNotification(notification)); } else { rxBus.send(new EventDismissNotification(Notification.OMNIPOD_POD_SUSPENDED)); + + if (podStateManager.timeDeviatesMoreThan(OmnipodConstants.TIME_DEVIATION_THRESHOLD)) { + Notification notification = new Notification(Notification.OMNIPOD_TIME_OUT_OF_SYNC, resourceHelper.gs(R.string.omnipod_error_time_out_of_sync), Notification.NORMAL); + rxBus.send(new EventNewNotification(notification)); + } else { + rxBus.send(new EventDismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC)); + } } } @@ -955,12 +962,18 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, @Override public void timezoneOrDSTChanged(TimeChangeType timeChangeType) { - aapsLogger.warn(LTag.PUMP, "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + aapsOmnipodManager.isTimeChangeEventEnabled() + "]"); + aapsLogger.info(LTag.PUMP, "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + aapsOmnipodManager.isTimeChangeEventEnabled() + "]"); - if (podStateManager.isPodRunning()) { - aapsLogger.info(LTag.PUMP, "Time, Date and/or TimeZone changed event received and will be consumed by driver."); - hasTimeDateOrTimeZoneChanged = true; + if (timeChangeType == TimeChangeType.TimeChanged) { + aapsLogger.info(LTag.PUMP, "Ignoring time change because it is not a DST or TZ change"); + return; + } else if (!podStateManager.isPodRunning()) { + aapsLogger.info(LTag.PUMP, "Ignoring time change because no Pod is active"); + return; } + + aapsLogger.info(LTag.PUMP, "DST and/or TimeZone changed event will be consumed by driver"); + hasTimeDateOrTimeZoneChanged = true; } @Override diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/OmnipodConstants.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/OmnipodConstants.java index 4b5f224e64..7dac90a207 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/OmnipodConstants.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/definition/OmnipodConstants.java @@ -30,4 +30,7 @@ public class OmnipodConstants { public static final double POD_SETUP_UNITS = POD_PRIME_BOLUS_UNITS + POD_CANNULA_INSERTION_BOLUS_UNITS; public static final int DEFAULT_MAX_RESERVOIR_ALERT_THRESHOLD = 20; + + // when the time deviates more than the threshold, the user will get warned and will get the option to change the time + public static final Duration TIME_DEVIATION_THRESHOLD = Duration.standardMinutes(5); } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java index a18408d47b..d22fe40f55 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/manager/AapsOmnipodManager.java @@ -347,6 +347,7 @@ public class AapsOmnipodManager { dismissNotification(Notification.FAILED_UDPATE_PROFILE); dismissNotification(Notification.OMNIPOD_POD_SUSPENDED); + dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); return new PumpEnactResult(injector).success(true).enacted(true); } @@ -584,6 +585,9 @@ public class AapsOmnipodManager { addSuccessToHistory(PodHistoryEntryType.SUSPEND_DELIVERY, null); createSuspendedFakeTbrIfNotExists(); + dismissNotification(Notification.FAILED_UDPATE_PROFILE); + dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); + return new PumpEnactResult(injector).success(true).enacted(true); } @@ -619,6 +623,7 @@ public class AapsOmnipodManager { dismissNotification(Notification.FAILED_UDPATE_PROFILE); dismissNotification(Notification.OMNIPOD_POD_SUSPENDED); + dismissNotification(Notification.OMNIPOD_TIME_OUT_OF_SYNC); return new PumpEnactResult(injector).success(true).enacted(true); } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt index b58c4dd0bb..6ad44e9ea1 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/ui/OmnipodOverviewFragment.kt @@ -251,7 +251,7 @@ class OmnipodOverviewFragment : DaggerFragment() { omnipod_overview_firmware_version.text = resourceHelper.gs(R.string.omnipod_firmware_version_value, podStateManager.pmVersion.toString(), podStateManager.piVersion.toString()) omnipod_overview_time_on_pod.text = readableZonedTime(podStateManager.time) - omnipod_overview_time_on_pod.setTextColor(if (podStateManager.timeDeviatesMoreThan(Duration.standardMinutes(5))) { + omnipod_overview_time_on_pod.setTextColor(if (podStateManager.timeDeviatesMoreThan(OmnipodConstants.TIME_DEVIATION_THRESHOLD)) { Color.RED } else { Color.WHITE diff --git a/omnipod/src/main/res/values/strings.xml b/omnipod/src/main/res/values/strings.xml index d6f9bc5874..6a141672ab 100644 --- a/omnipod/src/main/res/values/strings.xml +++ b/omnipod/src/main/res/values/strings.xml @@ -106,6 +106,7 @@ <string name="omnipod_error_rileylink_address_invalid">RileyLink address invalid.</string> <string name="omnipod_error_operation_not_possible_no_configuration">Operation is not possible.\n\nYou need to configure Omnipod first, before you can use this operation.</string> <string name="omnipod_error_pod_not_attached">No active Pod</string> + <string name="omnipod_error_time_out_of_sync">The time on the Pod is out of sync. Please update the time in the Omnipod tab.</string> <string name="omnipod_error_unexpected_exception">An unexpected error occurred. Please report! (%1$s: %2$s).</string> <string name="omnipod_error_crc_mismatch">Communication failed: message integrity verification failed</string> <string name="omnipod_error_invalid_packet_type">Communication failed: received an invalid packet from the Pod</string>