From 512541b4841fdd744dcc3205ba992179f475b55e Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Thu, 24 Aug 2023 11:05:40 +0200 Subject: [PATCH 1/6] Dash: Add option to disable pod expiration alarm --- .../src/main/res/values/strings.xml | 6 +- .../omnipod/dash/OmnipodDashPumpPlugin.kt | 74 +++++++++++++++++-- .../omnipod/dash/driver/OmnipodDashManager.kt | 2 +- .../dash/driver/OmnipodDashManagerImpl.kt | 67 +++++++++-------- .../driver/pod/definition/PodConstants.kt | 9 +-- .../pod/state/OmnipodDashPodStateManager.kt | 16 +++- .../state/OmnipodDashPodStateManagerImpl.kt | 61 ++++++++++----- .../action/DashInsertCannulaViewModel.kt | 18 +++-- .../main/res/xml/omnipod_dash_preferences.xml | 16 ++++ 9 files changed, 199 insertions(+), 70 deletions(-) diff --git a/pump/omnipod-common/src/main/res/values/strings.xml b/pump/omnipod-common/src/main/res/values/strings.xml index 040757704d..c2d35f243a 100644 --- a/pump/omnipod-common/src/main/res/values/strings.xml +++ b/pump/omnipod-common/src/main/res/values/strings.xml @@ -9,6 +9,8 @@ AAPS.Omnipod.time_change_enabled AAPS.Omnipod.expiration_reminder_enabled AAPS.Omnipod.expiration_reminder_hours_before_shutdown + AAPS.Omnipod.expiration_alarm_enabled + AAPS.Omnipod.expiration_alarm_hours_before_shutdown AAPS.Omnipod.low_reservoir_alert_enabled AAPS.Omnipod.low_reservoir_alert_units AAPS.Omnipod.automatically_acknowledge_alerts_enabled @@ -129,7 +131,9 @@ Show Suspend Delivery button in Omnipod tab DST/Time zone detection enabled Expiration reminder enabled - Hours before shutdown + Reminder at hours before shutdown + Expiration alarm enabled + Alarm at hours before shutdown Low reservoir alert enabled Number of units Automatically silence Pod alerts diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index 8f4e0fe4b9..2bd8f45313 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -22,6 +22,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definitio import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.BeepType import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.DeliveryStatus import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.ResponseType import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.state.CommandConfirmed import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.state.OmnipodDashPodStateManager @@ -84,6 +85,7 @@ import java.time.Duration import java.time.ZonedDateTime import java.util.Date import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton import kotlin.concurrent.thread @@ -481,6 +483,8 @@ class OmnipodDashPumpPlugin @Inject constructor( { if (it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown)) || + it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_enabled)) || + it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_hours_before_shutdown)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_enabled)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_units)) ) { @@ -1102,16 +1106,22 @@ class OmnipodDashPumpPlugin @Inject constructor( return when (customCommand) { is CommandSilenceAlerts -> silenceAlerts() + is CommandResumeDelivery -> resumeDelivery() + is CommandDeactivatePod -> deactivatePod() + is CommandHandleTimeChange -> handleTimeChange() + is CommandUpdateAlertConfiguration -> updateAlertConfiguration() + is CommandPlayTestBeep -> playTestBeep() + is CommandDisableSuspendAlerts -> disableSuspendAlerts() @@ -1214,14 +1224,18 @@ class OmnipodDashPumpPlugin @Inject constructor( private fun updateAlertConfiguration(): PumpEnactResult { val expirationReminderEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled, true) - val expirationHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 7) + val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 7) + val expirationAlarmEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_enabled, true) + val expirationAlarmHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_hours_before_shutdown, 8) val lowReservoirAlertEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_enabled, true) val lowReservoirAlertUnits = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_units, 10) when { podStateManager.sameAlertSettings( expirationReminderEnabled, - expirationHours, + expirationReminderHours, + expirationAlarmEnabled, + expirationAlarmHours, lowReservoirAlertEnabled, lowReservoirAlertUnits ) -> { @@ -1236,7 +1250,7 @@ class OmnipodDashPumpPlugin @Inject constructor( } val podLifeLeft = Duration.between(ZonedDateTime.now(), podStateManager.expiry) - val expiryAlertDelay = podLifeLeft.minus(Duration.ofHours(expirationHours.toLong())) + val expiryAlertDelay = podLifeLeft.minus(Duration.ofHours(expirationReminderHours.toLong())) if (expiryAlertDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, @@ -1245,6 +1259,24 @@ class OmnipodDashPumpPlugin @Inject constructor( ) PumpEnactResult(injector).success(false).enacted(false) } + val expiryAlarmDelay = podLifeLeft.minus(Duration.ofHours(expirationAlarmHours.toLong())) + if (expiryAlarmDelay.isNegative) { + aapsLogger.warn( + LTag.PUMPBTCOMM, + "updateAlertConfiguration negative " + + "expiryAlarmDuration=$expiryAlarmDelay" + ) + PumpEnactResult(injector).success(false).enacted(false) + } + val expiryImminentDelay = podLifeLeft.minus(Duration.ofHours(POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING)) + if (expiryImminentDelay.isNegative) { + aapsLogger.warn( + LTag.PUMPBTCOMM, + "updateAlertConfiguration negative " + + "expiryImminentDuration=$expiryImminentDelay" + ) + PumpEnactResult(injector).success(false).enacted(false) + } val alerts = listOf( AlertConfiguration( AlertType.LOW_RESERVOIR, @@ -1265,14 +1297,39 @@ class OmnipodDashPumpPlugin @Inject constructor( ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.EVERY_MINUTE_AND_EVERY_15_MIN + ), + AlertConfiguration( + AlertType.EXPIRATION, + enabled = expirationAlarmEnabled, + durationInMinutes = TimeUnit.HOURS.toMinutes(expirationAlarmHours.toLong()).toShort(), + autoOff = false, + AlertTrigger.TimerTrigger( + expiryAlarmDelay.toMinutes().toShort() + ), + BeepType.FOUR_TIMES_BIP_BEEP, + BeepRepetitionType.XXX3 + ), + AlertConfiguration( + AlertType.EXPIRATION_IMMINENT, + enabled = expirationAlarmEnabled, + durationInMinutes = 0, + autoOff = false, + AlertTrigger.TimerTrigger( + expiryImminentDelay.toMinutes().toShort() + ), + BeepType.FOUR_TIMES_BIP_BEEP, + BeepRepetitionType.XXX3 ) ) + return executeProgrammingCommand( historyEntry = history.createRecord(OmnipodCommandType.CONFIGURE_ALERTS), command = omnipodManager.programAlerts(alerts).ignoreElements(), post = podStateManager.updateExpirationAlertSettings( expirationReminderEnabled, - expirationHours + expirationReminderHours, + expirationAlarmEnabled, + expirationAlarmHours ).andThen( podStateManager.updateLowReservoirAlertSettings( lowReservoirAlertEnabled, @@ -1513,10 +1570,10 @@ class OmnipodDashPumpPlugin @Inject constructor( // Cancel TBR running on Pump return@defer observeNoActiveTempBasal() .concatWith(podStateManager.updateActiveCommand() - .map { handleCommandConfirmation(it) } - .ignoreElement()) + .map { handleCommandConfirmation(it) } + .ignoreElement()) } - + return@defer Completable.complete() } @@ -1537,10 +1594,13 @@ class OmnipodDashPumpPlugin @Inject constructor( return when (notificationType) { Notification.OMNIPOD_TBR_ALERTS -> sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_notification_uncertain_tbr_sound_enabled, true) + Notification.OMNIPOD_UNCERTAIN_SMB -> sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_notification_uncertain_smb_sound_enabled, true) + Notification.OMNIPOD_POD_SUSPENDED -> sp.getBoolean(R.string.key_omnipod_common_notification_delivery_suspended_sound_enabled, true) + else -> true } } diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManager.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManager.kt index c08f20418f..c99e72a47a 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManager.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManager.kt @@ -15,7 +15,7 @@ interface OmnipodDashManager { fun activatePodPart1(lowReservoirAlertTrigger: AlertTrigger.ReservoirVolumeTrigger?): Observable - fun activatePodPart2(basalProgram: BasalProgram, userConfiguredExpirationHours: Long?): Observable + fun activatePodPart2(basalProgram: BasalProgram, userConfiguredExpirationReminderHours: Long?, userConfiguredExpirationAlarmHours: Long?): Observable fun getStatus(type: ResponseType.StatusResponseType): Observable diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt index 8fd963dbba..1d3da0e982 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt @@ -23,11 +23,9 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definitio import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.BasalProgram import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.BeepRepetitionType import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.BeepType -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.MAX_POD_LIFETIME -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_ALERT_HOURS -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_ALERT_HOURS_DURATION -import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_IMMINENT_ALERT_HOURS +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT +import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodConstants.Companion.POD_PULSE_BOLUS_UNITS import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.PodStatus import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.definition.ProgramReminder @@ -161,9 +159,9 @@ class OmnipodDashManagerImpl @Inject constructor( // TODO move somewhere else val expectedResponseType = when (type) { ResponseType.StatusResponseType.DEFAULT_STATUS_RESPONSE -> DefaultStatusResponse::class - ResponseType.StatusResponseType.ALARM_STATUS -> AlarmStatusResponse::class + ResponseType.StatusResponseType.ALARM_STATUS -> AlarmStatusResponse::class - else -> return Observable.error(UnsupportedOperationException("No response type to class mapping for ${type.name}")) + else -> return Observable.error(UnsupportedOperationException("No response type to class mapping for ${type.name}")) } return Observable.defer { @@ -368,19 +366,19 @@ class OmnipodDashManagerImpl @Inject constructor( return observables.reversed() } - override fun activatePodPart2(basalProgram: BasalProgram, userConfiguredExpirationHours: Long?): + override fun activatePodPart2(basalProgram: BasalProgram, userConfiguredExpirationReminderHours: Long?, userConfiguredExpirationAlarmHours: Long?): Observable { return Observable.concat( observePodReadyForActivationPart2, observeConnectToPod, - observeActivationPart2Commands(basalProgram, userConfiguredExpirationHours) + observeActivationPart2Commands(basalProgram, userConfiguredExpirationReminderHours, userConfiguredExpirationAlarmHours) ).doOnComplete(ActivationProgressUpdater(ActivationProgress.COMPLETED)) .interceptPodEvents() } - private fun observeActivationPart2Commands(basalProgram: BasalProgram, userConfiguredExpirationHours: Long?): + private fun observeActivationPart2Commands(basalProgram: BasalProgram, userConfiguredExpirationReminderHours: Long?, userConfiguredExpirationAlarmHours: Long?): Observable { - val observables = createActivationPart2Observables(basalProgram, userConfiguredExpirationHours) + val observables = createActivationPart2Observables(basalProgram, userConfiguredExpirationReminderHours, userConfiguredExpirationAlarmHours) return if (observables.isEmpty()) { Observable.empty() @@ -391,7 +389,8 @@ class OmnipodDashManagerImpl @Inject constructor( private fun createActivationPart2Observables( basalProgram: BasalProgram, - userConfiguredExpirationHours: Long? + userConfiguredExpirationReminderHours: Long?, + userConfiguredExpirationAlarmHours: Long? ): List> { val observables = ArrayList>() @@ -422,32 +421,42 @@ class OmnipodDashManagerImpl @Inject constructor( if (podStateManager.activationProgress.isBefore(ActivationProgress.UPDATED_EXPIRATION_ALERTS)) { val podLifeLeft = Duration.between(ZonedDateTime.now(), podStateManager.expiry) + val expirationAlarmEnabled = userConfiguredExpirationAlarmHours != null && userConfiguredExpirationAlarmHours > 0 + val expirationAlarmDelay = podLifeLeft.minus( + Duration.ofHours(userConfiguredExpirationAlarmHours ?: POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT) + ) + val expirationImminnentDelay = podLifeLeft.minus( + Duration.ofHours(POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING) + ) + val alerts = mutableListOf( AlertConfiguration( AlertType.EXPIRATION, - enabled = true, - durationInMinutes = TimeUnit.HOURS.toMinutes(POD_EXPIRATION_ALERT_HOURS_DURATION).toShort(), + enabled = expirationAlarmEnabled, + durationInMinutes = TimeUnit.HOURS.toMinutes( + userConfiguredExpirationAlarmHours ?: POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT + ).toShort(), autoOff = false, AlertTrigger.TimerTrigger( - TimeUnit.HOURS.toMinutes(POD_EXPIRATION_ALERT_HOURS).toShort() - ), // FIXME use activation time + expirationAlarmDelay.toMinutes().toShort() + ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.XXX3 ), AlertConfiguration( AlertType.EXPIRATION_IMMINENT, - enabled = true, + enabled = expirationAlarmEnabled, durationInMinutes = 0, autoOff = false, AlertTrigger.TimerTrigger( - TimeUnit.HOURS.toMinutes(POD_EXPIRATION_IMMINENT_ALERT_HOURS).toShort() - ), // FIXME use activation time + expirationImminnentDelay.toMinutes().toShort() + ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.XXX4 ) ) val userExpiryAlertDelay = podLifeLeft.minus( - Duration.ofHours(userConfiguredExpirationHours ?: MAX_POD_LIFETIME.toHours() + 1) + Duration.ofHours(userConfiguredExpirationReminderHours ?: MAX_POD_LIFETIME.toHours() + 1) ) if (userExpiryAlertDelay.isNegative) { logger.warn( @@ -693,16 +702,16 @@ class OmnipodDashManagerImpl @Inject constructor( logger.debug(LTag.PUMP, "Intercepted PodEvent in OmnipodDashManagerImpl: ${event.javaClass.simpleName}") when (event) { - is PodEvent.AlreadyConnected -> { + is PodEvent.AlreadyConnected -> { } - is PodEvent.BluetoothConnected -> { + is PodEvent.BluetoothConnected -> { } - is PodEvent.Connected -> { + is PodEvent.Connected -> { } - is PodEvent.CommandSent -> { + is PodEvent.CommandSent -> { logger.debug(LTag.PUMP, "Command sent: ${event.command.commandType}") podStateManager.activeCommand?.let { if (it.sequence == event.command.sequenceNumber) { @@ -721,16 +730,16 @@ class OmnipodDashManagerImpl @Inject constructor( podStateManager.increaseMessageSequenceNumber() } - is PodEvent.ResponseReceived -> { + is PodEvent.ResponseReceived -> { podStateManager.increaseMessageSequenceNumber() handleResponse(event.response) } - is PodEvent.Paired -> { + is PodEvent.Paired -> { podStateManager.uniqueId = event.uniqueId.toLong() } - else -> { + else -> { // Do nothing } } @@ -738,11 +747,11 @@ class OmnipodDashManagerImpl @Inject constructor( private fun handleResponse(response: Response) { when (response) { - is VersionResponse -> { + is VersionResponse -> { podStateManager.updateFromVersionResponse(response) } - is SetUniqueIdResponse -> { + is SetUniqueIdResponse -> { podStateManager.updateFromSetUniqueIdResponse(response) } @@ -750,7 +759,7 @@ class OmnipodDashManagerImpl @Inject constructor( podStateManager.updateFromDefaultStatusResponse(response) } - is AlarmStatusResponse -> { + is AlarmStatusResponse -> { podStateManager.updateFromAlarmStatusResponse(response) } } diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/PodConstants.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/PodConstants.kt index 4a2124aace..cb406af20c 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/PodConstants.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/definition/PodConstants.kt @@ -6,12 +6,11 @@ class PodConstants { companion object { val MAX_POD_LIFETIME: Duration = Duration.ofHours(80) - // Expiration alert time in minutes since activation and duration in minutes - const val POD_EXPIRATION_ALERT_HOURS = 72L - const val POD_EXPIRATION_ALERT_HOURS_DURATION = 7L + // Expiration alert time in hours before lifetime end + const val POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT = 7L - // Expiration eminent alert time in minutes since activation - const val POD_EXPIRATION_IMMINENT_ALERT_HOURS = 79L + // Imminent expiration alert time in hours before lifetime end + const val POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING = 1L // Bolus & Priming units const val POD_PULSE_BOLUS_UNITS = 0.05 diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManager.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManager.kt index 05efe00d2a..36b66c433b 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManager.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManager.kt @@ -112,8 +112,20 @@ interface OmnipodDashPodStateManager { - after getPodStatus was successful(we have an up-to-date podStatus) */ fun recoverActivationFromPodStatus(): String? - fun sameAlertSettings(expirationReminderEnabled: Boolean, expirationHours: Int, lowReservoirAlertEnabled: Boolean, lowReservoirAlertUnits: Int): Boolean - fun updateExpirationAlertSettings(expirationReminderEnabled: Boolean, expirationHours: Int): Completable + fun sameAlertSettings( + expirationReminderEnabled: Boolean, + expirationReminderHours: Int, + expirationAlarmEnabled: Boolean, + expirationAlarmHours: Int, + lowReservoirAlertEnabled: Boolean, + lowReservoirAlertUnits: Int + ): Boolean + fun updateExpirationAlertSettings( + expirationReminderEnabled: Boolean, + expirationReminderHours: Int, + expirationAlarmEnabled: Boolean, + expirationAlarmHours: Int + ): Completable fun updateLowReservoirAlertSettings(lowReservoirAlertEnabled: Boolean, lowReservoirAlertUnits: Int): Completable data class ActiveCommand( diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt index 9eef681ae6..6b58c193bc 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt @@ -415,19 +415,25 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( override fun recoverActivationFromPodStatus(): String? { val newActivationProgress = when (podState.podStatus) { - PodStatus.FILLED -> + PodStatus.FILLED -> ActivationProgress.NOT_STARTED - PodStatus.UID_SET -> + + PodStatus.UID_SET -> ActivationProgress.SET_UNIQUE_ID - PodStatus.ENGAGING_CLUTCH_DRIVE, PodStatus.PRIMING -> + + PodStatus.ENGAGING_CLUTCH_DRIVE, PodStatus.PRIMING -> return "Busy" - PodStatus.CLUTCH_DRIVE_ENGAGED -> + + PodStatus.CLUTCH_DRIVE_ENGAGED -> ActivationProgress.PRIME_COMPLETED - PodStatus.BASAL_PROGRAM_SET -> + + PodStatus.BASAL_PROGRAM_SET -> ActivationProgress.PROGRAMMED_BASAL + PodStatus.RUNNING_ABOVE_MIN_VOLUME, PodStatus.RUNNING_BELOW_MIN_VOLUME -> ActivationProgress.CANNULA_INSERTED - else -> + + else -> null } newActivationProgress?.let { @@ -447,7 +453,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( val cmdConfirmation = getCommandConfirmationFromState() logger.info(LTag.PUMPCOMM, "Update active command with confirmation: $cmdConfirmation") when (cmdConfirmation) { - CommandSendingFailure -> { + CommandSendingFailure -> { podState.activeCommand = null source.onError( activeCommand.sendError @@ -463,7 +469,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( source.onComplete() } - CommandConfirmationDenied -> { + CommandConfirmationDenied -> { podState.activeCommand = null source.onSuccess(CommandConfirmed(activeCommand, false)) } @@ -474,7 +480,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( source.onSuccess(CommandConfirmed(activeCommand, true)) } - NoActiveCommand -> { + NoActiveCommand -> { source.onComplete() } } @@ -482,20 +488,30 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( override fun sameAlertSettings( expirationReminderEnabled: Boolean, - expirationHours: Int, + expirationReminderHours: Int, + expirationAlarmEnabled: Boolean, + expirationAlarmHours: Int, lowReservoirAlertEnabled: Boolean, lowReservoirAlertUnits: Int ): Boolean { return podState.expirationReminderEnabled == expirationReminderEnabled && - podState.expirationHours == expirationHours && + podState.expirationReminderHours == expirationReminderHours && + podState.expirationAlarmEnabled == expirationAlarmEnabled && + podState.expirationAlarmHours == expirationAlarmHours && podState.lowReservoirAlertEnabled == lowReservoirAlertEnabled && podState.lowReservoirAlertUnits == lowReservoirAlertUnits } - override fun updateExpirationAlertSettings(expirationReminderEnabled: Boolean, expirationHours: Int): - Completable = Completable.defer { + override fun updateExpirationAlertSettings( + expirationReminderEnabled: Boolean, + expirationReminderHours: Int, + expirationAlarmEnabled: Boolean, + expirationAlarmHours: Int + ): Completable = Completable.defer { podState.expirationReminderEnabled = expirationReminderEnabled - podState.expirationHours = expirationHours + podState.expirationReminderHours = expirationReminderHours + podState.expirationAlarmEnabled = expirationAlarmEnabled + podState.expirationAlarmHours = expirationAlarmHours Completable.complete() } @@ -520,15 +536,18 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( createdRealtime <= podState.lastStatusResponseReceived && sequence == podState.sequenceNumberOfLastProgrammingCommand -> CommandConfirmationSuccess + createdRealtime <= podState.lastStatusResponseReceived && sequence != podState.sequenceNumberOfLastProgrammingCommand -> CommandConfirmationDenied // no response received after this point - createdRealtime <= sentRealtime -> + createdRealtime <= sentRealtime -> CommandSendingNotConfirmed - createdRealtime > sentRealtime -> + + createdRealtime > sentRealtime -> CommandSendingFailure - else -> // this can't happen, see the previous two conditions + + else -> // this can't happen, see the previous two conditions NoActiveCommand } } ?: NoActiveCommand @@ -555,7 +574,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( podState.activeCommand = newCommand } - CommandSendingNotConfirmed -> { + CommandSendingNotConfirmed -> { val now = SystemClock.elapsedRealtime() val newCommand = podState.activeCommand?.copy( createdRealtime = now, @@ -565,7 +584,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( podState.lastStatusResponseReceived = 0 } - CommandSendingFailure, NoActiveCommand -> { + CommandSendingFailure, NoActiveCommand -> { podState.activeCommand = null podState.lastStatusResponseReceived = 0 } @@ -745,7 +764,9 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( var secondPrimeBolusVolume: Short? = null, var expirationReminderEnabled: Boolean? = null, - var expirationHours: Int? = null, + var expirationReminderHours: Int? = null, + var expirationAlarmEnabled: Boolean? = null, + var expirationAlarmHours: Int? = null, var lowReservoirAlertEnabled: Boolean? = null, var lowReservoirAlertUnits: Int? = null, diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt index 70c7aba9fd..9ab1d3b22b 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt @@ -67,16 +67,24 @@ class DashInsertCannulaViewModel @Inject constructor( basalProgram ) val expirationReminderEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled, true) - val expirationHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 9) + val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 9) - val expirationHoursBeforeShutdown = if (expirationReminderEnabled) - expirationHours.toLong() + val expirationReminderHoursBeforeShutdown = if (expirationReminderEnabled) + expirationReminderHours.toLong() else null - super.disposable += omnipodManager.activatePodPart2(basalProgram, expirationHoursBeforeShutdown) + val expirationAlarmEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_enabled, true) + val expirationAlarmHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_hours_before_shutdown, 8) + + val expirationAlarmHoursBeforeShutdown = if (expirationAlarmEnabled) + expirationAlarmHours.toLong() + else + null + + super.disposable += omnipodManager.activatePodPart2(basalProgram, expirationReminderHoursBeforeShutdown, expirationAlarmHoursBeforeShutdown) .ignoreElements() - .andThen(podStateManager.updateExpirationAlertSettings(expirationReminderEnabled, expirationHours)) + .andThen(podStateManager.updateExpirationAlertSettings(expirationReminderEnabled, expirationReminderHours, expirationAlarmEnabled, expirationAlarmHours)) .andThen( history.createRecord( OmnipodCommandType.INSERT_CANNULA, diff --git a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml index b32f397967..5e79a2f277 100644 --- a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml +++ b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml @@ -50,6 +50,22 @@ validate:minNumber="2" validate:testType="numericRange" /> + + + + Date: Thu, 24 Aug 2023 15:15:30 +0200 Subject: [PATCH 2/6] Dash: Explain expiration better --- pump/omnipod-common/src/main/res/values/strings.xml | 8 +++++--- .../src/main/res/xml/omnipod_dash_preferences.xml | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pump/omnipod-common/src/main/res/values/strings.xml b/pump/omnipod-common/src/main/res/values/strings.xml index c2d35f243a..821e0112ec 100644 --- a/pump/omnipod-common/src/main/res/values/strings.xml +++ b/pump/omnipod-common/src/main/res/values/strings.xml @@ -131,9 +131,11 @@ Show Suspend Delivery button in Omnipod tab DST/Time zone detection enabled Expiration reminder enabled - Reminder at hours before shutdown - Expiration alarm enabled - Alarm at hours before shutdown + When enabled the pod will beep when the specified time is reached + Reminder at hours before shutdown (80 Hours) + Expiration alert enabled + When enabled the pod will beep when the specified time is reached and every hour after that + Alert at hours before shutdown (80 Hours) Low reservoir alert enabled Number of units Automatically silence Pod alerts diff --git a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml index 5e79a2f277..a94485e6d5 100644 --- a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml +++ b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml @@ -37,7 +37,8 @@ + android:title="@string/omnipod_common_preferences_expiration_reminder_enabled" + android:summary="@string/omnipod_common_preferences_expiration_reminder_enabled_summary" /> + android:title="@string/omnipod_common_preferences_expiration_alarm_enabled" + android:summary="@string/omnipod_common_preferences_expiration_alarm_enabled_summary" /> Date: Tue, 29 Aug 2023 10:17:47 +0200 Subject: [PATCH 3/6] Dash: reminder relative to expiry, alert relative to pod shutdown --- .../src/main/res/values/strings.xml | 4 ++-- .../omnipod/dash/OmnipodDashPumpPlugin.kt | 19 ++++++++------- .../dash/driver/OmnipodDashManagerImpl.kt | 24 ++++++++++--------- .../action/DashInsertCannulaViewModel.kt | 2 +- .../main/res/xml/omnipod_dash_preferences.xml | 6 ++--- .../definition/OmnipodErosStorageKeys.java | 2 +- .../main/res/xml/omnipod_eros_preferences.xml | 4 ++-- 7 files changed, 32 insertions(+), 29 deletions(-) diff --git a/pump/omnipod-common/src/main/res/values/strings.xml b/pump/omnipod-common/src/main/res/values/strings.xml index 821e0112ec..dd0cd0208f 100644 --- a/pump/omnipod-common/src/main/res/values/strings.xml +++ b/pump/omnipod-common/src/main/res/values/strings.xml @@ -8,7 +8,7 @@ AAPS.Omnipod.suspend_delivery_button_enabled AAPS.Omnipod.time_change_enabled AAPS.Omnipod.expiration_reminder_enabled - AAPS.Omnipod.expiration_reminder_hours_before_shutdown + AAPS.Omnipod.expiration_reminder_hours_before_expiry AAPS.Omnipod.expiration_alarm_enabled AAPS.Omnipod.expiration_alarm_hours_before_shutdown AAPS.Omnipod.low_reservoir_alert_enabled @@ -132,7 +132,7 @@ DST/Time zone detection enabled Expiration reminder enabled When enabled the pod will beep when the specified time is reached - Reminder at hours before shutdown (80 Hours) + Reminder at hours before expiry (72 Hours) Expiration alert enabled When enabled the pod will beep when the specified time is reached and every hour after that Alert at hours before shutdown (80 Hours) diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index 2bd8f45313..c1e12cecd2 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -482,7 +482,7 @@ class OmnipodDashPumpPlugin @Inject constructor( .subscribe( { if (it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled)) || - it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown)) || + it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_expiry)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_enabled)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_hours_before_shutdown)) || it.isChanged(rh.gs(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_enabled)) || @@ -1224,7 +1224,7 @@ class OmnipodDashPumpPlugin @Inject constructor( private fun updateAlertConfiguration(): PumpEnactResult { val expirationReminderEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled, true) - val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 7) + val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_expiry, 9) val expirationAlarmEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_enabled, true) val expirationAlarmHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_alarm_hours_before_shutdown, 8) val lowReservoirAlertEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_enabled, true) @@ -1250,16 +1250,17 @@ class OmnipodDashPumpPlugin @Inject constructor( } val podLifeLeft = Duration.between(ZonedDateTime.now(), podStateManager.expiry) - val expiryAlertDelay = podLifeLeft.minus(Duration.ofHours(expirationReminderHours.toLong())) - if (expiryAlertDelay.isNegative) { + val expiryReminderDelay = podLifeLeft.minus(Duration.ofHours(expirationReminderHours.toLong())) + if (expiryReminderDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, "updateAlertConfiguration negative " + - "expiryAlertDuration=$expiryAlertDelay" + "expiryAlertDuration=$expiryReminderDelay" ) PumpEnactResult(injector).success(false).enacted(false) } - val expiryAlarmDelay = podLifeLeft.minus(Duration.ofHours(expirationAlarmHours.toLong())) + // expiry Alarm Delay, add 8 hours (grace period) + val expiryAlarmDelay = podLifeLeft.minus(Duration.ofHours(expirationAlarmHours.toLong())).plus(Duration.ofHours(8)) if (expiryAlarmDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, @@ -1268,7 +1269,7 @@ class OmnipodDashPumpPlugin @Inject constructor( ) PumpEnactResult(injector).success(false).enacted(false) } - val expiryImminentDelay = podLifeLeft.minus(Duration.ofHours(POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING)) + val expiryImminentDelay = podLifeLeft.minus(Duration.ofHours(POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING)).plus(Duration.ofHours(8)) if (expiryImminentDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, @@ -1293,7 +1294,7 @@ class OmnipodDashPumpPlugin @Inject constructor( durationInMinutes = 0, autoOff = false, AlertTrigger.TimerTrigger( - expiryAlertDelay.toMinutes().toShort() + expiryReminderDelay.toMinutes().toShort() ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.EVERY_MINUTE_AND_EVERY_15_MIN @@ -1301,7 +1302,7 @@ class OmnipodDashPumpPlugin @Inject constructor( AlertConfiguration( AlertType.EXPIRATION, enabled = expirationAlarmEnabled, - durationInMinutes = TimeUnit.HOURS.toMinutes(expirationAlarmHours.toLong()).toShort(), + durationInMinutes = TimeUnit.HOURS.toMinutes((expirationAlarmHours - 1).toLong()).toShort(), autoOff = false, AlertTrigger.TimerTrigger( expiryAlarmDelay.toMinutes().toShort() diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt index 1d3da0e982..b3080dd2b3 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/OmnipodDashManagerImpl.kt @@ -424,18 +424,19 @@ class OmnipodDashManagerImpl @Inject constructor( val expirationAlarmEnabled = userConfiguredExpirationAlarmHours != null && userConfiguredExpirationAlarmHours > 0 val expirationAlarmDelay = podLifeLeft.minus( Duration.ofHours(userConfiguredExpirationAlarmHours ?: POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT) - ) - val expirationImminnentDelay = podLifeLeft.minus( + ).plus(Duration.ofHours(8)) // Add 8 hours for grace period + + val expirationImminentDelay = podLifeLeft.minus( Duration.ofHours(POD_EXPIRATION_IMMINENT_ALERT_HOURS_REMAINING) - ) + ).plus(Duration.ofHours(8)) // Add 8 hours for grace period val alerts = mutableListOf( AlertConfiguration( AlertType.EXPIRATION, enabled = expirationAlarmEnabled, - durationInMinutes = TimeUnit.HOURS.toMinutes( + durationInMinutes = (TimeUnit.HOURS.toMinutes( userConfiguredExpirationAlarmHours ?: POD_EXPIRATION_ALERT_HOURS_REMAINING_DEFAULT - ).toShort(), + ) - 60).toShort(), autoOff = false, AlertTrigger.TimerTrigger( expirationAlarmDelay.toMinutes().toShort() @@ -449,30 +450,31 @@ class OmnipodDashManagerImpl @Inject constructor( durationInMinutes = 0, autoOff = false, AlertTrigger.TimerTrigger( - expirationImminnentDelay.toMinutes().toShort() + expirationImminentDelay.toMinutes().toShort() ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.XXX4 ) ) - val userExpiryAlertDelay = podLifeLeft.minus( + val userExpiryReminderEnabled = userConfiguredExpirationReminderHours != null && userConfiguredExpirationReminderHours > 0 + val userExpiryReminderDelay = podLifeLeft.minus( Duration.ofHours(userConfiguredExpirationReminderHours ?: MAX_POD_LIFETIME.toHours() + 1) ) - if (userExpiryAlertDelay.isNegative) { + if (userExpiryReminderDelay.isNegative) { logger.warn( LTag.PUMPBTCOMM, "createActivationPart2Observables negative " + - "expiryAlertDuration=$userExpiryAlertDelay" + "expiryAlertDuration=$userExpiryReminderDelay" ) } else { alerts.add( AlertConfiguration( AlertType.USER_SET_EXPIRATION, - enabled = true, + enabled = userExpiryReminderEnabled, durationInMinutes = 0, autoOff = false, AlertTrigger.TimerTrigger( - userExpiryAlertDelay.toMinutes().toShort() + userExpiryReminderDelay.toMinutes().toShort() ), BeepType.FOUR_TIMES_BIP_BEEP, BeepRepetitionType.EVERY_MINUTE_AND_EVERY_15_MIN diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt index 9ab1d3b22b..18c4767350 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/ui/wizard/activation/viewmodel/action/DashInsertCannulaViewModel.kt @@ -67,7 +67,7 @@ class DashInsertCannulaViewModel @Inject constructor( basalProgram ) val expirationReminderEnabled = sp.getBoolean(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled, true) - val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown, 9) + val expirationReminderHours = sp.getInt(info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_expiry, 9) val expirationReminderHoursBeforeShutdown = if (expirationReminderEnabled) expirationReminderHours.toLong() diff --git a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml index a94485e6d5..08bb260419 100644 --- a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml +++ b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml @@ -45,8 +45,8 @@ android:dependency="@string/key_omnipod_common_expiration_reminder_enabled" android:digits="0123456789" android:inputType="number" - android:key="@string/key_omnipod_common_expiration_reminder_hours_before_shutdown" - android:title="@string/omnipod_common_preferences_expiration_reminder_hours_before_shutdown" + android:key="@string/key_omnipod_common_expiration_reminder_hours_before_expiry" + android:title="@string/omnipod_common_preferences_expiration_reminder_hours_before_expiry" validate:maxNumber="24" validate:minNumber="2" validate:testType="numericRange" /> @@ -64,7 +64,7 @@ android:inputType="number" android:key="@string/key_omnipod_common_expiration_alarm_hours_before_shutdown" android:title="@string/omnipod_common_preferences_expiration_alarm_hours_before_shutdown" - validate:maxNumber="24" + validate:maxNumber="8" validate:minNumber="1" validate:testType="numericRange" /> diff --git a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/definition/OmnipodErosStorageKeys.java b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/definition/OmnipodErosStorageKeys.java index 1f4ce595ab..88826204b1 100644 --- a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/definition/OmnipodErosStorageKeys.java +++ b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/definition/OmnipodErosStorageKeys.java @@ -14,7 +14,7 @@ public class OmnipodErosStorageKeys { public static final int PULSE_LOG_BUTTON_ENABLED = R.string.key_omnipod_eros_pulse_log_button_enabled; public static final int TIME_CHANGE_EVENT_ENABLED = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_time_change_event_enabled; public static final int EXPIRATION_REMINDER_ENABLED = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_enabled; - public static final int EXPIRATION_REMINDER_HOURS_BEFORE_SHUTDOWN = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_shutdown; + public static final int EXPIRATION_REMINDER_HOURS_BEFORE_SHUTDOWN = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_expiration_reminder_hours_before_expiry; public static final int LOW_RESERVOIR_ALERT_ENABLED = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_enabled; public static final int LOW_RESERVOIR_ALERT_UNITS = info.nightscout.androidaps.plugins.pump.omnipod.common.R.string.key_omnipod_common_low_reservoir_alert_units; public static final int NOTIFICATION_UNCERTAIN_TBR_SOUND_ENABLED = R.string.key_omnipod_eros_notification_uncertain_tbr_sound_enabled; diff --git a/pump/omnipod-eros/src/main/res/xml/omnipod_eros_preferences.xml b/pump/omnipod-eros/src/main/res/xml/omnipod_eros_preferences.xml index 1aa8ce5ed7..53c34d0905 100644 --- a/pump/omnipod-eros/src/main/res/xml/omnipod_eros_preferences.xml +++ b/pump/omnipod-eros/src/main/res/xml/omnipod_eros_preferences.xml @@ -76,8 +76,8 @@ android:dependency="@string/key_omnipod_common_expiration_reminder_enabled" android:digits="0123456789" android:inputType="number" - android:key="@string/key_omnipod_common_expiration_reminder_hours_before_shutdown" - android:title="@string/omnipod_common_preferences_expiration_reminder_hours_before_shutdown" + android:key="@string/key_omnipod_common_expiration_reminder_hours_before_expiry" + android:title="@string/omnipod_common_preferences_expiration_reminder_hours_before_expiry" validate:maxNumber="24" validate:minNumber="2" validate:testType="numericRange" /> From 3e9be586d14875eafda187255abdad4ec400f832 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Tue, 29 Aug 2023 18:09:01 +0200 Subject: [PATCH 4/6] Dash: Update expiration alarm summary --- pump/omnipod-common/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pump/omnipod-common/src/main/res/values/strings.xml b/pump/omnipod-common/src/main/res/values/strings.xml index dd0cd0208f..d2ecea3ce0 100644 --- a/pump/omnipod-common/src/main/res/values/strings.xml +++ b/pump/omnipod-common/src/main/res/values/strings.xml @@ -134,7 +134,7 @@ When enabled the pod will beep when the specified time is reached Reminder at hours before expiry (72 Hours) Expiration alert enabled - When enabled the pod will beep when the specified time is reached and every hour after that + When enabled the pod will beep when the specified time is reached and 1 hour before shutdown Alert at hours before shutdown (80 Hours) Low reservoir alert enabled Number of units From 5766738f9bad944b6295810e04b66a03bba7a641 Mon Sep 17 00:00:00 2001 From: jbr7rr <> Date: Thu, 31 Aug 2023 08:19:30 +0200 Subject: [PATCH 5/6] Dash: Expiration reminder defaults and range to PDM values --- .../src/main/res/xml/omnipod_dash_preferences.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml index 08bb260419..cf0ae782a8 100644 --- a/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml +++ b/pump/omnipod-dash/src/main/res/xml/omnipod_dash_preferences.xml @@ -41,14 +41,14 @@ android:summary="@string/omnipod_common_preferences_expiration_reminder_enabled_summary" /> Date: Thu, 31 Aug 2023 08:45:03 +0200 Subject: [PATCH 6/6] Fix PR code smells --- .../plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt index c1e12cecd2..dc3f00fe96 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/OmnipodDashPumpPlugin.kt @@ -1254,8 +1254,7 @@ class OmnipodDashPumpPlugin @Inject constructor( if (expiryReminderDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, - "updateAlertConfiguration negative " + - "expiryAlertDuration=$expiryReminderDelay" + "updateAlertConfiguration negative expiryAlertDuration=$expiryReminderDelay" ) PumpEnactResult(injector).success(false).enacted(false) } @@ -1264,8 +1263,7 @@ class OmnipodDashPumpPlugin @Inject constructor( if (expiryAlarmDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, - "updateAlertConfiguration negative " + - "expiryAlarmDuration=$expiryAlarmDelay" + "updateAlertConfiguration negative expiryAlarmDuration=$expiryAlarmDelay" ) PumpEnactResult(injector).success(false).enacted(false) } @@ -1273,8 +1271,7 @@ class OmnipodDashPumpPlugin @Inject constructor( if (expiryImminentDelay.isNegative) { aapsLogger.warn( LTag.PUMPBTCOMM, - "updateAlertConfiguration negative " + - "expiryImminentDuration=$expiryImminentDelay" + "updateAlertConfiguration negative expiryImminentDuration=$expiryImminentDelay" ) PumpEnactResult(injector).success(false).enacted(false) }