From 78f402a367ce4a9d3c4a1ae4719096d6e7a467bd Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Thu, 29 Aug 2019 01:07:28 +0200 Subject: [PATCH 1/5] Remove OmnipodCommunicationManager, make OmnipodManager implement OmnipodCommunicationManagerInterface --- .../plugins/pump/omnipod/OmnipodManager.java | 215 +++++++++++------- .../pump/omnipod/OmnipodPumpPlugin.java | 3 +- .../comm/OmnipodCommunicationManager.java | 144 ------------ .../comm/OmnipodCommunicationService.java | 43 ++-- .../pump/omnipod/comm/ui/OmnipodUIComm.java | 1 - .../pump/omnipod/comm/ui/OmnipodUITask.java | 6 +- .../OmnipodCommunicationManagerInterface.java | 21 +- .../defs/schedule/BasalScheduleMapper.java | 1 + .../service/RileyLinkOmnipodService.java | 33 ++- .../pump/omnipod/util/OmnipodUtil.java | 10 +- .../omnipod_dash/OmnipodDashPumpPlugin.java | 30 --- .../comm/OmnipodDashCommunicationManager.java | 28 ++- app/src/main/res/xml/pref_omnipod.xml | 2 +- 13 files changed, 221 insertions(+), 316 deletions(-) delete mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationManager.java diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java index ab40f1e1a4..37bff68cdd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java @@ -11,6 +11,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AcknowledgeAlertsAction; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction; @@ -27,21 +28,28 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.Inser import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PairService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PrimeService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.SetTempBasalService; +import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfo; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoResponse; import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType; +import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodInfoType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.SetupProgress; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule.BasalSchedule; import info.nightscout.androidaps.plugins.pump.omnipod.defs.schedule.BasalScheduleMapper; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.utils.SP; -public class OmnipodManager { +public class OmnipodManager implements OmnipodCommunicationManagerInterface { private final OmnipodCommunicationService communicationService; private PodSessionState podState; + private static OmnipodManager instance; + + // FIXME this is dirty + public static OmnipodManager getInstance() { + return instance; + } public OmnipodManager(OmnipodCommunicationService communicationService, PodSessionState podState) { if (communicationService == null) { @@ -49,55 +57,15 @@ public class OmnipodManager { } this.communicationService = communicationService; this.podState = podState; + instance = this; } public OmnipodManager(OmnipodCommunicationService communicationService) { this(communicationService, null); } - public OmnipodCommunicationService getCommunicationService() { - return communicationService; - } - - public T getPodInfo(PodInfoType podInfoType) { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); - } - PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, podInfoType)); - return podInfoResponse.getPodInfo(); - } - - public StatusResponse getStatus() { - if (podState == null) { - throw new IllegalStateException("Pod should be paired first"); - } - return communicationService.executeAction(new GetStatusAction(podState)); - } - - public void acknowledgeAlerts() { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); - } - communicationService.executeAction(new AcknowledgeAlertsAction(podState, podState.getActiveAlerts())); - } - - public void pairAndPrime() { - if (podState == null) { - podState = communicationService.executeAction(new PairAction(new PairService())); - } - if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { - communicationService.executeAction(new PrimeAction(new PrimeService(), podState)); - - executeDelayed(() -> { - StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); - PrimeAction.updatePrimingStatus(podState, delayedStatusResponse); - }, OmnipodConst.POD_PRIME_DURATION); - } else { - throw new IllegalStateException("Illegal setup state: " + podState.getSetupProgress().name()); - } - } - - public void insertCannula(Profile profile) { + @Override + public PodCommResponse insertCannula(Profile profile) { if (podState == null || podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { throw new IllegalArgumentException("Pod should be paired and primed first"); } else if (podState.getSetupProgress().isAfter(SetupProgress.CANNULA_INSERTING)) { @@ -111,45 +79,131 @@ public class OmnipodManager { StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); InsertCannulaAction.updateCannulaInsertionStatus(podState, delayedStatusResponse); }, OmnipodConst.POD_CANNULA_INSERTION_DURATION); + + return null; // TODO } - public void setBasalSchedule(BasalSchedule basalSchedule, boolean confidenceReminder) { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + @Override + public PodCommResponse pairAndPrime() { + if (podState == null) { + podState = communicationService.executeAction(new PairAction(new PairService())); } - communicationService.executeAction(new SetBasalScheduleAction(podState, basalSchedule, - confidenceReminder, podState.getScheduleOffset(), true)); - } + if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { + communicationService.executeAction(new PrimeAction(new PrimeService(), podState)); - public void setTempBasal(double rate, Duration duration) { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + executeDelayed(() -> { + StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); + PrimeAction.updatePrimingStatus(podState, delayedStatusResponse); + }, OmnipodConst.POD_PRIME_DURATION); + } else { + throw new IllegalStateException("Illegal setup state: " + podState.getSetupProgress().name()); } - communicationService.executeAction(new SetTempBasalAction(new SetTempBasalService(), - podState, rate, duration, true, true)); + + return null; // TODO } - public void cancelTempBasal() { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); - } - communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.TEMP_BASAL, true)); - } - - public void bolus(double units) { - if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); - } - communicationService.executeAction(new BolusAction(podState, units, true, true)); - } - - public void cancelBolus() { + @Override + public PodCommResponse cancelBolus() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.BOLUS, true)); + + return null; // TODO } + @Override + public PodCommResponse getPodStatus() { + if (podState == null) { + throw new IllegalStateException("Pod should be paired first"); + } + + // return communicationService.executeAction(new GetStatusAction(podState)); + return null; // TODO + } + + @Override + public PodCommResponse deactivatePod() { + if (podState == null) { + throw new IllegalStateException("Pod should be paired first"); + } + communicationService.executeAction(new DeactivatePodAction(podState, true)); + resetPodState(); + + return null; // TODO + } + + @Override + public PodCommResponse setBasalProfile(Profile basalProfile) { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + communicationService.executeAction(new SetBasalScheduleAction(podState, + BasalScheduleMapper.mapProfileToBasalSchedule(basalProfile), + false, podState.getScheduleOffset(), true)); + + return null; // TODO + } + + @Override + public PodCommResponse resetPodState() { + podState = null; + SP.remove(OmnipodConst.Prefs.PodState); + + return null; // TODO + } + + @Override + public PodCommResponse bolus(Double units) { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + communicationService.executeAction(new BolusAction(podState, units, true, true)); + + return null; // TODO + } + + @Override + public PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair) { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + communicationService.executeAction(new SetTempBasalAction(new SetTempBasalService(), + podState, tempBasalPair.getInsulinRate(), Duration.standardMinutes(tempBasalPair.getDurationMinutes()), + true, true)); + + return null; // TODO + } + + @Override + public PodCommResponse cancelTemporaryBasal() { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.TEMP_BASAL, true)); + + return null; // TODO + } + + @Override + public PodCommResponse acknowledgeAlerts() { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + communicationService.executeAction(new AcknowledgeAlertsAction(podState, podState.getActiveAlerts())); + return null; // TODO + } + + // TODO should we add this to the OmnipodCommunicationManager interface? + public T getPodInfo(PodInfoType podInfoType) { + if (!isInitialized()) { + throw new IllegalStateException("Pod should be initialized first"); + } + PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, podInfoType)); + return podInfoResponse.getPodInfo(); + } + + // TODO should we add this to the OmnipodCommunicationManager interface? public void suspendDelivery() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); @@ -157,6 +211,7 @@ public class OmnipodManager { communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), true)); } + // TODO should we add this to the OmnipodCommunicationManager interface? public void resumeDelivery() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); @@ -165,6 +220,7 @@ public class OmnipodManager { true, podState.getScheduleOffset(), true)); } + // TODO should we add this to the OmnipodCommunicationManager interface? public void setTime() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); @@ -181,16 +237,12 @@ public class OmnipodManager { true, podState.getScheduleOffset(), true)); } - public DateTime getTime() { - return podState.getTime(); + public OmnipodCommunicationService getCommunicationService() { + return communicationService; } - public void deactivatePod() { - if (podState == null) { - throw new IllegalStateException("Pod should be paired first"); - } - communicationService.executeAction(new DeactivatePodAction(podState, true)); - resetPodState(); + public DateTime getTime() { + return podState.getTime(); } public boolean isInitialized() { @@ -201,11 +253,6 @@ public class OmnipodManager { return podState == null ? "null" : podState.toString(); } - public void resetPodState() { - podState = null; - SP.remove(OmnipodConst.Prefs.PodState); - } - private void executeDelayed(Runnable r, Duration timeout) { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); scheduledExecutorService.schedule(r, timeout.getMillis(), TimeUnit.MILLISECONDS); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java index e601a7ab59..94c51f38ee 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java @@ -43,7 +43,6 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.comm.ui.OmnipodUIComm; import info.nightscout.androidaps.plugins.pump.omnipod.comm.ui.OmnipodUITask; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; @@ -105,7 +104,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa displayConnectionMessages = false; if (omnipodCommunicationManager == null) { - omnipodCommunicationManager = OmnipodCommunicationManager.getInstance(); + omnipodCommunicationManager = OmnipodManager.getInstance(); } omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationManager.java deleted file mode 100644 index e08a399090..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationManager.java +++ /dev/null @@ -1,144 +0,0 @@ -package info.nightscout.androidaps.plugins.pump.omnipod.comm; - -import android.content.Context; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import info.nightscout.androidaps.data.Profile; -import info.nightscout.androidaps.logging.L; -import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkCommunicationManager; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.data.RLMessage; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RLMessageType; -import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodManager; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; -import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; -import info.nightscout.androidaps.utils.SP; - -/** - * Created by andy on 4.8.2019 - */ -public class OmnipodCommunicationManager extends RileyLinkCommunicationManager implements OmnipodCommunicationManagerInterface { - - private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM); - - private static OmnipodCommunicationManager omnipodCommunicationManager; - String errorMessage; - OmnipodCommunicationService communicationService; - OmnipodManager omnipodManager; - - - public OmnipodCommunicationManager(Context context, RFSpy rfspy) { - super(rfspy); - omnipodCommunicationManager = this; - OmnipodUtil.getPumpStatus().previousConnection = SP.getLong( - RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L); - communicationService = new OmnipodCommunicationService(this); - omnipodManager = new OmnipodManager(communicationService, getPodSessionState()); - } - - - private PodSessionState getPodSessionState() { - - - return null; - } - - - public static OmnipodCommunicationManager getInstance() { - return omnipodCommunicationManager; - } - - - @Override - protected void configurePumpSpecificSettings() { - pumpStatus = OmnipodUtil.getPumpStatus(); - } - - - @Override - public E createResponseMessage(byte[] payload, Class clazz) { - // TODO - - //PumpMessage pumpMessage = new PumpMessage(payload); - //eturn (E) pumpMessage; - return null; - } - - - @Override - public boolean tryToConnectToDevice() { - return false; //isDeviceReachable(true); - } - - - public String getErrorResponse() { - return this.errorMessage; - } - - - @Override - public byte[] createPumpMessageContent(RLMessageType type) { - return new byte[0]; - } - - - private boolean isLogEnabled() { - return L.isEnabled(L.PUMPCOMM); - } - - - // This are just skeleton methods, we need to see what we can get returned and act accordingly - - public PodCommResponse initPod() { - omnipodManager.pairAndPrime(); - - - return null; - } - - - public PodCommResponse getPodStatus() { - return null; - } - - - public PodCommResponse deactivatePod() { - return null; - } - - public PodCommResponse setBasalProfile(Profile profile) { - return null; - } - - public PodCommResponse resetPodStatus() { - return null; - } - - public PodCommResponse setBolus(Double parameter) { - return null; - } - - public PodCommResponse cancelBolus() { - return null; - } - - public PodCommResponse setTemporaryBasal(TempBasalPair tbr) { - return null; - } - - public PodCommResponse cancelTemporaryBasal() { - return null; - } - - @Override - public PodCommResponse acknowledgeAlerts() { - return null; - } - -} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java index 39b1f397ce..2a93c00f1d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/OmnipodCommunicationService.java @@ -35,33 +35,30 @@ import info.nightscout.androidaps.plugins.pump.omnipod.exception.PodReturnedErro * Created by andy on 6/29/18. */ -public class OmnipodCommunicationService /*extends RileyLinkCommunicationManager*/ { +public class OmnipodCommunicationService extends RileyLinkCommunicationManager { private static final Logger LOG = LoggerFactory.getLogger(OmnipodCommunicationService.class); - //RFSpy rfspy = null; - OmnipodCommunicationManager communicationManager; - public OmnipodCommunicationService(OmnipodCommunicationManager communicationManager) { - //this.rfspy = rfspy; - this.communicationManager = communicationManager; + public OmnipodCommunicationService(RFSpy rfspy) { + super(rfspy); } -// @Override -// protected void configurePumpSpecificSettings() { -// } -// -// @Override -// public boolean tryToConnectToDevice() { -// // TODO -// return false; -// } -// -// @Override -// public byte[] createPumpMessageContent(RLMessageType type) { -// return new byte[0]; -// } + @Override + protected void configurePumpSpecificSettings() { + } - //@Override + @Override + public boolean tryToConnectToDevice() { + // TODO + return false; + } + + @Override + public byte[] createPumpMessageContent(RLMessageType type) { + return new byte[0]; + } + + @Override public E createResponseMessage(byte[] payload, Class clazz) { return (E) new OmnipodPacket(payload); } @@ -199,7 +196,7 @@ public class OmnipodCommunicationService /*extends RileyLinkCommunicationManager OmnipodPacket ack = createAckPacket(podState, packetAddress, messageAddress); boolean quiet = false; while (!quiet) try { - this.communicationManager.sendAndListen(ack, 300, 1, 0, 40, OmnipodPacket.class); + sendAndListen(ack, 300, 1, 0, 40, OmnipodPacket.class); } catch (RileyLinkCommunicationException ex) { if (RileyLinkBLEError.Timeout.equals(ex.getErrorCode())) { quiet = true; @@ -227,7 +224,7 @@ public class OmnipodCommunicationService /*extends RileyLinkCommunicationManager while (System.currentTimeMillis() < timeoutTime) { OmnipodPacket response = null; try { - response = this.communicationManager.sendAndListen(packet, responseTimeoutMilliseconds, repeatCount, 9, preambleExtensionMilliseconds, OmnipodPacket.class); + response = sendAndListen(packet, responseTimeoutMilliseconds, repeatCount, 9, preambleExtensionMilliseconds, OmnipodPacket.class); } catch (Exception ex) { LOG.debug("Ignoring exception in exchangePackets: " + ex.getClass().getSimpleName() + ": " + ex.getMessage()); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUIComm.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUIComm.java index 2d91deec37..b5f6d4136b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUIComm.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUIComm.java @@ -4,7 +4,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.logging.L; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java index 5a831e1e19..656399bb79 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java @@ -55,7 +55,7 @@ public class OmnipodUITask { // break; case InitPod: - returnData = communicationManager.initPod(); + returnData = communicationManager.pairAndPrime(); break; case DeactivatePod: @@ -63,7 +63,7 @@ public class OmnipodUITask { break; case ResetPodStatus: - returnData = communicationManager.resetPodStatus(); + returnData = communicationManager.resetPodState(); break; case SetBasalProfile: @@ -74,7 +74,7 @@ public class OmnipodUITask { Double amount = getDoubleFromParameters(0); if (amount != null) - returnData = communicationManager.setBolus(amount); + returnData = communicationManager.bolus(amount); } break; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java index 48baf9e815..e36ccc31d6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java @@ -9,9 +9,14 @@ public interface OmnipodCommunicationManagerInterface { // TODO add methods that can be used by OmniPod Eros and Omnipod Dash /** - * Initialize Pod + * Pair and prime */ - PodCommResponse initPod(); + PodCommResponse pairAndPrime(); + + /** + * Insert cannula + */ + PodCommResponse insertCannula(Profile basalProfile); /** * Get Pod Status (is pod running, battery left ?, reservoir, etc) @@ -26,19 +31,19 @@ public interface OmnipodCommunicationManagerInterface { /** * Set Basal Profile */ - PodCommResponse setBasalProfile(Profile profile); + PodCommResponse setBasalProfile(Profile basalProfile); /** - * Reset Pod status (if we forget to disconnect Pod and want to init new pod, and want to forget current pod) + * Reset Pod state (if we forget to disconnect Pod and want to init new pod, and want to forget current pod) */ - PodCommResponse resetPodStatus(); + PodCommResponse resetPodState(); /** * Set Bolus * * @param amount amount of bolus in U */ - PodCommResponse setBolus(Double amount); + PodCommResponse bolus(Double amount); /** * Cancel Bolus (if bolus is already stopped, return acknowledgment) @@ -48,9 +53,9 @@ public interface OmnipodCommunicationManagerInterface { /** * Set Temporary Basal * - * @param tbr TempBasalPair object containg amount and duration in minutes + * @param tempBasalPair TempBasalPair object containg amount and duration in minutes */ - PodCommResponse setTemporaryBasal(TempBasalPair tbr); + PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair); /** * Cancel Temporary Basal (if TB is already stopped, return acknowledgment) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleMapper.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleMapper.java index cce2dceb1a..f0a2fa7e9d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleMapper.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/schedule/BasalScheduleMapper.java @@ -8,6 +8,7 @@ import java.util.List; import info.nightscout.androidaps.data.Profile; public class BasalScheduleMapper { + // TODO add tests public static BasalSchedule mapProfileToBasalSchedule(Profile profile) { Profile.ProfileValue[] basalValues = profile.getBasalValues(); List entries = new ArrayList<>(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java index 67c280ce3c..e1498f11a7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java @@ -6,6 +6,8 @@ import android.content.res.Configuration; import android.os.Binder; import android.os.IBinder; +import com.google.gson.Gson; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,8 +23,12 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLin import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkService; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.RileyLinkServiceData; +import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; +import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; +import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; +import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; +import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.utils.SP; @@ -36,7 +42,7 @@ public class RileyLinkOmnipodService extends RileyLinkService { private static RileyLinkOmnipodService instance; - OmnipodCommunicationManager omnipodCommunicationManager; + OmnipodCommunicationManagerInterface omnipodCommunicationManager; OmnipodPumpStatus pumpStatus = null; private IBinder mBinder = new LocalBinder(); @@ -101,7 +107,22 @@ public class RileyLinkOmnipodService extends RileyLinkService { RileyLinkUtil.setRileyLinkBLE(rileyLinkBLE); // init rileyLinkCommunicationManager - omnipodCommunicationManager = new OmnipodCommunicationManager(context, rfspy); + initializeErosOmnipodManager(); + // TODO Dash + } + + private void initializeErosOmnipodManager() { + PodSessionState podState = null; + if (SP.contains(OmnipodConst.Prefs.PodState)) { + try { + Gson gson = OmnipodUtil.getGsonInstance(); + String storedPodState = SP.getString(OmnipodConst.Prefs.PodState, null); + podState = gson.fromJson(storedPodState, PodSessionState.class); + } catch (Exception ex) { + LOG.error("Could not deserialize Pod state: " + ex.getClass().getSimpleName() + ": " + ex.getMessage()); + } + } + omnipodCommunicationManager = new OmnipodManager(new OmnipodCommunicationService(rfspy), podState); } @@ -112,7 +133,11 @@ public class RileyLinkOmnipodService extends RileyLinkService { @Override public RileyLinkCommunicationManager getDeviceCommunicationManager() { - return this.omnipodCommunicationManager; + if(omnipodCommunicationManager instanceof OmnipodManager) { // Eros + return ((OmnipodManager) omnipodCommunicationManager).getCommunicationService(); + } + // FIXME is this correct for Dash? + return (RileyLinkCommunicationManager)omnipodCommunicationManager; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodUtil.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodUtil.java index eb3921a8f2..dbe976848b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodUtil.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/util/OmnipodUtil.java @@ -25,8 +25,8 @@ import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.data.RLHistoryItem; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; +import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange; @@ -46,7 +46,7 @@ public class OmnipodUtil extends RileyLinkUtil { private static RileyLinkOmnipodService omnipodService; private static OmnipodPumpStatus omnipodPumpStatus; private static OmnipodCommandType currentCommand; - private static Gson gsonInstance = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + private static Gson gsonInstance = createGson(); private static PodSessionState podSessionState; private static PodDeviceState podDeviceState; private static OmnipodPumpPlugin omnipodPumpPlugin; @@ -99,12 +99,10 @@ public class OmnipodUtil extends RileyLinkUtil { OmnipodUtil.lowLevelDebug = lowLevelDebug; } - - public static OmnipodCommunicationManager getOmnipodCommunicationManager() { - return (OmnipodCommunicationManager) RileyLinkUtil.rileyLinkCommunicationManager; + public static OmnipodCommunicationManagerInterface getOmnipodCommunicationManager() { + return (OmnipodCommunicationManagerInterface) RileyLinkUtil.rileyLinkCommunicationManager; } - public static RileyLinkOmnipodService getOmnipodService() { return OmnipodUtil.omnipodService; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/OmnipodDashPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/OmnipodDashPumpPlugin.java index 59a7a3baff..c0c19b75fb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/OmnipodDashPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/OmnipodDashPumpPlugin.java @@ -1,65 +1,35 @@ package info.nightscout.androidaps.plugins.pump.omnipod_dash; -import android.content.ComponentName; -import android.content.ServiceConnection; import android.os.Bundle; -import android.os.IBinder; -import android.os.SystemClock; -import androidx.annotation.NonNull; - -import org.joda.time.LocalDateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.HashSet; import java.util.List; -import java.util.Set; import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.Profile; -import info.nightscout.androidaps.data.PumpEnactResult; -import info.nightscout.androidaps.db.Source; -import info.nightscout.androidaps.db.TemporaryBasal; -import info.nightscout.androidaps.events.EventRefreshOverview; import info.nightscout.androidaps.interfaces.PluginDescription; import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.general.actions.defs.CustomAction; -import info.nightscout.androidaps.plugins.general.actions.defs.CustomActionType; -import info.nightscout.androidaps.plugins.pump.common.PumpPluginAbstract; -import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState; import info.nightscout.androidaps.plugins.pump.common.defs.PumpType; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask; -import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ServiceTaskExecutor; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodFragment; import info.nightscout.androidaps.plugins.pump.omnipod.OmnipodPumpPlugin; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.comm.ui.OmnipodUIComm; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.ui.OmnipodUITask; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; -import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCustomActionType; 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.service.OmnipodPumpStatus; import info.nightscout.androidaps.plugins.pump.omnipod.service.RileyLinkOmnipodService; -import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod_dash.comm.OmnipodDashCommunicationManager; -import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; -import info.nightscout.androidaps.utils.SP; /** * Created by andy on 23.04.18. diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java index c0593759a4..43becb7e1e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java @@ -35,8 +35,6 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana private PodSessionState getPodSessionState() { - - return null; } @@ -63,44 +61,55 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana // This are just skeleton methods, we need to see what we can get returned and act accordingly - - public PodCommResponse initPod() { + @Override + public PodCommResponse pairAndPrime() { //omnipodManager.pairAndPrime(); return null; } + @Override + public PodCommResponse insertCannula(Profile basalProfile) { + return null; + } + @Override public PodCommResponse getPodStatus() { return null; } - + @Override public PodCommResponse deactivatePod() { return null; } - public PodCommResponse setBasalProfile(Profile profile) { + @Override + public PodCommResponse setBasalProfile(Profile basalProfile) { return null; } - public PodCommResponse resetPodStatus() { + @Override + public PodCommResponse resetPodState() { return null; } - public PodCommResponse setBolus(Double parameter) { + @Override + public PodCommResponse bolus(Double parameter) { return null; } + @Override public PodCommResponse cancelBolus() { return null; } - public PodCommResponse setTemporaryBasal(TempBasalPair tbr) { + @Override + public PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair) { return null; } + @Override public PodCommResponse cancelTemporaryBasal() { return null; } @@ -109,5 +118,4 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana public PodCommResponse acknowledgeAlerts() { return null; } - } diff --git a/app/src/main/res/xml/pref_omnipod.xml b/app/src/main/res/xml/pref_omnipod.xml index ab78d0dc8e..dd2b71a5f1 100644 --- a/app/src/main/res/xml/pref_omnipod.xml +++ b/app/src/main/res/xml/pref_omnipod.xml @@ -7,7 +7,7 @@ android:enabled="true" android:summary="" android:title="RileyLink Configuration" - android:key="@string/pref_key_rileylink_mac_address"> + android:key="@string/key_rileylink_mac_address"> From ed52070a4c68c30daade5bf7722a17dfd51f4832 Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Thu, 29 Aug 2019 20:40:34 +0200 Subject: [PATCH 2/5] Replace PodCommsResponse with PumpEnactResult --- .../plugins/pump/omnipod/OmnipodManager.java | 28 +++--- .../pump/omnipod/OmnipodPumpPlugin.java | 99 +++++++------------ .../pump/omnipod/comm/ui/OmnipodUITask.java | 16 +-- .../OmnipodCommunicationManagerInterface.java | 27 +++-- .../service/RileyLinkOmnipodService.java | 22 +++-- .../comm/OmnipodDashCommunicationManager.java | 24 ++--- 6 files changed, 88 insertions(+), 128 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java index 37bff68cdd..7786cd9004 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java @@ -11,6 +11,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.AcknowledgeAlertsAction; @@ -28,7 +29,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.Inser import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PairService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PrimeService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.SetTempBasalService; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfo; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoResponse; @@ -60,12 +60,8 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { instance = this; } - public OmnipodManager(OmnipodCommunicationService communicationService) { - this(communicationService, null); - } - @Override - public PodCommResponse insertCannula(Profile profile) { + public PumpEnactResult insertCannula(Profile profile) { if (podState == null || podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { throw new IllegalArgumentException("Pod should be paired and primed first"); } else if (podState.getSetupProgress().isAfter(SetupProgress.CANNULA_INSERTING)) { @@ -84,7 +80,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse pairAndPrime() { + public PumpEnactResult pairAndPrime() { if (podState == null) { podState = communicationService.executeAction(new PairAction(new PairService())); } @@ -103,7 +99,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse cancelBolus() { + public PumpEnactResult cancelBolus() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } @@ -113,7 +109,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse getPodStatus() { + public PumpEnactResult getPodStatus() { if (podState == null) { throw new IllegalStateException("Pod should be paired first"); } @@ -123,7 +119,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse deactivatePod() { + public PumpEnactResult deactivatePod() { if (podState == null) { throw new IllegalStateException("Pod should be paired first"); } @@ -134,7 +130,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse setBasalProfile(Profile basalProfile) { + public PumpEnactResult setBasalProfile(Profile basalProfile) { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } @@ -146,7 +142,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse resetPodState() { + public PumpEnactResult resetPodState() { podState = null; SP.remove(OmnipodConst.Prefs.PodState); @@ -154,7 +150,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse bolus(Double units) { + public PumpEnactResult bolus(Double units) { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } @@ -164,7 +160,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair) { + public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } @@ -176,7 +172,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse cancelTemporaryBasal() { + public PumpEnactResult cancelTemporaryBasal() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } @@ -186,7 +182,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } @Override - public PodCommResponse acknowledgeAlerts() { + public PumpEnactResult acknowledgeAlerts() { if (!isInitialized()) { throw new IllegalStateException("Pod should be initialized first"); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java index 94c51f38ee..071f2230bb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java @@ -113,12 +113,14 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa serviceConnection = new ServiceConnection() { + @Override public void onServiceDisconnected(ComponentName name) { if (isLoggingEnabled()) LOG.debug("RileyLinkOmnipodService is disconnected"); omnipodService = null; } + @Override public void onServiceConnected(ComponentName name, IBinder service) { if (isLoggingEnabled()) LOG.debug("RileyLinkOmnipodService is connected"); @@ -143,12 +145,10 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa }; } - protected OmnipodPumpPlugin(PluginDescription pluginDescription, PumpType pumpType) { super(pluginDescription, pumpType); } - public static OmnipodPumpPlugin getPlugin() { if (plugin == null) plugin = new OmnipodPumpPlugin(); @@ -186,6 +186,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa } + @Override public void onStartCustomActions() { // check status every minute (if any status needs refresh we send readStatus command) @@ -204,6 +205,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa } + @Override public Class getServiceClass() { return RileyLinkOmnipodService.class; } @@ -435,11 +437,13 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa } + @Override protected void triggerUIChange() { RxBus.INSTANCE.send(new EventOmnipodPumpValuesChanged()); } + @Override @NonNull protected PumpEnactResult deliverBolus(final DetailedBolusInfo detailedBolusInfo) { @@ -452,11 +456,11 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBolus, detailedBolusInfo.insulin); - Boolean response = responseTask.wasCommandSuccessful(); + PumpEnactResult result = responseTask.getResult(); setRefreshButtonEnabled(true); - if (response) { + if (result.success) { TreatmentsPlugin.getPlugin().addToHistoryTreatment(detailedBolusInfo, true); @@ -474,50 +478,35 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa long time = System.currentTimeMillis() + (bolusTime * 1000); this.busyTimestamps.add(time); - - return new PumpEnactResult().success(true) // - .enacted(true) // - .bolusDelivered(detailedBolusInfo.insulin) // - .carbsDelivered(detailedBolusInfo.carbs); - - } else { - return new PumpEnactResult() // - .success(false) // - .enacted(false) // - .comment(MainApp.gs(R.string.medtronic_cmd_bolus_could_not_be_delivered)); } + return result; } finally { finishAction("Bolus"); } } - + @Override public void stopBolusDelivering() { - LOG.info(getLogPrefix() + "stopBolusDelivering"); setRefreshButtonEnabled(false); - try { + OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.CancelBolus); - OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.CancelBolus); + PumpEnactResult result = responseTask.getResult(); - Boolean response = responseTask.wasCommandSuccessful(); + setRefreshButtonEnabled(true); - setRefreshButtonEnabled(true); + LOG.info(getLogPrefix() + "stopBolusDelivering - wasSuccess={}", result.success); - LOG.info(getLogPrefix() + "stopBolusDelivering - wasSuccess={}", response); + if (result.success) { + // TODO fix bolus record with cancel - if (response) { - // TODO fix bolus record with cancel - - //TreatmentsPlugin.getPlugin().addToHistoryTreatment(detailedBolusInfo, true); - } - - } finally { - finishAction("Bolus"); + //TreatmentsPlugin.getPlugin().addToHistoryTreatment(detailedBolusInfo, true); } + + finishAction("Bolus"); } @@ -551,7 +540,6 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa } if (tbrCurrent != null && !enforceNew) { - if (OmnipodUtil.isSame(tbrCurrent.getInsulinRate(), absoluteRate)) { if (isLoggingEnabled()) LOG.info(getLogPrefix() + "setTempBasalAbsolute - No enforceNew and same rate. Exiting."); @@ -568,10 +556,9 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa // CANCEL OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal); - Boolean response = responseTask2.wasCommandSuccessful(); - ; + PumpEnactResult result = responseTask2.getResult(); - if (response) { + if (result.success) { if (isLoggingEnabled()) LOG.info(getLogPrefix() + "setTempBasalAbsolute - Current TBR cancelled."); } else { @@ -580,8 +567,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa finishAction("TBR"); - return new PumpEnactResult().success(false).enacted(false) - .comment(MainApp.gs(R.string.medtronic_cmd_cant_cancel_tbr_stop_op)); + return result; } } @@ -589,12 +575,12 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetTemporaryBasal, absoluteRate, durationInMinutes); - Boolean response = responseTask.wasCommandSuccessful(); + PumpEnactResult result = responseTask.getResult(); if (isLoggingEnabled()) - LOG.info(getLogPrefix() + "setTempBasalAbsolute - setTBR. Response: " + response); + LOG.info(getLogPrefix() + "setTempBasalAbsolute - setTBR. Response: " + result.success); - if (response) { + if (result.success) { pumpStatusLocal.tempBasalStart = System.currentTimeMillis(); pumpStatusLocal.tempBasalAmount = absoluteRate; pumpStatusLocal.tempBasalLength = durationInMinutes; @@ -609,19 +595,10 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa TreatmentsPlugin.getPlugin().addToHistoryTempBasal(tempStart); incrementStatistics(OmnipodConst.Statistics.TBRsSet); - - finishAction("TBR"); - - return new PumpEnactResult().success(true).enacted(true) // - .absolute(absoluteRate).duration(durationInMinutes); - - } else { - finishAction("TBR"); - - return new PumpEnactResult().success(false).enacted(false) // - .comment(MainApp.gs(R.string.medtronic_cmd_tbr_could_not_be_delivered)); } + finishAction("TBR"); + return result; } protected TempBasalPair readTBR() { @@ -682,11 +659,11 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal); - Boolean response = responseTask2.wasCommandSuccessful(); + PumpEnactResult result = responseTask2.getResult(); finishAction("TBR"); - if (response) { + if (result.success) { if (isLoggingEnabled()) LOG.info(getLogPrefix() + "cancelTempBasal - Cancel TBR successful."); @@ -696,17 +673,12 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa .source(Source.USER); TreatmentsPlugin.getPlugin().addToHistoryTempBasal(tempBasal); - - return new PumpEnactResult().success(true).enacted(true) // - .isTempCancel(true); } else { if (isLoggingEnabled()) LOG.info(getLogPrefix() + "cancelTempBasal - Cancel TBR failed."); - - return new PumpEnactResult().success(response).enacted(response) // - .comment(MainApp.gs(R.string.medtronic_cmd_cant_cancel_tbr)); } + return result; } @Override @@ -732,19 +704,16 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBasalProfile, profile); - Boolean response = responseTask.wasCommandSuccessful(); + PumpEnactResult result = responseTask.getResult(); if (isLoggingEnabled()) - LOG.info(getLogPrefix() + "Basal Profile was set: " + response); + LOG.info(getLogPrefix() + "Basal Profile was set: " + result.success); - if (response) { + if (result.success) { this.currentProfile = profile; - return new PumpEnactResult().success(true).enacted(true); - } else { - return new PumpEnactResult().success(response).enacted(response) // - .comment(MainApp.gs(R.string.medtronic_cmd_basal_profile_could_not_be_set)); } + return result; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java index 656399bb79..d2d10c69fe 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/comm/ui/OmnipodUITask.java @@ -4,10 +4,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState; @@ -25,7 +25,7 @@ public class OmnipodUITask { private static final Logger LOG = LoggerFactory.getLogger(L.PUMP); public OmnipodCommandType commandType; - public PodCommResponse returnData; + public PumpEnactResult returnData; private String errorDescription; private Object[] parameters; private PodResponseType responseType; @@ -128,11 +128,10 @@ public class OmnipodUITask { } - public Object getResult() { - return returnData; + public T getResult() { + return (T)returnData; } - public boolean isReceived() { return (returnData != null || errorDescription != null); } @@ -184,12 +183,5 @@ public class OmnipodUITask { return this.responseType; } - public boolean wasCommandSuccessful() { - if (returnData == null) { - return false; - } - return returnData.isAcknowledged(); - } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java index e36ccc31d6..166c44b0be 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/defs/OmnipodCommunicationManagerInterface.java @@ -1,71 +1,70 @@ package info.nightscout.androidaps.plugins.pump.omnipod.defs; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; public interface OmnipodCommunicationManagerInterface { - // TODO add methods that can be used by OmniPod Eros and Omnipod Dash - /** * Pair and prime */ - PodCommResponse pairAndPrime(); + PumpEnactResult pairAndPrime(); /** * Insert cannula */ - PodCommResponse insertCannula(Profile basalProfile); + PumpEnactResult insertCannula(Profile basalProfile); /** * Get Pod Status (is pod running, battery left ?, reservoir, etc) */ - PodCommResponse getPodStatus(); + // TODO we should probably return a (wrapped) StatusResponse instead of a PumpEnactResult + PumpEnactResult getPodStatus(); /** * Deactivate Pod */ - PodCommResponse deactivatePod(); + PumpEnactResult deactivatePod(); /** * Set Basal Profile */ - PodCommResponse setBasalProfile(Profile basalProfile); + PumpEnactResult setBasalProfile(Profile basalProfile); /** * Reset Pod state (if we forget to disconnect Pod and want to init new pod, and want to forget current pod) */ - PodCommResponse resetPodState(); + PumpEnactResult resetPodState(); /** * Set Bolus * * @param amount amount of bolus in U */ - PodCommResponse bolus(Double amount); + PumpEnactResult bolus(Double amount); /** * Cancel Bolus (if bolus is already stopped, return acknowledgment) */ - PodCommResponse cancelBolus(); + PumpEnactResult cancelBolus(); /** * Set Temporary Basal * * @param tempBasalPair TempBasalPair object containg amount and duration in minutes */ - PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair); + PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair); /** * Cancel Temporary Basal (if TB is already stopped, return acknowledgment) */ - PodCommResponse cancelTemporaryBasal(); + PumpEnactResult cancelTemporaryBasal(); /** * Acknowledge alerts */ - PodCommResponse acknowledgeAlerts(); + PumpEnactResult acknowledgeAlerts(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java index e1498f11a7..584d3bc1f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/service/RileyLinkOmnipodService.java @@ -112,17 +112,21 @@ public class RileyLinkOmnipodService extends RileyLinkService { } private void initializeErosOmnipodManager() { - PodSessionState podState = null; - if (SP.contains(OmnipodConst.Prefs.PodState)) { - try { - Gson gson = OmnipodUtil.getGsonInstance(); - String storedPodState = SP.getString(OmnipodConst.Prefs.PodState, null); - podState = gson.fromJson(storedPodState, PodSessionState.class); - } catch (Exception ex) { - LOG.error("Could not deserialize Pod state: " + ex.getClass().getSimpleName() + ": " + ex.getMessage()); + if(OmnipodManager.getInstance() == null) { + PodSessionState podState = null; + if (SP.contains(OmnipodConst.Prefs.PodState)) { + try { + Gson gson = OmnipodUtil.getGsonInstance(); + String storedPodState = SP.getString(OmnipodConst.Prefs.PodState, null); + podState = gson.fromJson(storedPodState, PodSessionState.class); + } catch (Exception ex) { + LOG.error("Could not deserialize Pod state: " + ex.getClass().getSimpleName() + ": " + ex.getMessage()); + } } + omnipodCommunicationManager = new OmnipodManager(new OmnipodCommunicationService(rfspy), podState); + } else { + omnipodCommunicationManager = OmnipodManager.getInstance(); } - omnipodCommunicationManager = new OmnipodManager(new OmnipodCommunicationService(rfspy), podState); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java index 43becb7e1e..2011700101 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod_dash/comm/OmnipodDashCommunicationManager.java @@ -6,11 +6,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst; import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.RFSpy; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState; import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil; @@ -62,7 +62,7 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana // This are just skeleton methods, we need to see what we can get returned and act accordingly @Override - public PodCommResponse pairAndPrime() { + public PumpEnactResult pairAndPrime() { //omnipodManager.pairAndPrime(); @@ -70,52 +70,52 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana } @Override - public PodCommResponse insertCannula(Profile basalProfile) { + public PumpEnactResult insertCannula(Profile basalProfile) { return null; } @Override - public PodCommResponse getPodStatus() { + public PumpEnactResult getPodStatus() { return null; } @Override - public PodCommResponse deactivatePod() { + public PumpEnactResult deactivatePod() { return null; } @Override - public PodCommResponse setBasalProfile(Profile basalProfile) { + public PumpEnactResult setBasalProfile(Profile basalProfile) { return null; } @Override - public PodCommResponse resetPodState() { + public PumpEnactResult resetPodState() { return null; } @Override - public PodCommResponse bolus(Double parameter) { + public PumpEnactResult bolus(Double parameter) { return null; } @Override - public PodCommResponse cancelBolus() { + public PumpEnactResult cancelBolus() { return null; } @Override - public PodCommResponse setTemporaryBasal(TempBasalPair tempBasalPair) { + public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) { return null; } @Override - public PodCommResponse cancelTemporaryBasal() { + public PumpEnactResult cancelTemporaryBasal() { return null; } @Override - public PodCommResponse acknowledgeAlerts() { + public PumpEnactResult acknowledgeAlerts() { return null; } } From 83d95f1e87a460dbdaf7c96d28ef88e306f879b5 Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Thu, 29 Aug 2019 21:06:33 +0200 Subject: [PATCH 3/5] Return PumpEnactResult instead of throwing Exceptions in OmnipodManager --- .../plugins/pump/omnipod/OmnipodManager.java | 238 +++++++++++++----- 1 file changed, 176 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java index 7786cd9004..8d49c07eb2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java @@ -30,7 +30,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PairS import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.PrimeService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.service.SetTempBasalService; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.StatusResponse; -import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfo; import info.nightscout.androidaps.plugins.pump.omnipod.comm.message.response.podinfo.PodInfoResponse; import info.nightscout.androidaps.plugins.pump.omnipod.defs.DeliveryType; import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommunicationManagerInterface; @@ -63,36 +62,51 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult insertCannula(Profile profile) { if (podState == null || podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { - throw new IllegalArgumentException("Pod should be paired and primed first"); + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Pod should be paired and primed first"); } else if (podState.getSetupProgress().isAfter(SetupProgress.CANNULA_INSERTING)) { - throw new IllegalStateException("Illegal setup state: " + podState.getSetupProgress().name()); + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Illegal setup state: " + podState.getSetupProgress().name()); } - communicationService.executeAction(new InsertCannulaAction(new InsertCannulaService(), podState, - BasalScheduleMapper.mapProfileToBasalSchedule(profile))); + try { + communicationService.executeAction(new InsertCannulaAction(new InsertCannulaService(), podState, + BasalScheduleMapper.mapProfileToBasalSchedule(profile))); - executeDelayed(() -> { - StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); - InsertCannulaAction.updateCannulaInsertionStatus(podState, delayedStatusResponse); - }, OmnipodConst.POD_CANNULA_INSERTION_DURATION); + executeDelayed(() -> { + StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); + InsertCannulaAction.updateCannulaInsertionStatus(podState, delayedStatusResponse); + }, OmnipodConst.POD_CANNULA_INSERTION_DURATION); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); + } return null; // TODO } @Override public PumpEnactResult pairAndPrime() { - if (podState == null) { - podState = communicationService.executeAction(new PairAction(new PairService())); - } - if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { - communicationService.executeAction(new PrimeAction(new PrimeService(), podState)); + try { + if (podState == null) { + podState = communicationService.executeAction(new PairAction(new PairService())); + } + if (podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) { + communicationService.executeAction(new PrimeAction(new PrimeService(), podState)); - executeDelayed(() -> { - StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); - PrimeAction.updatePrimingStatus(podState, delayedStatusResponse); - }, OmnipodConst.POD_PRIME_DURATION); - } else { - throw new IllegalStateException("Illegal setup state: " + podState.getSetupProgress().name()); + executeDelayed(() -> { + StatusResponse delayedStatusResponse = communicationService.executeAction(new GetStatusAction(podState)); + PrimeAction.updatePrimingStatus(podState, delayedStatusResponse); + }, OmnipodConst.POD_PRIME_DURATION); + } else { + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Illegal setup state: " + podState.getSetupProgress().name()); + } + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } return null; // TODO @@ -101,9 +115,16 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult cancelBolus() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.BOLUS, true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.BOLUS, true)); return null; // TODO } @@ -111,20 +132,37 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult getPodStatus() { if (podState == null) { - throw new IllegalStateException("Pod should be paired first"); + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Pod should be paired and primed first"); + } + + try { + // TODO how can we return the status response? Also refer to TODO in interface + StatusResponse statusResponse = communicationService.executeAction(new GetStatusAction(podState)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - // return communicationService.executeAction(new GetStatusAction(podState)); return null; // TODO } @Override public PumpEnactResult deactivatePod() { if (podState == null) { - throw new IllegalStateException("Pod should be paired first"); + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Pod should be paired and primed first"); + } + + try { + communicationService.executeAction(new DeactivatePodAction(podState, true)); + resetPodState(); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new DeactivatePodAction(podState, true)); - resetPodState(); return null; // TODO } @@ -132,11 +170,18 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult setBasalProfile(Profile basalProfile) { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new SetBasalScheduleAction(podState, + BasalScheduleMapper.mapProfileToBasalSchedule(basalProfile), + false, podState.getScheduleOffset(), true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new SetBasalScheduleAction(podState, - BasalScheduleMapper.mapProfileToBasalSchedule(basalProfile), - false, podState.getScheduleOffset(), true)); return null; // TODO } @@ -152,9 +197,16 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult bolus(Double units) { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new BolusAction(podState, units, true, true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new BolusAction(podState, units, true, true)); return null; // TODO } @@ -162,11 +214,18 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new SetTempBasalAction(new SetTempBasalService(), + podState, tempBasalPair.getInsulinRate(), Duration.standardMinutes(tempBasalPair.getDurationMinutes()), + true, true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new SetTempBasalAction(new SetTempBasalService(), - podState, tempBasalPair.getInsulinRate(), Duration.standardMinutes(tempBasalPair.getDurationMinutes()), - true, true)); return null; // TODO } @@ -174,9 +233,16 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult cancelTemporaryBasal() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.TEMP_BASAL, true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.TEMP_BASAL, true)); return null; // TODO } @@ -184,53 +250,96 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { @Override public PumpEnactResult acknowledgeAlerts() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); + } + + try { + communicationService.executeAction(new AcknowledgeAlertsAction(podState, podState.getActiveAlerts())); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); } - communicationService.executeAction(new AcknowledgeAlertsAction(podState, podState.getActiveAlerts())); return null; // TODO } // TODO should we add this to the OmnipodCommunicationManager interface? - public T getPodInfo(PodInfoType podInfoType) { + public PumpEnactResult getPodInfo(PodInfoType podInfoType) { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); } - PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, podInfoType)); - return podInfoResponse.getPodInfo(); + + try { + // TODO how can we return the PodInfo response? + PodInfoResponse podInfoResponse = communicationService.executeAction(new GetPodInfoAction(podState, podInfoType)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); + } + + return null; // TODO } // TODO should we add this to the OmnipodCommunicationManager interface? - public void suspendDelivery() { + public PumpEnactResult suspendDelivery() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); } - communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), true)); + + try { + communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); + } + + return null; // TODO } // TODO should we add this to the OmnipodCommunicationManager interface? - public void resumeDelivery() { + public PumpEnactResult resumeDelivery() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); } - communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(), - true, podState.getScheduleOffset(), true)); + + try { + communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(), + true, podState.getScheduleOffset(), true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); + } + + return null; // TODO } // TODO should we add this to the OmnipodCommunicationManager interface? - public void setTime() { + public PumpEnactResult setTime() { if (!isInitialized()) { - throw new IllegalStateException("Pod should be initialized first"); + return createNotInitializedResult(); } - // Suspend delivery - communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), false)); - // Joda seems to cache the default time zone, so we use the JVM's - DateTimeZone.setDefault(DateTimeZone.forTimeZone(TimeZone.getDefault())); - podState.setTimeZone(DateTimeZone.getDefault()); + try { + // Suspend delivery + communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), false)); - // Resume delivery - communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(), - true, podState.getScheduleOffset(), true)); + // Joda seems to cache the default time zone, so we use the JVM's + DateTimeZone.setDefault(DateTimeZone.forTimeZone(TimeZone.getDefault())); + podState.setTimeZone(DateTimeZone.getDefault()); + + // Resume delivery + communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(), + true, podState.getScheduleOffset(), true)); + } catch (Exception ex) { + // TODO distinguish between certain and uncertain failures + // TODO user friendly error messages (string resources) + return new PumpEnactResult().success(false).enacted(false); + } + + return null; // TODO } public OmnipodCommunicationService getCommunicationService() { @@ -253,4 +362,9 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); scheduledExecutorService.schedule(r, timeout.getMillis(), TimeUnit.MILLISECONDS); } + + private PumpEnactResult createNotInitializedResult() { + // TODO use string resource + return new PumpEnactResult().success(false).enacted(false).comment("Pod should be initialized first"); + } } \ No newline at end of file From 9fcec28970a34b5acd4a2daac6be3e666c2ed176 Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Thu, 29 Aug 2019 21:21:02 +0200 Subject: [PATCH 4/5] Return PumpEnactResult on success in OmnipodManager --- .../plugins/pump/omnipod/OmnipodManager.java | 30 +++++++++---------- .../pump/omnipod/OmnipodPumpPlugin.java | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java index 8d49c07eb2..f2fc770606 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java @@ -83,7 +83,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -109,7 +109,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -126,7 +126,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -145,7 +145,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -164,7 +164,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -183,7 +183,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -191,7 +191,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { podState = null; SP.remove(OmnipodConst.Prefs.PodState); - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -208,7 +208,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -227,7 +227,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -244,7 +244,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } @Override @@ -260,7 +260,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { // TODO user friendly error messages (string resources) return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } // TODO should we add this to the OmnipodCommunicationManager interface? @@ -278,7 +278,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } // TODO should we add this to the OmnipodCommunicationManager interface? @@ -295,7 +295,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } // TODO should we add this to the OmnipodCommunicationManager interface? @@ -313,7 +313,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } // TODO should we add this to the OmnipodCommunicationManager interface? @@ -339,7 +339,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { return new PumpEnactResult().success(false).enacted(false); } - return null; // TODO + return new PumpEnactResult().success(true).enacted(true); } public OmnipodCommunicationService getCommunicationService() { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java index 071f2230bb..3f6b2b60f8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodPumpPlugin.java @@ -478,6 +478,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa long time = System.currentTimeMillis() + (bolusTime * 1000); this.busyTimestamps.add(time); + result.bolusDelivered(detailedBolusInfo.insulin).carbsDelivered(detailedBolusInfo.carbs); } return result; From 0829f6e1958f4a63fc076814728727116c08bd7e Mon Sep 17 00:00:00 2001 From: Bart Sopers Date: Thu, 29 Aug 2019 21:43:29 +0200 Subject: [PATCH 5/5] Add Exception message to PumpEnactResults --- .../plugins/pump/omnipod/OmnipodManager.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java index f2fc770606..bd8097cfa2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/OmnipodManager.java @@ -80,7 +80,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -106,7 +106,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -123,7 +123,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -142,7 +142,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -161,7 +161,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -180,7 +180,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -205,7 +205,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -224,7 +224,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -241,7 +241,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -258,7 +258,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); } @@ -275,7 +275,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -292,7 +292,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -310,7 +310,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true); @@ -336,7 +336,7 @@ public class OmnipodManager implements OmnipodCommunicationManagerInterface { } catch (Exception ex) { // TODO distinguish between certain and uncertain failures // TODO user friendly error messages (string resources) - return new PumpEnactResult().success(false).enacted(false); + return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage()); } return new PumpEnactResult().success(true).enacted(true);