diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f2f2c625d3..8cbae49258 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,6 +46,7 @@
+
@@ -79,33 +80,33 @@
+ android:name=".receivers.DataReceiver"
+ android:enabled="true"
+ android:exported="true">
-
+
-
+
-
+
-
+
-
+
-
+
+ android:name=".receivers.SmsReceiver"
+ android:enabled="true"
+ android:exported="true"
+ android:permission="android.permission.BROADCAST_SMS">
-
+
@@ -297,7 +298,6 @@
android:theme="@style/Theme.AppCompat.NoTitle" />
-
-
+
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..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
@@ -11,6 +11,8 @@ 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;
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.BolusAction;
@@ -28,20 +30,25 @@ 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;
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,150 +56,300 @@ public class OmnipodManager {
}
this.communicationService = communicationService;
this.podState = podState;
+ instance = this;
}
- public OmnipodManager(OmnipodCommunicationService communicationService) {
- this(communicationService, null);
+ @Override
+ public PumpEnactResult insertCannula(Profile profile) {
+ if (podState == null || podState.getSetupProgress().isBefore(SetupProgress.PRIMING_FINISHED)) {
+ // 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)) {
+ // TODO use string resource
+ return new PumpEnactResult().success(false).enacted(false).comment("Illegal setup state: " + podState.getSetupProgress().name());
+ }
+
+ 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);
+ } catch (Exception ex) {
+ // TODO distinguish between certain and uncertain failures
+ // TODO user friendly error messages (string resources)
+ return new PumpEnactResult().success(false).enacted(false).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult pairAndPrime() {
+ 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 {
+ // 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult cancelBolus() {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult getPodStatus() {
+ if (podState == null) {
+ // 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult deactivatePod() {
+ if (podState == null) {
+ // 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult setBasalProfile(Profile basalProfile) {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult resetPodState() {
+ podState = null;
+ SP.remove(OmnipodConst.Prefs.PodState);
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult bolus(Double units) {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult cancelTemporaryBasal() {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ @Override
+ public PumpEnactResult acknowledgeAlerts() {
+ if (!isInitialized()) {
+ 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).comment(ex.getMessage());
+ }
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ // TODO should we add this to the OmnipodCommunicationManager interface?
+ public PumpEnactResult getPodInfo(PodInfoType podInfoType) {
+ if (!isInitialized()) {
+ return createNotInitializedResult();
+ }
+
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ // TODO should we add this to the OmnipodCommunicationManager interface?
+ public PumpEnactResult suspendDelivery() {
+ if (!isInitialized()) {
+ return createNotInitializedResult();
+ }
+
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ // TODO should we add this to the OmnipodCommunicationManager interface?
+ public PumpEnactResult resumeDelivery() {
+ if (!isInitialized()) {
+ return createNotInitializedResult();
+ }
+
+ 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
+ }
+
+ // TODO should we add this to the OmnipodCommunicationManager interface?
+ public PumpEnactResult setTime() {
+ if (!isInitialized()) {
+ return createNotInitializedResult();
+ }
+
+ try {
+ // 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());
+
+ // 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).comment(ex.getMessage());
+ }
+
+ return new PumpEnactResult().success(true).enacted(true);
}
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) {
- 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)) {
- throw new IllegalStateException("Illegal setup state: " + podState.getSetupProgress().name());
- }
-
- 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);
- }
-
- public void setBasalSchedule(BasalSchedule basalSchedule, boolean confidenceReminder) {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- communicationService.executeAction(new SetBasalScheduleAction(podState, basalSchedule,
- confidenceReminder, podState.getScheduleOffset(), true));
- }
-
- public void setTempBasal(double rate, Duration duration) {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- communicationService.executeAction(new SetTempBasalAction(new SetTempBasalService(),
- podState, rate, duration, true, true));
- }
-
- 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() {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- communicationService.executeAction(new CancelDeliveryAction(podState, DeliveryType.BOLUS, true));
- }
-
- public void suspendDelivery() {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- communicationService.executeAction(new CancelDeliveryAction(podState, EnumSet.allOf(DeliveryType.class), true));
- }
-
- public void resumeDelivery() {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(),
- true, podState.getScheduleOffset(), true));
- }
-
- public void setTime() {
- if (!isInitialized()) {
- throw new IllegalStateException("Pod should be initialized first");
- }
- // 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());
-
- // Resume delivery
- communicationService.executeAction(new SetBasalScheduleAction(podState, podState.getBasalSchedule(),
- true, podState.getScheduleOffset(), true));
- }
-
public DateTime getTime() {
return podState.getTime();
}
- public void deactivatePod() {
- if (podState == null) {
- throw new IllegalStateException("Pod should be paired first");
- }
- communicationService.executeAction(new DeactivatePodAction(podState, true));
- resetPodState();
- }
-
public boolean isInitialized() {
return podState != null && podState.getSetupProgress() == SetupProgress.COMPLETED;
}
@@ -201,13 +358,13 @@ 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);
}
+
+ 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
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..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
@@ -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);
@@ -114,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");
@@ -144,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();
@@ -187,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)
@@ -205,6 +205,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
}
+ @Override
public Class getServiceClass() {
return RileyLinkOmnipodService.class;
}
@@ -436,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) {
@@ -453,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);
@@ -475,50 +478,36 @@ 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));
+ result.bolusDelivered(detailedBolusInfo.insulin).carbsDelivered(detailedBolusInfo.carbs);
}
+ 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");
}
@@ -552,7 +541,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.");
@@ -569,10 +557,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 {
@@ -581,8 +568,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;
}
}
@@ -590,12 +576,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;
@@ -610,19 +596,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() {
@@ -683,11 +660,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.");
@@ -697,17 +674,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
@@ -733,19 +705,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/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..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;
@@ -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;
@@ -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 48baf9e815..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,66 +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
+ */
+ PumpEnactResult pairAndPrime();
/**
- * Initialize Pod
+ * Insert cannula
*/
- PodCommResponse initPod();
+ 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 profile);
+ PumpEnactResult 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();
+ PumpEnactResult resetPodState();
/**
* Set Bolus
*
* @param amount amount of bolus in U
*/
- PodCommResponse setBolus(Double amount);
+ PumpEnactResult bolus(Double amount);
/**
* Cancel Bolus (if bolus is already stopped, return acknowledgment)
*/
- PodCommResponse cancelBolus();
+ PumpEnactResult cancelBolus();
/**
* 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);
+ 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/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..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
@@ -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,26 @@ public class RileyLinkOmnipodService extends RileyLinkService {
RileyLinkUtil.setRileyLinkBLE(rileyLinkBLE);
// init rileyLinkCommunicationManager
- omnipodCommunicationManager = new OmnipodCommunicationManager(context, rfspy);
+ initializeErosOmnipodManager();
+ // TODO Dash
+ }
+
+ private void initializeErosOmnipodManager() {
+ 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();
+ }
}
@@ -112,7 +137,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..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;
@@ -35,8 +35,6 @@ public class OmnipodDashCommunicationManager implements OmnipodCommunicationMana
private PodSessionState getPodSessionState() {
-
-
return null;
}
@@ -63,51 +61,61 @@ 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 PumpEnactResult pairAndPrime() {
//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() {
+ @Override
+ public PumpEnactResult insertCannula(Profile basalProfile) {
return null;
}
@Override
- public PodCommResponse acknowledgeAlerts() {
+ public PumpEnactResult getPodStatus() {
return null;
}
+ @Override
+ public PumpEnactResult deactivatePod() {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult setBasalProfile(Profile basalProfile) {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult resetPodState() {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult bolus(Double parameter) {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult cancelBolus() {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult setTemporaryBasal(TempBasalPair tempBasalPair) {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult cancelTemporaryBasal() {
+ return null;
+ }
+
+ @Override
+ public PumpEnactResult 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">