diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt index 10de0f95cd..2e0c694f93 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodFragment.kt @@ -23,7 +23,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodStateManager import info.nightscout.androidaps.plugins.pump.omnipod.dialogs.PodManagementActivity import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager -import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodAcknowledgeAlertsChanged import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodRefreshButtonState import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil @@ -163,10 +162,6 @@ class OmnipodFragment : DaggerFragment() { .toObservable(EventOmnipodPumpValuesChanged::class.java) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ updateOmipodUiElements() }, { fabricPrivacy.logException(it) }) - disposables += rxBus - .toObservable(EventOmnipodAcknowledgeAlertsChanged::class.java) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ updateAcknowledgeAlertsUiElements() }, { fabricPrivacy.logException(it) }) disposables += rxBus .toObservable(EventPreferenceChange::class.java) .observeOn(Schedulers.io()) 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 b5fbf39a48..d232af7976 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 @@ -11,13 +11,13 @@ import android.os.SystemClock; import androidx.annotation.NonNull; import org.jetbrains.annotations.NotNull; +import org.joda.time.DateTime; +import org.joda.time.Duration; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; -import java.util.GregorianCalendar; import java.util.List; import javax.inject.Inject; @@ -53,8 +53,6 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNo import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.general.overview.notifications.Notification; -import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus; -import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; @@ -70,7 +68,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCustomActionT import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodPumpPluginInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodStatusRequest; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodStateManager; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUITask; @@ -99,7 +96,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, private final PodStateManager podStateManager; private final RileyLinkServiceData rileyLinkServiceData; private final ServiceTaskExecutor serviceTaskExecutor; - private final OmnipodPumpStatus omnipodPumpStatus; private final AapsOmnipodManager aapsOmnipodManager; private final OmnipodUtil omnipodUtil; private final AAPSLogger aapsLogger; @@ -129,10 +125,9 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, private RileyLinkOmnipodService rileyLinkOmnipodService; private boolean busy = false; private int timeChangeRetries; - private Profile currentProfile; private long nextPodCheck; private boolean sentIdToFirebase; - private long lastConnectionMillis; + private long lastConnectionTimeMillis; @Inject public OmnipodPumpPlugin( @@ -143,7 +138,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, ResourceHelper resourceHelper, ActivePluginProvider activePlugin, SP sp, - OmnipodPumpStatus omnipodPumpStatus, PodStateManager podStateManager, AapsOmnipodManager aapsOmnipodManager, CommandQueueProvider commandQueue, @@ -172,7 +166,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, this.podStateManager = podStateManager; this.rileyLinkServiceData = rileyLinkServiceData; this.serviceTaskExecutor = serviceTaskExecutor; - this.omnipodPumpStatus = omnipodPumpStatus; this.aapsOmnipodManager = aapsOmnipodManager; this.omnipodUtil = omnipodUtil; @@ -222,7 +215,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, // When PodStateManager is created, which causes an IllegalArgumentException for DateTimeZones not being recognized podStateManager.loadPodState(); - lastConnectionMillis = sp.getLong( + lastConnectionTimeMillis = sp.getLong( RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L); Intent intent = new Intent(context, RileyLinkOmnipodService.class); @@ -312,17 +305,37 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, } } - public PumpStatus getPumpStatusData() { - return this.omnipodPumpStatus; - } - - private boolean isServiceSet() { - return rileyLinkOmnipodService != null; + // TODO is this correct? + @Override + public boolean isInitialized() { + return isConnected() && podStateManager.isPodActivationCompleted(); } @Override - public boolean isInitialized() { - return isServiceSet() && isInitialized; + public boolean isConnected() { + return rileyLinkOmnipodService != null && rileyLinkOmnipodService.isInitialized(); + } + + @Override + public boolean isConnecting() { + return rileyLinkOmnipodService == null || !rileyLinkOmnipodService.isInitialized(); + } + + @Override + public boolean isHandshakeInProgress() { + if (displayConnectionMessages) + aapsLogger.debug(LTag.PUMP, "isHandshakeInProgress [OmnipodPumpPlugin] - default (empty) implementation."); + return false; + } + + // TODO is this correct? + @Override + public boolean isBusy() { + return busy || rileyLinkOmnipodService == null || !podStateManager.isPodRunning(); + } + + @Override public void setBusy(boolean busy) { + this.busy = busy; } @Override @@ -331,16 +344,24 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, } @Override - public boolean isBusy() { - if (isServiceSet()) { - return busy || !podStateManager.isPodRunning(); - } - - return false; + public void finishHandshaking() { + if (displayConnectionMessages) + aapsLogger.debug(LTag.PUMP, "finishHandshaking [OmnipodPumpPlugin] - default (empty) implementation."); } - @Override public void setBusy(boolean busy) { - this.busy = busy; + @Override public void connect(String reason) { + if (displayConnectionMessages) + aapsLogger.debug(LTag.PUMP, "connect (reason={}) [PumpPluginAbstract] - default (empty) implementation." + reason); + } + + @Override public void disconnect(String reason) { + if (displayConnectionMessages) + aapsLogger.debug(LTag.PUMP, "disconnect (reason={}) [PumpPluginAbstract] - default (empty) implementation." + reason); + } + + @Override public void stopConnecting() { + if (displayConnectionMessages) + aapsLogger.debug(LTag.PUMP, "stopConnecting [PumpPluginAbstract] - default (empty) implementation."); } @Override @@ -371,7 +392,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, * For getting the last time a command was successfully executed, use PodStateManager.getLastSuccessfulCommunication */ @Override public long getLastConnectionTimeMillis() { - return omnipodPumpStatus.lastConnection; + return lastConnectionTimeMillis; } // Required by RileyLinkPumpDevice interface. @@ -383,45 +404,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, * For setting the last time a command was successfully executed, use PodStateManager.setLastSuccessfulCommunication */ @Override public void setLastCommunicationToNow() { - omnipodPumpStatus.setLastCommunicationToNow(); - } - - @Override - public boolean isConnected() { - return isServiceSet() && rileyLinkOmnipodService.isInitialized(); - } - - @Override - public boolean isConnecting() { - return !isServiceSet() || !rileyLinkOmnipodService.isInitialized(); - } - - @Override - public boolean isHandshakeInProgress() { - if (displayConnectionMessages) - aapsLogger.debug(LTag.PUMP, "isHandshakeInProgress [OmnipodPumpPlugin] - default (empty) implementation."); - return false; - } - - @Override - public void finishHandshaking() { - if (displayConnectionMessages) - aapsLogger.debug(LTag.PUMP, "finishHandshaking [OmnipodPumpPlugin] - default (empty) implementation."); - } - - @Override public void connect(String reason) { - if (displayConnectionMessages) - aapsLogger.debug(LTag.PUMP, "connect (reason={}) [PumpPluginAbstract] - default (empty) implementation." + reason); - } - - @Override public void disconnect(String reason) { - if (displayConnectionMessages) - aapsLogger.debug(LTag.PUMP, "disconnect (reason={}) [PumpPluginAbstract] - default (empty) implementation." + reason); - } - - @Override public void stopConnecting() { - if (displayConnectionMessages) - aapsLogger.debug(LTag.PUMP, "stopConnecting [PumpPluginAbstract] - default (empty) implementation."); + lastConnectionTimeMillis = System.currentTimeMillis(); } // TODO seems that this abused to squeeze commands in the queue @@ -490,14 +473,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, @NotNull @Override public PumpEnactResult setNewBasalProfile(Profile profile) { - // this shouldn't be needed, but let's do check if profile setting we are setting is same as current one - if (this.currentProfile != null && this.currentProfile.areProfileBasalPatternsSame(profile)) { - return new PumpEnactResult(getInjector()) // - .success(true) // - .enacted(false) // - .comment(resourceHelper.gs(R.string.omnipod_cmd_basal_profile_not_set_is_same)); - } - setRefreshButtonEnabled(false); OmnipodUITask responseTask = getDeviceCommandExecutor().executeCommand(OmnipodCommandType.SetBasalProfile, @@ -508,8 +483,6 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, aapsLogger.info(LTag.PUMP, "Basal Profile was set: " + result.success); if (result.success) { - this.currentProfile = profile; - Notification notification = new Notification(Notification.PROFILE_SET_OK, resourceHelper.gs(R.string.profile_set_ok), Notification.INFO, 60); @@ -526,38 +499,42 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, @Override public boolean isThisProfileSet(Profile profile) { - // TODO status was not yet read from pod - // TODO maybe not possible, need to see how we will handle that - if (currentProfile == null) { - this.currentProfile = profile; - return true; + if (!podStateManager.isPodActivationCompleted()) { + return true; // Return true, because otherwise AAPS will try setting a Basal schedule while no Pod is active } - - return (currentProfile.areProfileBasalPatternsSame(profile)); + return podStateManager.getBasalSchedule().equals(AapsOmnipodManager.mapProfileToBasalSchedule(profile)); } @Override public long lastDataTime() { - return lastConnectionMillis; + return lastConnectionTimeMillis; } @Override public double getBaseBasalRate() { - if (currentProfile != null) { - int hour = (new GregorianCalendar()).get(Calendar.HOUR_OF_DAY); - return currentProfile.getBasalTimeFromMidnight(DateTimeUtil.getTimeInS(hour * 60)); - } else { + if (!podStateManager.isPodRunning()) { return 0.0d; } + + DateTime now = DateTime.now(); + Duration offset = new Duration(now.withTimeAtStartOfDay(), now); + return podStateManager.getBasalSchedule().rateAt(offset); } @Override public double getReservoirLevel() { - return omnipodPumpStatus.reservoirRemainingUnits; + if (!podStateManager.isPodRunning()) { + return 0.0d; + } + Double reservoirLevel = podStateManager.getReservoirLevel(); + return reservoirLevel == null ? 75.0 : reservoirLevel; } @Override public int getBatteryLevel() { + if (!podStateManager.isPodRunning()) { + return 0; + } return 75; } @@ -605,21 +582,22 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, // if enforceNew===true current temp basal is canceled and new TBR set (duration is prolonged), // if false and the same rate is requested enacted=false and success=true is returned and TBR is not changed @Override - public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, Profile profile, boolean enforceNew) { + public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer + durationInMinutes, Profile profile, boolean enforceNew) { setRefreshButtonEnabled(false); aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute: rate: {}, duration={}", absoluteRate, durationInMinutes); // read current TBR - TempBasalPair tbrCurrent = readTBR(); + TemporaryBasal tbrCurrent = readTBR(); if (tbrCurrent != null) { aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute: Current Basal: duration: {} min, rate={}", - tbrCurrent.getDurationMinutes(), tbrCurrent.getInsulinRate()); + tbrCurrent.durationInMinutes, tbrCurrent.absoluteRate); } if (tbrCurrent != null && !enforceNew) { - if (Round.isSame(tbrCurrent.getInsulinRate(), absoluteRate)) { + if (Round.isSame(tbrCurrent.absoluteRate, absoluteRate)) { aapsLogger.info(LTag.PUMP, "setTempBasalAbsolute - No enforceNew and same rate. Exiting."); finishAction("TBR"); return new PumpEnactResult(getInjector()).success(true).enacted(false); @@ -642,12 +620,14 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, return result; } - @NotNull @Override public PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes, Profile profile, boolean enforceNew) { + @NotNull @Override public PumpEnactResult setTempBasalPercent(Integer percent, Integer + durationInMinutes, Profile profile, boolean enforceNew) { aapsLogger.debug(LTag.PUMP, "setTempBasalPercent [OmnipodPumpPlugin] - Not implemented."); return getOperationNotSupportedWithCustomText(info.nightscout.androidaps.core.R.string.pump_operation_not_supported_by_pump_driver); } - @NotNull @Override public PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes) { + @NotNull @Override public PumpEnactResult setExtendedBolus(Double insulin, Integer + durationInMinutes) { aapsLogger.debug(LTag.PUMP, "setExtendedBolus [OmnipodPumpPlugin] - Not implemented."); return getOperationNotSupportedWithCustomText(info.nightscout.androidaps.core.R.string.pump_operation_not_supported_by_pump_driver); } @@ -656,7 +636,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, public PumpEnactResult cancelTempBasal(boolean enforceNew) { setRefreshButtonEnabled(false); - TempBasalPair tbrCurrent = readTBR(); + TemporaryBasal tbrCurrent = readTBR(); if (tbrCurrent == null) { aapsLogger.info(LTag.PUMP, "cancelTempBasal - TBR already canceled."); @@ -688,10 +668,11 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, return getOperationNotSupportedWithCustomText(info.nightscout.androidaps.core.R.string.pump_operation_not_supported_by_pump_driver); } + // TODO improve (i8n and more) @NonNull @Override public JSONObject getJSONStatus(Profile profile, String profileName, String version) { - if ((getPumpStatusData().lastConnection + 60 * 60 * 1000L) < System.currentTimeMillis()) { + if (!podStateManager.isPodActivationCompleted() || lastConnectionTimeMillis + 60 * 60 * 1000L < System.currentTimeMillis()) { return new JSONObject(); } @@ -700,15 +681,18 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, JSONObject status = new JSONObject(); JSONObject extended = new JSONObject(); try { - battery.put("percent", getPumpStatusData().batteryRemaining); - status.put("status", getPumpStatusData().pumpStatusType != null ? getPumpStatusData().pumpStatusType.getStatus() : "normal"); + status.put("status", podStateManager.isPodRunning() ? "normal" : "error"); + status.put("timestamp", DateUtil.toISOString(new Date())); + + battery.put("percent", getBatteryLevel()); + extended.put("Version", version); try { extended.put("ActiveProfile", profileName); } catch (Exception ignored) { } - TemporaryBasal tb = activePlugin.getActiveTreatments().getTempBasalFromHistory(System.currentTimeMillis()); + TemporaryBasal tb = activePlugin.getActiveTreatments().getRealTempBasalFromHistory(System.currentTimeMillis()); if (tb != null) { extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(System.currentTimeMillis(), profile)); @@ -728,10 +712,10 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, pump.put("battery", battery); pump.put("status", status); pump.put("extended", extended); - pump.put("reservoir", getPumpStatusData().reservoirRemainingUnits); + pump.put("reservoir", getReservoirLevel()); pump.put("clock", DateUtil.toISOString(new Date())); } catch (JSONException e) { - aapsLogger.error("Unhandled exception", e); + aapsLogger.error(LTag.PUMP, "Unhandled exception", e); } return pump; } @@ -758,15 +742,18 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, // FIXME i18n, null checks: iob, TDD @NonNull @Override public String shortStatus(boolean veryShort) { + if (!podStateManager.isPodActivationCompleted()) { + return "No active pod"; + } String ret = ""; - if (getPumpStatusData().lastConnection != 0) { - long agoMsec = System.currentTimeMillis() - getPumpStatusData().lastConnection; + if (lastConnectionTimeMillis != 0) { + long agoMsec = System.currentTimeMillis() - lastConnectionTimeMillis; int agoMin = (int) (agoMsec / 60d / 1000d); ret += "LastConn: " + agoMin + " min ago\n"; } - if (getPumpStatusData().lastBolusTime != null && getPumpStatusData().lastBolusTime.getTime() != 0) { - ret += "LastBolus: " + DecimalFormatter.to2Decimal(getPumpStatusData().lastBolusAmount) + "U @" + // - android.text.format.DateFormat.format("HH:mm", getPumpStatusData().lastBolusTime) + "\n"; + if (podStateManager.getLastBolusStartTime() != null) { + ret += "LastBolus: " + DecimalFormatter.to2Decimal(podStateManager.getLastBolusAmount()) + "U @" + // + android.text.format.DateFormat.format("HH:mm", podStateManager.getLastBolusStartTime().toDate()) + "\n"; } TemporaryBasal activeTemp = activePlugin.getActiveTreatments().getRealTempBasalFromHistory(System.currentTimeMillis()); if (activeTemp != null) { @@ -777,9 +764,8 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, if (activeExtendedBolus != null) { ret += "Extended: " + activeExtendedBolus.toString() + "\n"; } - ret += "IOB: " + getPumpStatusData().iob + "U\n"; - ret += "Reserv: " + DecimalFormatter.to0Decimal(getPumpStatusData().reservoirRemainingUnits) + "U\n"; - ret += "Batt: " + getPumpStatusData().batteryRemaining + "\n"; + ret += "Reserv: " + DecimalFormatter.to0Decimal(getReservoirLevel()) + "U\n"; + ret += "Batt: " + getBatteryLevel(); return ret; } @@ -830,17 +816,18 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, @Override public boolean isUnreachableAlertTimeoutExceeded(long unreachableTimeoutMilliseconds) { long rileyLinkInitializationTimeout = 3 * 60 * 1000L; // 3 minutes - if (podStateManager.isPodRunning() && podStateManager.getLastSuccessfulCommunication() != null) { // Null check for backwards compatibility + if (podStateManager.isPodActivationCompleted() && podStateManager.getLastSuccessfulCommunication() != null) { // Null check for backwards compatibility if (podStateManager.getLastSuccessfulCommunication().getMillis() + unreachableTimeoutMilliseconds < System.currentTimeMillis()) { + // TODO update comment // We exceeded the alert threshold, and either our last command failed or we cannot reach the RL // We should show an alert - return (podStateManager.getLastFailedCommunication() != null && podStateManager.getLastSuccessfulCommunication().isBefore(podStateManager.getLastFailedCommunication())) || + // Don't trigger an alert when we exceeded the thresholds, but the last communication was successful & the RL is reachable + // This happens when we simply didn't need to send any commands to the pump + return !podStateManager.isPodRunning() || + (podStateManager.getLastFailedCommunication() != null && podStateManager.getLastSuccessfulCommunication().isBefore(podStateManager.getLastFailedCommunication())) || rileyLinkServiceData.rileyLinkServiceState.isError() || // The below clause is a hack for working around the RL service state forever staying in connecting state on startup if the RL is switched off / unreachable (rileyLinkServiceData.getRileyLinkServiceState().isConnecting() && rileyLinkServiceData.getLastServiceStateChange() + rileyLinkInitializationTimeout < System.currentTimeMillis()); - - // Don't trigger an alert when we exceeded the thresholds, but the last communication was successful & the RL is reachable - // This happens when we simply didn't need to send any commands to the pump } } @@ -875,6 +862,7 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, rxBus.send(new EventOmnipodRefreshButtonState(enabled)); } + // FIXME strange private void initializePump(boolean realInit) { setRefreshButtonEnabled(false); @@ -937,16 +925,8 @@ public class OmnipodPumpPlugin extends PumpPluginBase implements PumpInterface, sp.putLong(statsKey, currentCount); } - protected TempBasalPair readTBR() { - // TODO we can do it like this or read status from pod ?? - if (omnipodPumpStatus.tempBasalEnd < System.currentTimeMillis()) { - // TBR done - omnipodPumpStatus.clearTemporaryBasal(); - - return null; - } - - return omnipodPumpStatus.getTemporaryBasal(); + protected TemporaryBasal readTBR() { + return activePlugin.getActiveTreatments().getTempBasalFromHistory(System.currentTimeMillis()); } protected void finishAction(String overviewKey) { diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalSchedule.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalSchedule.java index 140c584c0b..788e31e81f 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalSchedule.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalSchedule.java @@ -2,9 +2,11 @@ package info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule; import org.joda.time.Duration; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; public class BasalSchedule { private final List entries; @@ -15,7 +17,7 @@ public class BasalSchedule { } else if (!entries.get(0).getStartTime().isEqual(Duration.ZERO)) { throw new IllegalArgumentException("First basal schedule entry should have 0 offset"); } - this.entries = entries; + this.entries = new ArrayList<>(entries); } public double rateAt(Duration offset) { @@ -91,6 +93,17 @@ public class BasalSchedule { '}'; } + @Override public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BasalSchedule that = (BasalSchedule) o; + return entries.equals(that.entries); + } + + @Override public int hashCode() { + return Objects.hash(entries); + } + public static class BasalScheduleDurationEntry { private final double rate; private final Duration duration; diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleEntry.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleEntry.java index f8065e0f4b..c409ad56e7 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleEntry.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleEntry.java @@ -2,6 +2,8 @@ package info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule; import org.joda.time.Duration; +import java.util.Objects; + import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; public class BasalScheduleEntry { @@ -37,4 +39,16 @@ public class BasalScheduleEntry { ", startTime=" + startTime.getStandardSeconds() + "s" + '}'; } + + @Override public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BasalScheduleEntry that = (BasalScheduleEntry) o; + return Double.compare(that.rate, rate) == 0 && + Objects.equals(startTime, that.startTime); + } + + @Override public int hashCode() { + return Objects.hash(rate, startTime); + } } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/PodStateManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/PodStateManager.java index 169d39a0a8..aed1b4513c 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/PodStateManager.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/PodStateManager.java @@ -31,6 +31,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule.BasalSchedu import info.nightscout.androidaps.plugins.pump.omnipod.util.OmniCRC; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; +// TODO add nullchecks on some setters public abstract class PodStateManager { private final AAPSLogger aapsLogger; diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java deleted file mode 100644 index 335d841e1d..0000000000 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/OmnipodPumpStatus.java +++ /dev/null @@ -1,110 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.driver; - -import java.util.Arrays; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.androidaps.plugins.pump.common.data.PumpStatus; -import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; -import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; -import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; -import info.nightscout.androidaps.utils.sharedPreferences.SP; - -/** - * Created by andy on 4.8.2019 - */ -@Singleton -@Deprecated -public class OmnipodPumpStatus extends PumpStatus { - // TODO remove all fields that can also be obtained via PodStateManager - // We can probably get rid of this class altogether - - private final SP sp; - - public boolean inPreInit = true; - - // statuses - public double currentBasal = 0; - public long tempBasalStart; - public long tempBasalEnd; - public Double tempBasalAmount = 0.0d; - public Integer tempBasalLength; - public long tempBasalPumpId; - public PumpType pumpType; - - @Inject - public OmnipodPumpStatus(SP sp) { - super(PumpType.Insulet_Omnipod); - this.sp = sp; - initSettings(); - } - - @Override - public void initSettings() { - this.activeProfileName = ""; - this.reservoirRemainingUnits = 75d; - this.batteryRemaining = 75; - this.lastConnection = sp.getLong(OmnipodConst.Statistics.LastGoodPumpCommunicationTime, 0L); - this.pumpType = PumpType.Insulet_Omnipod; - } - - @Override - public String getErrorInfo() { - return null; - } - - public void clearTemporaryBasal() { - this.tempBasalStart = 0L; - this.tempBasalEnd = 0L; - this.tempBasalAmount = 0.0d; - this.tempBasalLength = 0; - } - - - public TempBasalPair getTemporaryBasal() { - TempBasalPair tbr = new TempBasalPair(); - tbr.setDurationMinutes(tempBasalLength); - tbr.setInsulinRate(tempBasalAmount); - tbr.setStartTime(tempBasalStart); - tbr.setEndTime(tempBasalEnd); - - return tbr; - } - - @Override - public String toString() { - return "OmnipodPumpStatus{" + - "inPreInit=" + inPreInit + - ", tempBasalStart=" + tempBasalStart + - ", tempBasalEnd=" + tempBasalEnd + - ", tempBasalAmount=" + tempBasalAmount + - ", tempBasalLength=" + tempBasalLength + - ", lastDataTime=" + lastDataTime + - ", lastConnection=" + lastConnection + - ", previousConnection=" + previousConnection + - ", lastBolusTime=" + lastBolusTime + - ", lastBolusAmount=" + lastBolusAmount + - ", activeProfileName='" + activeProfileName + '\'' + - ", reservoirRemainingUnits=" + reservoirRemainingUnits + - ", reservoirFullUnits=" + reservoirFullUnits + - ", batteryRemaining=" + batteryRemaining + - ", batteryVoltage=" + batteryVoltage + - ", iob='" + iob + '\'' + - ", dailyTotalUnits=" + dailyTotalUnits + - ", maxDailyTotalUnits='" + maxDailyTotalUnits + '\'' + - ", validBasalRateProfileSelectedOnPump=" + validBasalRateProfileSelectedOnPump + - ", pumpType=" + pumpType + - ", profileStore=" + profileStore + - ", units='" + units + '\'' + - ", pumpStatusType=" + pumpStatusType + - ", basalsByHour=" + Arrays.toString(basalsByHour) + - ", currentBasal=" + currentBasal + - ", tempBasalInProgress=" + tempBasalInProgress + - ", tempBasalRatio=" + tempBasalRatio + - ", tempBasalRemainMin=" + tempBasalRemainMin + - ", tempBasalStart=" + tempBasalStart + - ", pumpType=" + pumpType + - "} "; - } -} diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java index 7fbe329075..8a06767f6e 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsOmnipodManager.java @@ -35,7 +35,6 @@ import info.nightscout.androidaps.plugins.general.overview.notifications.Notific import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.utils.ByteUtil; -import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil; import info.nightscout.androidaps.plugins.pump.omnipod.R; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodManager; @@ -68,7 +67,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitReceiver; import info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule.BasalSchedule; import info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule.BasalScheduleEntry; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodStateManager; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.driver.db.PodHistoryEntryType; import info.nightscout.androidaps.plugins.pump.omnipod.exception.OmnipodException; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; @@ -88,7 +86,6 @@ public class AapsOmnipodManager implements IOmnipodManager { private final ResourceHelper resourceHelper; private final HasAndroidInjector injector; private final ActivePluginProvider activePlugin; - private final OmnipodPumpStatus pumpStatus; private final Context context; private final SP sp; private final OmnipodManager delegate; @@ -104,7 +101,6 @@ public class AapsOmnipodManager implements IOmnipodManager { @Inject public AapsOmnipodManager(OmnipodCommunicationManager communicationService, PodStateManager podStateManager, - OmnipodPumpStatus pumpStatus, OmnipodUtil omnipodUtil, AAPSLogger aapsLogger, RxBusWrapper rxBus, @@ -124,7 +120,6 @@ public class AapsOmnipodManager implements IOmnipodManager { this.resourceHelper = resourceHelper; this.injector = injector; this.activePlugin = activePlugin; - this.pumpStatus = pumpStatus; this.context = context; this.databaseHelper = databaseHelper; this.sp = sp; @@ -391,12 +386,6 @@ public class AapsOmnipodManager implements IOmnipodManager { long pumpId = addSuccessToHistory(time, PodHistoryEntryType.SetTemporaryBasal, tempBasalPair); - pumpStatus.tempBasalStart = time; - pumpStatus.tempBasalAmount = tempBasalPair.getInsulinRate(); - pumpStatus.tempBasalLength = tempBasalPair.getDurationMinutes(); - pumpStatus.tempBasalEnd = DateTimeUtil.getTimeInFutureFromMinutes(time, tempBasalPair.getDurationMinutes()); - pumpStatus.tempBasalPumpId = pumpId; - TemporaryBasal tempStart = new TemporaryBasal(injector) // .date(time) // .duration(tempBasalPair.getDurationMinutes()) // @@ -558,7 +547,6 @@ public class AapsOmnipodManager implements IOmnipodManager { TemporaryBasal temporaryBasal = new TemporaryBasal(injector) // .date(time) // .duration(0) // - .pumpId(pumpStatus.tempBasalPumpId) .source(Source.PUMP); plugin.addToHistoryTempBasal(temporaryBasal); @@ -716,7 +704,7 @@ public class AapsOmnipodManager implements IOmnipodManager { return resourceHelper.gs(id, args); } - static BasalSchedule mapProfileToBasalSchedule(Profile profile) { + public static BasalSchedule mapProfileToBasalSchedule(Profile profile) { if (profile == null) { throw new IllegalArgumentException("Profile can not be null"); } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsPodStateManager.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsPodStateManager.java index 14ee37ea95..373738eff8 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsPodStateManager.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/comm/AapsPodStateManager.java @@ -1,34 +1,26 @@ package info.nightscout.androidaps.plugins.pump.omnipod.driver.comm; -import java.util.Date; -import java.util.Objects; - import javax.inject.Inject; import javax.inject.Singleton; import info.nightscout.androidaps.events.Event; import info.nightscout.androidaps.events.EventRefreshOverview; import info.nightscout.androidaps.logging.AAPSLogger; +import info.nightscout.androidaps.logging.LTag; import info.nightscout.androidaps.plugins.bus.RxBusWrapper; -import info.nightscout.androidaps.plugins.pump.common.defs.PumpStatusType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodStateManager; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; -import info.nightscout.androidaps.utils.DateUtil; -import info.nightscout.androidaps.utils.resources.ResourceHelper; import info.nightscout.androidaps.utils.sharedPreferences.SP; @Singleton public class AapsPodStateManager extends PodStateManager { private final AAPSLogger aapsLogger; private final SP sp; - private final OmnipodPumpStatus omnipodPumpStatus; private final RxBusWrapper rxBus; @Inject - public AapsPodStateManager(AAPSLogger aapsLogger, SP sp, OmnipodPumpStatus omnipodPumpStatus, - RxBusWrapper rxBus) { + public AapsPodStateManager(AAPSLogger aapsLogger, SP sp, RxBusWrapper rxBus) { super(aapsLogger); if (aapsLogger == null) { @@ -37,16 +29,12 @@ public class AapsPodStateManager extends PodStateManager { if (sp == null) { throw new IllegalArgumentException("sp can not be null"); } - if (omnipodPumpStatus == null) { - throw new IllegalArgumentException("omnipodPumpStatus can not be null"); - } if (rxBus == null) { throw new IllegalArgumentException("rxBus can not be null"); } this.aapsLogger = aapsLogger; this.sp = sp; - this.omnipodPumpStatus = omnipodPumpStatus; this.rxBus = rxBus; } @@ -62,44 +50,11 @@ public class AapsPodStateManager extends PodStateManager { @Override protected void notifyPodStateChanged() { - if (!hasPodState()) { - omnipodPumpStatus.lastBolusTime = null; - omnipodPumpStatus.lastBolusAmount = null; - omnipodPumpStatus.reservoirRemainingUnits = 0.0; - // TODO this does not seem to set the pump status to suspended anymore - // Also, verify that AAPS is aware that no insulin is delivered anymore at this point - omnipodPumpStatus.pumpStatusType = PumpStatusType.Suspended; - sendEvent(new EventRefreshOverview("Omnipod Pump", false)); - } else { - Date lastBolusStartTime = getLastBolusStartTime() == null ? null : getLastBolusStartTime().toDate(); - Double lastBolusAmount = getLastBolusAmount(); + aapsLogger.debug(LTag.PUMP, "Pod State changed. Sending events."); - // Update other info: last bolus, units remaining, suspended - boolean suspended = isSuspended() || !isPodRunning(); - if (Objects.equals(lastBolusStartTime, omnipodPumpStatus.lastBolusTime) // - || !Objects.equals(lastBolusAmount, omnipodPumpStatus.lastBolusAmount) // - || !isReservoirStatusUpToDate(omnipodPumpStatus, getReservoirLevel()) - || suspended != PumpStatusType.Suspended.equals(omnipodPumpStatus.pumpStatusType)) { - omnipodPumpStatus.lastBolusTime = lastBolusStartTime; - omnipodPumpStatus.lastBolusAmount = lastBolusAmount; - omnipodPumpStatus.reservoirRemainingUnits = getReservoirLevel() == null ? 75.0 : getReservoirLevel(); - - boolean sendRefreshOverviewEvent = suspended != PumpStatusType.Suspended.equals(omnipodPumpStatus.pumpStatusType); - // TODO this does not seem to set the pump status to suspended anymore - // Also, verify that AAPS is aware that no insulin is delivered anymore at this point - omnipodPumpStatus.pumpStatusType = suspended ? PumpStatusType.Suspended : PumpStatusType.Running; - - if (sendRefreshOverviewEvent) { - sendEvent(new EventRefreshOverview("Omnipod Pump", false)); - } - } - } sendEvent(new EventOmnipodPumpValuesChanged()); - } - - private static boolean isReservoirStatusUpToDate(OmnipodPumpStatus pumpStatus, Double unitsRemaining) { - double expectedUnitsRemaining = unitsRemaining == null ? 75.0 : unitsRemaining; - return Math.abs(expectedUnitsRemaining - pumpStatus.reservoirRemainingUnits) < 0.000001; + // TODO is this necessary? + sendEvent(new EventRefreshOverview("Omnipod Pump", true)); } private void sendEvent(Event event) { diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIComm.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIComm.java index d39559e4b5..4e886f7d52 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIComm.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIComm.java @@ -15,27 +15,23 @@ public class OmnipodUIComm { private final HasAndroidInjector injector; private final AAPSLogger aapsLogger; - private final OmnipodUIPostprocessor omnipodUIPostprocessor; private final IOmnipodManager omnipodCommunicationManager; private RileyLinkUtil rileyLinkUtil; public OmnipodUIComm( HasAndroidInjector injector, AAPSLogger aapsLogger, - OmnipodUIPostprocessor omnipodUIPostprocessor, IOmnipodManager omnipodCommunicationManager, RileyLinkUtil rileyLinkUtil ) { this.injector = injector; this.aapsLogger = aapsLogger; - this.omnipodUIPostprocessor = omnipodUIPostprocessor; this.omnipodCommunicationManager = omnipodCommunicationManager; this.rileyLinkUtil = rileyLinkUtil; } public OmnipodUITask executeCommand(OmnipodCommandType commandType, Object... parameters) { - aapsLogger.warn(LTag.PUMP, "Execute Command: " + commandType.name()); OmnipodUITask task = new OmnipodUITask(injector, commandType, parameters); @@ -48,10 +44,7 @@ public class OmnipodUIComm { aapsLogger.warn(LTag.PUMP, "Reply not received for " + commandType); } - task.postProcess(omnipodUIPostprocessor); - return task; - } } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIPostprocessor.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIPostprocessor.java deleted file mode 100644 index 33d734bdde..0000000000 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUIPostprocessor.java +++ /dev/null @@ -1,64 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.driver.ui; - -import java.util.Date; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.androidaps.data.DetailedBolusInfo; -import info.nightscout.androidaps.data.PumpEnactResult; -import info.nightscout.androidaps.logging.AAPSLogger; -import info.nightscout.androidaps.logging.LTag; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; - -/** - * Created by andy on 4.8.2019 - */ -// TODO remove once OmnipodPumpStatus has been removed -@Singleton -public class OmnipodUIPostprocessor { - private final AAPSLogger aapsLogger; - private final OmnipodPumpStatus pumpStatus; - - @Inject - public OmnipodUIPostprocessor(AAPSLogger aapsLogger, OmnipodPumpStatus pumpStatus) { - this.aapsLogger = aapsLogger; - this.pumpStatus = pumpStatus; - } - - // this is mostly intended for command that return certain statuses (Remaining Insulin, ...), and - // where responses won't be directly used - public void postProcessData(OmnipodUITask uiTask) { - - switch (uiTask.commandType) { - case SetBolus: - if (uiTask.returnData != null) { - - PumpEnactResult result = uiTask.returnData; - - DetailedBolusInfo detailedBolusInfo = (DetailedBolusInfo) uiTask.getObjectFromParameters(0); - - if (result.success) { - boolean isSmb = detailedBolusInfo.isSMB; - - if (!isSmb) { - pumpStatus.lastBolusAmount = detailedBolusInfo.insulin; - pumpStatus.lastBolusTime = new Date(); - } - } - } - break; - - case CancelTemporaryBasal: - pumpStatus.tempBasalStart = 0; - pumpStatus.tempBasalEnd = 0; - pumpStatus.tempBasalAmount = null; - pumpStatus.tempBasalLength = null; - break; - - default: - aapsLogger.debug(LTag.PUMP, "Post-processing not implemented for {}.", uiTask.commandType.name()); - - } - } -} diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUITask.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUITask.java index 140f1de335..88d751ff8d 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUITask.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/driver/ui/OmnipodUITask.java @@ -8,59 +8,36 @@ import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.logging.LTag; -import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.omnipod.defs.IOmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitActionType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInitReceiver; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodResponseType; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; -import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; /** * Created by andy on 4.8.2019 */ public class OmnipodUITask { - - @Inject RxBusWrapper rxBus; @Inject AAPSLogger aapsLogger; - @Inject OmnipodPumpStatus omnipodPumpStatus; - @Inject OmnipodUtil omnipodUtil; - - private final HasAndroidInjector injector; public OmnipodCommandType commandType; public PumpEnactResult returnData; - private String errorDescription; private Object[] parameters; public PodResponseType responseType; public Object returnDataObject; - - public OmnipodUITask(HasAndroidInjector injector, OmnipodCommandType commandType) { - this.injector = injector; - this.injector.androidInjector().inject(this); - this.commandType = commandType; - } - - public OmnipodUITask(HasAndroidInjector injector, OmnipodCommandType commandType, Object... parameters) { - this.injector = injector; - this.injector.androidInjector().inject(this); + injector.androidInjector().inject(this); this.commandType = commandType; this.parameters = parameters; } - public void execute(IOmnipodManager communicationManager) { - - aapsLogger.debug(LTag.PUMP, "OmnipodUITask: @@@ In execute. {}", commandType); switch (commandType) { - case PairAndPrimePod: returnData = communicationManager.initPod((PodInitActionType) parameters[0], (PodInitReceiver) parameters[1], null); break; @@ -149,75 +126,26 @@ public class OmnipodUITask { } - private TempBasalPair getTBRSettings() { return new TempBasalPair(getDoubleFromParameters(0), // false, // getIntegerFromParameters(1)); } - - private Float getFloatFromParameters(int index) { - return (Float) parameters[index]; - } - - public Object getObjectFromParameters(int index) { - return parameters[index]; - } - public Double getDoubleFromParameters(int index) { return (Double) parameters[index]; } - public boolean getBooleanFromParameters(int index) { - return (boolean) parameters[index]; - } - public Integer getIntegerFromParameters(int index) { return (Integer) parameters[index]; } - public T getResult() { return (T) returnData; } - public boolean isReceived() { - return (returnData != null || errorDescription != null); - } - - - // FIXME remove once OmnipodPumpStatus has been removed - public void postProcess(OmnipodUIPostprocessor postprocessor) { - - aapsLogger.debug(LTag.PUMP, "OmnipodUITask: @@@ postProcess. {}", commandType); - aapsLogger.debug(LTag.PUMP, "OmnipodUITask: @@@ postProcess. responseType={}", responseType); - - if (responseType == PodResponseType.Data || responseType == PodResponseType.Acknowledgment) { - postprocessor.postProcessData(this); - } - - aapsLogger.debug(LTag.PUMP, "OmnipodUITask: @@@ postProcess. responseType={}", responseType); - - if (!responseType.isError()) { - omnipodPumpStatus.setLastCommunicationToNow(); - } - } - - - public boolean hasData() { - return (responseType == PodResponseType.Data || responseType == PodResponseType.Acknowledgment); - } - - - public Object getParameter(int index) { - return parameters[index]; - } - - - public PodResponseType getResponseType() { - return this.responseType; + return returnData != null; } public boolean wasCommandSuccessful() { @@ -226,6 +154,4 @@ public class OmnipodUITask { } return returnData.success; } - - } diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/events/EventOmnipodAcknowledgeAlertsChanged.kt b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/events/EventOmnipodAcknowledgeAlertsChanged.kt deleted file mode 100644 index 0bc2b5dc4b..0000000000 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/events/EventOmnipodAcknowledgeAlertsChanged.kt +++ /dev/null @@ -1,9 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.events - -import info.nightscout.androidaps.events.Event - -/** - * Created by andy on 04.06.2018. - */ -// FIXME can be removed, we should just use EventOmnipodPumpValuesChanged -class EventOmnipodAcknowledgeAlertsChanged : Event() \ No newline at end of file diff --git a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java index 70c9ee8cc9..3a5a2387da 100644 --- a/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java +++ b/omnipod/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java @@ -24,8 +24,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunication import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodStateManager; import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsOmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIComm; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.ui.OmnipodUIPostprocessor; -import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; @@ -39,7 +37,6 @@ public class RileyLinkOmnipodService extends RileyLinkService { @Inject OmnipodPumpPlugin omnipodPumpPlugin; @Inject OmnipodUtil omnipodUtil; - @Inject OmnipodUIPostprocessor omnipodUIPostprocessor; @Inject PodStateManager podStateManager; @Inject DatabaseHelperInterface databaseHelper; @Inject AapsOmnipodManager aapsOmnipodManager; @@ -73,31 +70,18 @@ public class RileyLinkOmnipodService extends RileyLinkService { return RileyLinkEncodingType.Manchester; } - /** - * If you have customized RileyLinkServiceData you need to override this - */ @Override public void initRileyLinkServiceData() { - rileyLinkServiceData.targetDevice = RileyLinkTargetDevice.Omnipod; rileyLinkServiceData.rileyLinkTargetFrequency = RileyLinkTargetFrequency.Omnipod; - // get most recently used RileyLink address rileyLinkServiceData.rileylinkAddress = sp.getString(RileyLinkConst.Prefs.RileyLinkAddress, ""); rfspy.startReader(); - initializeErosOmnipodManager(); + omnipodUIComm = new OmnipodUIComm(injector, aapsLogger, aapsOmnipodManager, rileyLinkUtil); aapsLogger.debug(LTag.PUMPCOMM, "RileyLinkOmnipodService newly constructed"); - //omnipodPumpStatus = (OmnipodPumpStatus) omnipodPumpPlugin.getPumpStatusData(); - } - - private void initializeErosOmnipodManager() { - if (omnipodUIComm == null) { - omnipodUIComm = new OmnipodUIComm(injector, aapsLogger, omnipodUIPostprocessor, aapsOmnipodManager, rileyLinkUtil); - } - rxBus.send(new EventOmnipodPumpValuesChanged()); } public OmnipodUIComm getDeviceCommandExecutor() { diff --git a/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleTest.java b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleTest.java new file mode 100644 index 0000000000..2fb5584def --- /dev/null +++ b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleTest.java @@ -0,0 +1,90 @@ +package info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule; + +import org.joda.time.Duration; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class BasalScheduleTest { + @Test + public void testRateAt() { + List entries = new ArrayList<>(); + entries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + entries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + entries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + entries.add(new BasalScheduleEntry(4.0d, Duration.standardHours(20))); + BasalSchedule schedule = new BasalSchedule(entries); + + assertEquals(1.0d, schedule.rateAt(Duration.ZERO), 0.00001); + assertEquals(1.0d, schedule.rateAt(Duration.standardHours(6).minus(Duration.standardSeconds(1))), 0.00001); + assertEquals(2.0d, schedule.rateAt(Duration.standardHours(6)), 0.00001); + assertEquals(2.0d, schedule.rateAt(Duration.standardHours(6).plus(Duration.standardMinutes(30))), 0.00001); + assertEquals(2.0d, schedule.rateAt(Duration.standardHours(7).minus(Duration.standardSeconds(1))), 0.00001); + assertEquals(3.0d, schedule.rateAt(Duration.standardHours(7)), 0.00001); + assertEquals(3.0d, schedule.rateAt(Duration.standardHours(19)), 0.00001); + assertEquals(3.0d, schedule.rateAt(Duration.standardHours(20).minus(Duration.standardSeconds(1))), 0.00001); + assertEquals(4.0d, schedule.rateAt(Duration.standardHours(20)), 0.00001); + assertEquals(4.0d, schedule.rateAt(Duration.standardHours(24).minus(Duration.standardSeconds(1))), 0.00001); + } + + @Test + public void testEquals() { + List entries = new ArrayList<>(); + entries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + entries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + entries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + entries.add(new BasalScheduleEntry(4.0d, Duration.standardHours(20))); + BasalSchedule schedule = new BasalSchedule(entries); + + List otherEntries = new ArrayList<>(); + otherEntries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + otherEntries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + otherEntries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + otherEntries.add(new BasalScheduleEntry(4.0d, Duration.standardHours(20))); + BasalSchedule otherschedule = new BasalSchedule(otherEntries); + + assertEquals(schedule, otherschedule); + } + + @Test + public void testNotEquals() { + List entries = new ArrayList<>(); + entries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + entries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + entries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + entries.add(new BasalScheduleEntry(4.0d, Duration.standardHours(20))); + BasalSchedule schedule = new BasalSchedule(entries); + + List otherEntries = new ArrayList<>(); + otherEntries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + otherEntries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + otherEntries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + otherEntries.add(new BasalScheduleEntry(4.1d, Duration.standardHours(20))); + BasalSchedule otherschedule = new BasalSchedule(otherEntries); + + assertNotEquals(schedule, otherschedule); + } + + @Test + public void testNotEquals2() { + List entries = new ArrayList<>(); + entries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + entries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + entries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + entries.add(new BasalScheduleEntry(4.0d, Duration.standardHours(20))); + BasalSchedule schedule = new BasalSchedule(entries); + + List otherEntries = new ArrayList<>(); + otherEntries.add(new BasalScheduleEntry(1.0d, Duration.ZERO)); + otherEntries.add(new BasalScheduleEntry(2.0d, Duration.standardHours(6))); + otherEntries.add(new BasalScheduleEntry(3.0d, Duration.standardHours(7))); + BasalSchedule otherschedule = new BasalSchedule(otherEntries); + + assertNotEquals(schedule, otherschedule); + } + +} \ No newline at end of file diff --git a/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/AapsPodStateManagerTest.java b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/AapsPodStateManagerTest.java index 6c9e2b520c..b69e87d66f 100644 --- a/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/AapsPodStateManagerTest.java +++ b/omnipod/src/test/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/state/AapsPodStateManagerTest.java @@ -14,7 +14,6 @@ import info.nightscout.androidaps.logging.AAPSLogger; import info.nightscout.androidaps.plugins.bus.RxBusWrapper; import info.nightscout.androidaps.plugins.pump.omnipod.defs.FirmwareVersion; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodProgressStatus; -import info.nightscout.androidaps.plugins.pump.omnipod.driver.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.driver.comm.AapsPodStateManager; import info.nightscout.androidaps.utils.sharedPreferences.SP; @@ -24,7 +23,6 @@ import static org.junit.Assert.assertEquals; public class AapsPodStateManagerTest { @Mock AAPSLogger aapsLogger; @Mock SP sp; - @Mock OmnipodPumpStatus omnipodPumpStatus; RxBusWrapper rxBus = new RxBusWrapper(); @Test @@ -36,7 +34,7 @@ public class AapsPodStateManagerTest { DateTimeUtils.setCurrentMillisFixed(now.getMillis()); - AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, omnipodPumpStatus, rxBus); + AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, rxBus); podStateManager.initState(0x0); podStateManager.setInitializationParameters(0, 0, new FirmwareVersion(1, 1, 1), new FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS); @@ -54,7 +52,7 @@ public class AapsPodStateManagerTest { DateTimeUtils.setCurrentMillisFixed(now.getMillis()); - AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, omnipodPumpStatus, rxBus); + AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, rxBus); podStateManager.initState(0x0); podStateManager.setInitializationParameters(0, 0, new FirmwareVersion(1, 1, 1), new FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS); @@ -77,7 +75,7 @@ public class AapsPodStateManagerTest { DateTimeUtils.setCurrentMillisFixed(now.getMillis()); - AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, omnipodPumpStatus, rxBus); + AapsPodStateManager podStateManager = new AapsPodStateManager(aapsLogger, sp, rxBus); podStateManager.initState(0x0); podStateManager.setInitializationParameters(0, 0, new FirmwareVersion(1, 1, 1), new FirmwareVersion(2, 2, 2), timeZone, PodProgressStatus.ABOVE_FIFTY_UNITS);