- added dash package so that I can split the two implementations
- working on omnipod implementation - changed display fragment
This commit is contained in:
parent
f81df4fed1
commit
3203ad5cde
|
@ -82,9 +82,11 @@ public abstract class PumpPluginAbstract extends PluginBase implements PumpInter
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
Context context = MainApp.instance().getApplicationContext();
|
if (getServiceClass()!=null) {
|
||||||
Intent intent = new Intent(context, getServiceClass());
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
|
Intent intent = new Intent(context, getServiceClass());
|
||||||
|
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
|
||||||
|
}
|
||||||
|
|
||||||
serviceRunning = true;
|
serviceRunning = true;
|
||||||
|
|
||||||
|
@ -96,8 +98,10 @@ public abstract class PumpPluginAbstract extends PluginBase implements PumpInter
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
Context context = MainApp.instance().getApplicationContext();
|
if (serviceConnection!=null) {
|
||||||
context.unbindService(serviceConnection);
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
|
context.unbindService(serviceConnection);
|
||||||
|
}
|
||||||
|
|
||||||
serviceRunning = false;
|
serviceRunning = false;
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,12 @@ public enum PumpType {
|
||||||
new DoseSettings(0.05d, 30, 12 * 60, 0d, 30.0d), PumpCapability.BasalRate_Duration30minAllowed, // cannot exceed max basal rate 30u/hr
|
new DoseSettings(0.05d, 30, 12 * 60, 0d, 30.0d), PumpCapability.BasalRate_Duration30minAllowed, // cannot exceed max basal rate 30u/hr
|
||||||
0.05d, 0.05d, null, PumpCapability.VirtualPumpCapabilities),
|
0.05d, 0.05d, null, PumpCapability.VirtualPumpCapabilities),
|
||||||
|
|
||||||
|
Insulet_Omnipod_Dash("Insulet Omnipod Dash", ManufacturerType.Insulet, "Omnipod Dash", 0.05d, null, //
|
||||||
|
new DoseSettings(0.05d, 30, 8 * 60, 0.05d), //
|
||||||
|
PumpTempBasalType.Absolute, //
|
||||||
|
new DoseSettings(0.05d, 30, 12 * 60, 0d, 30.0d), PumpCapability.BasalRate_Duration30minAllowed, // cannot exceed max basal rate 30u/hr
|
||||||
|
0.05d, 0.05d, null, PumpCapability.VirtualPumpCapabilities),
|
||||||
|
|
||||||
// Medtronic
|
// Medtronic
|
||||||
Medtronic_512_712("Medtronic 512/712", ManufacturerType.Medtronic, "512/712", 0.1d, null, //
|
Medtronic_512_712("Medtronic 512/712", ManufacturerType.Medtronic, "512/712", 0.1d, null, //
|
||||||
new DoseSettings(0.05d, 30, 8 * 60, 0.05d), //
|
new DoseSettings(0.05d, 30, 8 * 60, 0.05d), //
|
||||||
|
|
|
@ -22,6 +22,8 @@ import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLin
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkTargetDevice
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.dialog.RileyLinkStatusActivity
|
||||||
|
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState
|
||||||
|
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange
|
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged
|
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged
|
||||||
|
@ -83,17 +85,17 @@ class OmnipodFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
omnipod_refresh.setOnClickListener {
|
omnipod_refresh.setOnClickListener {
|
||||||
// if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) {
|
if (!OmnipodUtil.getPumpStatus().verifyConfiguration()) {
|
||||||
// OmnipodUtil.displayNotConfiguredDialog(context)
|
OmnipodUtil.displayNotConfiguredDialog(context)
|
||||||
// } else {
|
} else {
|
||||||
// omnipod_refresh.isEnabled = false
|
omnipod_refresh.isEnabled = false
|
||||||
// MedtronicPumpPlugin.getPlugin().resetStatusState()
|
OmnipodUtil.getPlugin().resetStatusState()
|
||||||
// ConfigBuilderPlugin.getPlugin().commandQueue.readStatus("Clicked refresh", object : Callback() {
|
ConfigBuilderPlugin.getPlugin().commandQueue.readStatus("Clicked refresh", object : Callback() {
|
||||||
// override fun run() {
|
override fun run() {
|
||||||
// activity?.runOnUiThread { omnipod_refresh.isEnabled = true }
|
activity?.runOnUiThread { omnipod_refresh.isEnabled = true }
|
||||||
// }
|
}
|
||||||
// })
|
})
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
omnipod_stats.setOnClickListener {
|
omnipod_stats.setOnClickListener {
|
||||||
|
@ -163,7 +165,7 @@ class OmnipodFragment : Fragment() {
|
||||||
pumpStatus.rileyLinkServiceState = checkStatusSet(pumpStatus.rileyLinkServiceState,
|
pumpStatus.rileyLinkServiceState = checkStatusSet(pumpStatus.rileyLinkServiceState,
|
||||||
RileyLinkUtil.getServiceState()) as RileyLinkServiceState?
|
RileyLinkUtil.getServiceState()) as RileyLinkServiceState?
|
||||||
|
|
||||||
val resourceId = pumpStatus.rileyLinkServiceState.getResourceId(RileyLinkTargetDevice.MedtronicPump)
|
val resourceId = pumpStatus.rileyLinkServiceState.getResourceId(RileyLinkTargetDevice.Omnipod)
|
||||||
val rileyLinkError = RileyLinkUtil.getError()
|
val rileyLinkError = RileyLinkUtil.getError()
|
||||||
omnipod_rl_status.text =
|
omnipod_rl_status.text =
|
||||||
when {
|
when {
|
||||||
|
@ -182,6 +184,62 @@ class OmnipodFragment : Fragment() {
|
||||||
MainApp.gs(it.getResourceId(RileyLinkTargetDevice.Omnipod))
|
MainApp.gs(it.getResourceId(RileyLinkTargetDevice.Omnipod))
|
||||||
} ?: "-"
|
} ?: "-"
|
||||||
|
|
||||||
|
if (pumpStatus.podNumber==null) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (pumpStatus.podSessionState==null) {
|
||||||
|
omnipod_pod_address.text = MainApp.gs(R.string.omnipod_pod_name_no_info)
|
||||||
|
omnipod_pod_expiry.text = "-"
|
||||||
|
omnipod_pod_status.text = "{fa-bed} "
|
||||||
|
} else {
|
||||||
|
|
||||||
|
omnipod_pod_address.text = pumpStatus.podSessionState.address.toString()
|
||||||
|
omnipod_pod_expiry.text = pumpStatus.podSessionState.expiryDateAsString
|
||||||
|
|
||||||
|
pumpStatus.podDeviceState = checkStatusSet(pumpStatus.podDeviceState,
|
||||||
|
OmnipodUtil.getPodDeviceState()) as PodDeviceState?
|
||||||
|
|
||||||
|
var podDeviceState = pumpStatus.podDeviceState
|
||||||
|
|
||||||
|
when (podDeviceState) {
|
||||||
|
null,
|
||||||
|
PumpDeviceState.Sleeping -> omnipod_pod_status.text = "{fa-bed} " // + pumpStatus.pumpDeviceState.name());
|
||||||
|
PumpDeviceState.NeverContacted,
|
||||||
|
PumpDeviceState.WakingUp,
|
||||||
|
PumpDeviceState.PumpUnreachable,
|
||||||
|
PumpDeviceState.ErrorWhenCommunicating,
|
||||||
|
PumpDeviceState.TimeoutWhenCommunicating,
|
||||||
|
PumpDeviceState.InvalidConfiguration -> omnipod_pod_status.text = " " + MainApp.gs(podDeviceState.resourceId)
|
||||||
|
PumpDeviceState.Active -> {
|
||||||
|
|
||||||
|
omnipod_pod_status.text = "Active";
|
||||||
|
// val cmd = OmnipodUtil.getCurrentCommand()
|
||||||
|
// if (cmd == null)
|
||||||
|
// omnipod_pod_status.text = " " + MainApp.gs(pumpStatus.pumpDeviceState.resourceId)
|
||||||
|
// else {
|
||||||
|
// log.debug("Command: " + cmd)
|
||||||
|
// val cmdResourceId = cmd.resourceId
|
||||||
|
// if (cmd == MedtronicCommandType.GetHistoryData) {
|
||||||
|
// omnipod_pod_status.text = OmnipodUtil.frameNumber?.let {
|
||||||
|
// MainApp.gs(cmdResourceId, OmnipodUtil.pageNumber, OmnipodUtil.frameNumber)
|
||||||
|
// }
|
||||||
|
// ?: MainApp.gs(R.string.medtronic_cmd_desc_get_history_request, OmnipodUtil.pageNumber)
|
||||||
|
// } else {
|
||||||
|
// omnipod_pod_status.text = " " + (cmdResourceId?.let { MainApp.gs(it) }
|
||||||
|
// ?: cmd.getCommandDescription())
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else -> log.warn("Unknown pump state: " + pumpStatus.podDeviceState)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// pumpStatus.pumpDeviceState = checkStatusSet(pumpStatus.pumpDeviceState,
|
// pumpStatus.pumpDeviceState = checkStatusSet(pumpStatus.pumpDeviceState,
|
||||||
// OmnipodUtil.getPumpDeviceState()) as PumpDeviceState?
|
// OmnipodUtil.getPumpDeviceState()) as PumpDeviceState?
|
||||||
//
|
//
|
||||||
|
|
|
@ -43,12 +43,13 @@ 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.RileyLinkConst;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service.tasks.ResetRileyLinkConfigurationTask;
|
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.common.hw.rileylink.service.tasks.ServiceTaskExecutor;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventRefreshButtonState;
|
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
|
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.OmnipodUIComm;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.ui.OmnipodUITask;
|
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.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.defs.OmnipodCustomActionType;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
|
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.events.EventOmnipodRefreshButtonState;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.service.OmnipodPumpStatus;
|
import info.nightscout.androidaps.plugins.pump.omnipod.service.OmnipodPumpStatus;
|
||||||
|
@ -67,22 +68,23 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
||||||
|
|
||||||
protected static OmnipodPumpPlugin plugin = null;
|
private static OmnipodPumpPlugin plugin = null;
|
||||||
private RileyLinkOmnipodService omnipodService;
|
private RileyLinkOmnipodService omnipodService;
|
||||||
private OmnipodPumpStatus pumpStatusLocal = null;
|
protected OmnipodPumpStatus pumpStatusLocal = null;
|
||||||
private OmnipodUIComm omnipodUIComm = new OmnipodUIComm();
|
protected OmnipodUIComm omnipodUIComm;
|
||||||
|
|
||||||
// variables for handling statuses and history
|
// variables for handling statuses and history
|
||||||
private boolean firstRun = true;
|
protected boolean firstRun = true;
|
||||||
private boolean isRefresh = false;
|
protected boolean isRefresh = false;
|
||||||
private boolean isBasalProfileInvalid = false;
|
private boolean isBasalProfileInvalid = false;
|
||||||
private boolean basalProfileChanged = false;
|
private boolean basalProfileChanged = false;
|
||||||
private boolean isInitialized = false;
|
private boolean isInitialized = false;
|
||||||
private OmnipodCommunicationManager omnipodCommunicationManager;
|
protected OmnipodCommunicationManagerInterface omnipodCommunicationManager;
|
||||||
|
|
||||||
public static boolean isBusy = false;
|
public static boolean isBusy = false;
|
||||||
private List<Long> busyTimestamps = new ArrayList<>();
|
protected List<Long> busyTimestamps = new ArrayList<>();
|
||||||
private boolean sentIdToFirebase = false;
|
protected boolean sentIdToFirebase = false;
|
||||||
|
|
||||||
private boolean hasTimeDateOrTimeZoneChanged = false;
|
private boolean hasTimeDateOrTimeZoneChanged = false;
|
||||||
|
|
||||||
private Profile currentProfile;
|
private Profile currentProfile;
|
||||||
|
@ -102,6 +104,14 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
displayConnectionMessages = false;
|
displayConnectionMessages = false;
|
||||||
|
|
||||||
|
if (omnipodCommunicationManager == null) {
|
||||||
|
omnipodCommunicationManager = OmnipodCommunicationManager.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager);
|
||||||
|
|
||||||
|
OmnipodUtil.setPlugin(this);
|
||||||
|
|
||||||
serviceConnection = new ServiceConnection() {
|
serviceConnection = new ServiceConnection() {
|
||||||
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
public void onServiceDisconnected(ComponentName name) {
|
||||||
|
@ -135,6 +145,11 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected OmnipodPumpPlugin(PluginDescription pluginDescription, PumpType pumpType) {
|
||||||
|
super(pluginDescription, pumpType);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static OmnipodPumpPlugin getPlugin() {
|
public static OmnipodPumpPlugin getPlugin() {
|
||||||
if (plugin == null)
|
if (plugin == null)
|
||||||
plugin = new OmnipodPumpPlugin();
|
plugin = new OmnipodPumpPlugin();
|
||||||
|
@ -288,17 +303,18 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
if (firstRun) {
|
if (firstRun) {
|
||||||
initializePump(!isRefresh);
|
initializePump(!isRefresh);
|
||||||
|
} else {
|
||||||
|
getPodPumpStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// getPodPumpStatus();
|
triggerUIChange();
|
||||||
//
|
}
|
||||||
// if (firstRun) {
|
|
||||||
// initializePump(!isRefresh);
|
private void getPodPumpStatus() {
|
||||||
// } else {
|
// TODO read pod status
|
||||||
// refreshAnyStatusThatNeedsToBeRefreshed();
|
LOG.error("getPodPumpStatus() NOT IMPLEMENTED");
|
||||||
// }
|
|
||||||
//
|
// we would probably need to read Basal Profile here too
|
||||||
// MainApp.bus().post(new EventMedtronicPumpValuesChanged());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -318,34 +334,29 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
if (isLoggingEnabled())
|
if (isLoggingEnabled())
|
||||||
LOG.info(getLogPrefix() + "initializePump - start");
|
LOG.info(getLogPrefix() + "initializePump - start");
|
||||||
|
|
||||||
if (omnipodCommunicationManager == null) {
|
|
||||||
omnipodCommunicationManager = OmnipodCommunicationManager.getInstance();
|
setRefreshButtonEnabled(false);
|
||||||
|
|
||||||
|
String podState = SP.getString(OmnipodConst.Prefs.PodState, null);
|
||||||
|
|
||||||
|
if (podState != null) {
|
||||||
|
PodSessionState podSessionState = OmnipodUtil.getGsonInstance().fromJson(podState, PodSessionState.class);
|
||||||
|
OmnipodUtil.setPodSessionState(podSessionState);
|
||||||
|
|
||||||
|
LOG.debug("PodSessionState (saved): " + podSessionState);
|
||||||
|
|
||||||
|
// TODO handle if session state too old
|
||||||
|
|
||||||
|
// TODO handle basal
|
||||||
|
|
||||||
|
// TODO handle time
|
||||||
|
|
||||||
|
getPodPumpStatus();
|
||||||
|
} else {
|
||||||
|
LOG.debug("No PodSessionState found. Pod probably not running.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// setRefreshButtonEnabled(false);
|
setRefreshButtonEnabled(true);
|
||||||
//
|
|
||||||
// getPodPumpStatus();
|
|
||||||
//
|
|
||||||
// if (isRefresh) {
|
|
||||||
// if (isPumpNotReachable()) {
|
|
||||||
// if (isLoggingEnabled())
|
|
||||||
// LOG.error(getLogPrefix() + "initializePump::Pump unreachable.");
|
|
||||||
// MedtronicUtil.sendNotification(MedtronicNotificationType.PumpUnreachable);
|
|
||||||
//
|
|
||||||
// setRefreshButtonEnabled(true);
|
|
||||||
//
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// MedtronicUtil.dismissNotification(MedtronicNotificationType.PumpUnreachable);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// this.pumpState = PumpDriverState.Connected;
|
|
||||||
//
|
|
||||||
// pumpStatusLocal.setLastCommunicationToNow();
|
|
||||||
// setRefreshButtonEnabled(true);
|
|
||||||
|
|
||||||
// TODO need to read status and BasalProfile if pod inited and pod status and set correct commands enabled
|
|
||||||
|
|
||||||
if (!isRefresh) {
|
if (!isRefresh) {
|
||||||
pumpState = PumpDriverState.Initialized;
|
pumpState = PumpDriverState.Initialized;
|
||||||
|
@ -360,7 +371,6 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
}
|
}
|
||||||
|
|
||||||
isInitialized = true;
|
isInitialized = true;
|
||||||
// this.pumpState = PumpDriverState.Initialized;
|
|
||||||
|
|
||||||
this.firstRun = false;
|
this.firstRun = false;
|
||||||
}
|
}
|
||||||
|
@ -369,7 +379,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
@Override
|
@Override
|
||||||
public boolean isThisProfileSet(Profile profile) {
|
public boolean isThisProfileSet(Profile profile) {
|
||||||
|
|
||||||
// status was not yet read from pod
|
// TODO status was not yet read from pod
|
||||||
if (currentProfile == null) {
|
if (currentProfile == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -404,19 +414,17 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getReservoirLevel() {
|
public double getReservoirLevel() {
|
||||||
// TODO
|
|
||||||
return getPodPumpStatusObject().reservoirRemainingUnits;
|
return getPodPumpStatusObject().reservoirRemainingUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getBatteryLevel() {
|
public int getBatteryLevel() {
|
||||||
// TODO
|
return 75;
|
||||||
return getPodPumpStatusObject().batteryRemaining;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private OmnipodPumpStatus getPodPumpStatusObject() {
|
protected OmnipodPumpStatus getPodPumpStatusObject() {
|
||||||
if (pumpStatusLocal == null) {
|
if (pumpStatusLocal == null) {
|
||||||
// FIXME I don't know why this happens
|
// FIXME I don't know why this happens
|
||||||
if (isLoggingEnabled())
|
if (isLoggingEnabled())
|
||||||
|
@ -429,7 +437,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
|
|
||||||
protected void triggerUIChange() {
|
protected void triggerUIChange() {
|
||||||
MainApp.bus().post(new EventOmnipodPumpValuesChanged());
|
RxBus.INSTANCE.send(new EventOmnipodPumpValuesChanged());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -445,7 +453,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBolus,
|
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBolus,
|
||||||
detailedBolusInfo.insulin);
|
detailedBolusInfo.insulin);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask.returnData;
|
Boolean response = responseTask.wasCommandSuccessful();
|
||||||
|
|
||||||
setRefreshButtonEnabled(true);
|
setRefreshButtonEnabled(true);
|
||||||
|
|
||||||
|
@ -454,7 +462,9 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
TreatmentsPlugin.getPlugin().addToHistoryTreatment(detailedBolusInfo, true);
|
TreatmentsPlugin.getPlugin().addToHistoryTreatment(detailedBolusInfo, true);
|
||||||
|
|
||||||
// we subtract insulin, exact amount will be visible with next remainingInsulin update.
|
// we subtract insulin, exact amount will be visible with next remainingInsulin update.
|
||||||
getPodPumpStatusObject().reservoirRemainingUnits -= detailedBolusInfo.insulin;
|
if (getPodPumpStatusObject().reservoirRemainingUnits != 0) {
|
||||||
|
getPodPumpStatusObject().reservoirRemainingUnits -= detailedBolusInfo.insulin;
|
||||||
|
}
|
||||||
|
|
||||||
incrementStatistics(detailedBolusInfo.isSMB ? OmnipodConst.Statistics.SMBBoluses
|
incrementStatistics(detailedBolusInfo.isSMB ? OmnipodConst.Statistics.SMBBoluses
|
||||||
: OmnipodConst.Statistics.StandardBoluses);
|
: OmnipodConst.Statistics.StandardBoluses);
|
||||||
|
@ -484,22 +494,6 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private PumpEnactResult setNotReachable(boolean isBolus, boolean success) {
|
|
||||||
setRefreshButtonEnabled(true);
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
return new PumpEnactResult() //
|
|
||||||
.success(true) //
|
|
||||||
.enacted(false);
|
|
||||||
} else {
|
|
||||||
return new PumpEnactResult() //
|
|
||||||
.success(false) //
|
|
||||||
.enacted(false) //
|
|
||||||
.comment(MainApp.gs(R.string.medtronic_pump_status_pump_unreachable));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void stopBolusDelivering() {
|
public void stopBolusDelivering() {
|
||||||
|
|
||||||
LOG.info(getLogPrefix() + "stopBolusDelivering");
|
LOG.info(getLogPrefix() + "stopBolusDelivering");
|
||||||
|
@ -510,7 +504,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.CancelBolus);
|
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.CancelBolus);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask.returnData;
|
Boolean response = responseTask.wasCommandSuccessful();
|
||||||
|
|
||||||
setRefreshButtonEnabled(true);
|
setRefreshButtonEnabled(true);
|
||||||
|
|
||||||
|
@ -575,7 +569,8 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
// CANCEL
|
// CANCEL
|
||||||
OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal);
|
OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask2.returnData;
|
Boolean response = responseTask2.wasCommandSuccessful();
|
||||||
|
;
|
||||||
|
|
||||||
if (response) {
|
if (response) {
|
||||||
if (isLoggingEnabled())
|
if (isLoggingEnabled())
|
||||||
|
@ -595,7 +590,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetTemporaryBasal,
|
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetTemporaryBasal,
|
||||||
absoluteRate, durationInMinutes);
|
absoluteRate, durationInMinutes);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask.returnData;
|
Boolean response = responseTask.wasCommandSuccessful();
|
||||||
|
|
||||||
if (isLoggingEnabled())
|
if (isLoggingEnabled())
|
||||||
LOG.info(getLogPrefix() + "setTempBasalAbsolute - setTBR. Response: " + response);
|
LOG.info(getLogPrefix() + "setTempBasalAbsolute - setTBR. Response: " + response);
|
||||||
|
@ -630,7 +625,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TempBasalPair readTBR() {
|
protected TempBasalPair readTBR() {
|
||||||
// TODO we can do it like this or read status from pod ??
|
// TODO we can do it like this or read status from pod ??
|
||||||
if (pumpStatusLocal.tempBasalEnd < System.currentTimeMillis()) {
|
if (pumpStatusLocal.tempBasalEnd < System.currentTimeMillis()) {
|
||||||
// TBR done
|
// TBR done
|
||||||
|
@ -643,7 +638,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void finishAction(String overviewKey) {
|
protected void finishAction(String overviewKey) {
|
||||||
if (overviewKey != null)
|
if (overviewKey != null)
|
||||||
MainApp.bus().post(new EventRefreshOverview(overviewKey));
|
MainApp.bus().post(new EventRefreshOverview(overviewKey));
|
||||||
|
|
||||||
|
@ -653,16 +648,16 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private long getTimeInFutureFromMinutes(int minutes) {
|
protected long getTimeInFutureFromMinutes(int minutes) {
|
||||||
return System.currentTimeMillis() + getTimeInMs(minutes);
|
return System.currentTimeMillis() + getTimeInMs(minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private long getTimeInMs(int minutes) {
|
protected long getTimeInMs(int minutes) {
|
||||||
return getTimeInS(minutes) * 1000L;
|
return getTimeInS(minutes) * 1000L;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTimeInS(int minutes) {
|
protected int getTimeInS(int minutes) {
|
||||||
return minutes * 60;
|
return minutes * 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,7 +683,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal);
|
OmnipodUITask responseTask2 = omnipodUIComm.executeCommand(OmnipodCommandType.CancelTemporaryBasal);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask2.returnData;
|
Boolean response = responseTask2.wasCommandSuccessful();
|
||||||
|
|
||||||
finishAction("TBR");
|
finishAction("TBR");
|
||||||
|
|
||||||
|
@ -738,7 +733,7 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBasalProfile,
|
OmnipodUITask responseTask = omnipodUIComm.executeCommand(OmnipodCommandType.SetBasalProfile,
|
||||||
profile);
|
profile);
|
||||||
|
|
||||||
Boolean response = (Boolean) responseTask.returnData;
|
Boolean response = responseTask.wasCommandSuccessful();
|
||||||
|
|
||||||
if (isLoggingEnabled())
|
if (isLoggingEnabled())
|
||||||
LOG.info(getLogPrefix() + "Basal Profile was set: " + response);
|
LOG.info(getLogPrefix() + "Basal Profile was set: " + response);
|
||||||
|
@ -756,18 +751,18 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
// OPERATIONS not supported by Pump or Plugin
|
// OPERATIONS not supported by Pump or Plugin
|
||||||
|
|
||||||
private List<CustomAction> customActions = null;
|
protected List<CustomAction> customActions = null;
|
||||||
|
|
||||||
private CustomAction customActionResetRLConfig = new CustomAction(
|
private CustomAction customActionResetRLConfig = new CustomAction(
|
||||||
R.string.medtronic_custom_action_reset_rileylink, OmnipodCustomActionType.ResetRileyLinkConfiguration, true);
|
R.string.medtronic_custom_action_reset_rileylink, OmnipodCustomActionType.ResetRileyLinkConfiguration, true);
|
||||||
|
|
||||||
private CustomAction customActionInitPod = new CustomAction(
|
protected CustomAction customActionInitPod = new CustomAction(
|
||||||
R.string.omnipod_cmd_init_pod, OmnipodCustomActionType.InitPod, true);
|
R.string.omnipod_cmd_init_pod, OmnipodCustomActionType.InitPod, true);
|
||||||
|
|
||||||
private CustomAction customActionDeactivatePod = new CustomAction(
|
protected CustomAction customActionDeactivatePod = new CustomAction(
|
||||||
R.string.omnipod_cmd_deactivate_pod, OmnipodCustomActionType.DeactivatePod, false);
|
R.string.omnipod_cmd_deactivate_pod, OmnipodCustomActionType.DeactivatePod, false);
|
||||||
|
|
||||||
private CustomAction customActionResetPod = new CustomAction(
|
protected CustomAction customActionResetPod = new CustomAction(
|
||||||
R.string.omnipod_cmd_reset_pod, OmnipodCustomActionType.ResetPodStatus, true);
|
R.string.omnipod_cmd_reset_pod, OmnipodCustomActionType.ResetPodStatus, true);
|
||||||
|
|
||||||
|
|
||||||
|
@ -776,7 +771,10 @@ public class OmnipodPumpPlugin extends PumpPluginAbstract implements PumpInterfa
|
||||||
|
|
||||||
if (customActions == null) {
|
if (customActions == null) {
|
||||||
this.customActions = Arrays.asList(
|
this.customActions = Arrays.asList(
|
||||||
customActionResetRLConfig);
|
customActionResetRLConfig, //
|
||||||
|
customActionInitPod, //
|
||||||
|
customActionDeactivatePod, //
|
||||||
|
customActionResetPod);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.customActions;
|
return this.customActions;
|
||||||
|
|
|
@ -14,8 +14,8 @@ 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.data.RLMessage;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.ble.defs.RLMessageType;
|
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.OmnipodManager;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.action.PairAction;
|
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse;
|
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.defs.state.PodSessionState;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
|
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
|
||||||
import info.nightscout.androidaps.utils.SP;
|
import info.nightscout.androidaps.utils.SP;
|
||||||
|
@ -46,13 +46,10 @@ public class OmnipodCommunicationManager extends RileyLinkCommunicationManager i
|
||||||
private PodSessionState getPodSessionState() {
|
private PodSessionState getPodSessionState() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static OmnipodCommunicationManager getInstance() {
|
public static OmnipodCommunicationManager getInstance() {
|
||||||
return omnipodCommunicationManager;
|
return omnipodCommunicationManager;
|
||||||
}
|
}
|
||||||
|
@ -102,7 +99,6 @@ public class OmnipodCommunicationManager extends RileyLinkCommunicationManager i
|
||||||
omnipodManager.pairAndPrime();
|
omnipodManager.pairAndPrime();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,4 +136,9 @@ public class OmnipodCommunicationManager extends RileyLinkCommunicationManager i
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PodCommResponse acknowledgeAlerts() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,10 @@ public class PodCommResponse {
|
||||||
Object customData;
|
Object customData;
|
||||||
Object errorResponse;
|
Object errorResponse;
|
||||||
|
|
||||||
|
public boolean isAcknowledged() {
|
||||||
|
return (acknowledged != null && acknowledged);
|
||||||
|
}
|
||||||
|
|
||||||
// some status data if it can be returned (battery, reservoir, etc)
|
// some status data if it can be returned (battery, reservoir, etc)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.comm.OmnipodCommunicationManager;
|
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.defs.OmnipodCommandType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
|
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
|
||||||
|
|
||||||
|
@ -15,18 +16,18 @@ public class OmnipodUIComm {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
||||||
|
|
||||||
OmnipodCommunicationManager ocmInstance = null;
|
OmnipodCommunicationManagerInterface ocmInstance = null;
|
||||||
OmnipodUIPostprocessor uiPostprocessor = new OmnipodUIPostprocessor();
|
OmnipodUIPostprocessor uiPostprocessor = new OmnipodUIPostprocessor();
|
||||||
|
|
||||||
|
|
||||||
private OmnipodCommunicationManager getCommunicationManager() {
|
private OmnipodCommunicationManagerInterface getCommunicationManager() {
|
||||||
if (ocmInstance == null) {
|
|
||||||
ocmInstance = OmnipodCommunicationManager.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ocmInstance;
|
return ocmInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OmnipodUIComm(OmnipodCommunicationManagerInterface communicationManager) {
|
||||||
|
ocmInstance = communicationManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public synchronized OmnipodUITask executeCommand(OmnipodCommandType commandType, Object... parameters) {
|
public synchronized OmnipodUITask executeCommand(OmnipodCommandType commandType, Object... parameters) {
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,18 @@ package info.nightscout.androidaps.plugins.pump.omnipod.comm.ui;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
|
||||||
import info.nightscout.androidaps.data.Profile;
|
import info.nightscout.androidaps.data.Profile;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.data.dto.TempBasalPair;
|
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
|
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.events.EventMedtronicPumpValuesChanged;
|
import info.nightscout.androidaps.plugins.pump.omnipod.comm.data.PodCommResponse;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
|
|
||||||
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.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.PodResponseType;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodResponseType;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange;
|
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodPumpValuesChanged;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by andy on 4.8.2019
|
* Created by andy on 4.8.2019
|
||||||
|
@ -24,7 +25,7 @@ public class OmnipodUITask {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
||||||
|
|
||||||
public OmnipodCommandType commandType;
|
public OmnipodCommandType commandType;
|
||||||
public Object returnData;
|
public PodCommResponse returnData;
|
||||||
private String errorDescription;
|
private String errorDescription;
|
||||||
private Object[] parameters;
|
private Object[] parameters;
|
||||||
private PodResponseType responseType;
|
private PodResponseType responseType;
|
||||||
|
@ -41,7 +42,7 @@ public class OmnipodUITask {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void execute(OmnipodCommunicationManager communicationManager) {
|
public void execute(OmnipodCommunicationManagerInterface communicationManager) {
|
||||||
|
|
||||||
if (isLogEnabled())
|
if (isLogEnabled())
|
||||||
LOG.debug("OmnipodUITask: @@@ In execute. {}", commandType);
|
LOG.debug("OmnipodUITask: @@@ In execute. {}", commandType);
|
||||||
|
@ -100,6 +101,8 @@ public class OmnipodUITask {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO response
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,19 +149,19 @@ public class OmnipodUITask {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (responseType == PodResponseType.Invalid) {
|
if (responseType == PodResponseType.Invalid) {
|
||||||
statusChange = new EventOmnipodDeviceStatusChange(PumpDeviceState.ErrorWhenCommunicating,
|
statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating,
|
||||||
"Unsupported command in OmnipodUITask");
|
"Unsupported command in OmnipodUITask");
|
||||||
MainApp.bus().post(statusChange);
|
RxBus.INSTANCE.send(statusChange);
|
||||||
} else if (responseType == PodResponseType.Error) {
|
} else if (responseType == PodResponseType.Error) {
|
||||||
statusChange = new EventOmnipodDeviceStatusChange(PumpDeviceState.ErrorWhenCommunicating,
|
statusChange = new EventOmnipodDeviceStatusChange(PodDeviceState.ErrorWhenCommunicating,
|
||||||
errorDescription);
|
errorDescription);
|
||||||
MainApp.bus().post(statusChange);
|
RxBus.INSTANCE.send(statusChange);
|
||||||
} else {
|
} else {
|
||||||
MainApp.bus().post(new EventMedtronicPumpValuesChanged());
|
OmnipodUtil.getPumpStatus().setLastCommunicationToNow();
|
||||||
MedtronicUtil.getPumpStatus().setLastCommunicationToNow();
|
RxBus.INSTANCE.send(new EventOmnipodPumpValuesChanged());
|
||||||
}
|
}
|
||||||
|
|
||||||
MedtronicUtil.setCurrentCommand(null);
|
OmnipodUtil.setPodDeviceState(PodDeviceState.Sleeping);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,4 +184,12 @@ public class OmnipodUITask {
|
||||||
return this.responseType;
|
return this.responseType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean wasCommandSuccessful() {
|
||||||
|
if (returnData == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return returnData.isAcknowledged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package info.nightscout.androidaps.plugins.pump.omnipod.comm;
|
package info.nightscout.androidaps.plugins.pump.omnipod.defs;
|
||||||
|
|
||||||
import info.nightscout.androidaps.data.Profile;
|
import info.nightscout.androidaps.data.Profile;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
|
import info.nightscout.androidaps.plugins.pump.common.data.TempBasalPair;
|
||||||
|
@ -57,5 +57,10 @@ public interface OmnipodCommunicationManagerInterface {
|
||||||
*/
|
*/
|
||||||
PodCommResponse cancelTemporaryBasal();
|
PodCommResponse cancelTemporaryBasal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acknowledge alerts
|
||||||
|
*/
|
||||||
|
PodCommResponse acknowledgeAlerts();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -18,6 +18,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.defs.FirmwareVersion;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.NonceState;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.NonceState;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.SetupProgress;
|
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.BasalSchedule;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.events.EventOmnipodDeviceStatusChange;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmniCRC;
|
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmniCRC;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.util.OmnipodConst;
|
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.util.OmnipodUtil;
|
||||||
|
@ -202,8 +203,16 @@ public class PodSessionState extends PodState {
|
||||||
private void store() {
|
private void store() {
|
||||||
Gson gson = OmnipodUtil.getGsonInstance();
|
Gson gson = OmnipodUtil.getGsonInstance();
|
||||||
SP.putString(OmnipodConst.Prefs.PodState, gson.toJson(this));
|
SP.putString(OmnipodConst.Prefs.PodState, gson.toJson(this));
|
||||||
|
OmnipodUtil.setPodSessionState(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getExpiryDateAsString() {
|
||||||
|
// TODO
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "PodSessionState{" +
|
return "PodSessionState{" +
|
||||||
|
|
|
@ -3,7 +3,8 @@ package info.nightscout.androidaps.plugins.pump.omnipod.events;
|
||||||
import info.nightscout.androidaps.events.Event;
|
import info.nightscout.androidaps.events.Event;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError;
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpDeviceState;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.PodDeviceState;
|
||||||
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.state.PodSessionState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by andy on 4.8.2019
|
* Created by andy on 4.8.2019
|
||||||
|
@ -13,8 +14,9 @@ public class EventOmnipodDeviceStatusChange extends Event {
|
||||||
public RileyLinkServiceState rileyLinkServiceState;
|
public RileyLinkServiceState rileyLinkServiceState;
|
||||||
public RileyLinkError rileyLinkError;
|
public RileyLinkError rileyLinkError;
|
||||||
|
|
||||||
public PumpDeviceState pumpDeviceState;
|
public PodSessionState podSessionState;
|
||||||
public String errorDescription;
|
public String errorDescription;
|
||||||
|
public PodDeviceState podDeviceState;
|
||||||
|
|
||||||
|
|
||||||
public EventOmnipodDeviceStatusChange(RileyLinkServiceState rileyLinkServiceState) {
|
public EventOmnipodDeviceStatusChange(RileyLinkServiceState rileyLinkServiceState) {
|
||||||
|
@ -28,20 +30,27 @@ public class EventOmnipodDeviceStatusChange extends Event {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public EventOmnipodDeviceStatusChange(PumpDeviceState pumpDeviceState) {
|
public EventOmnipodDeviceStatusChange(PodSessionState podSessionState) {
|
||||||
this.pumpDeviceState = pumpDeviceState;
|
this.podSessionState = podSessionState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public EventOmnipodDeviceStatusChange(PumpDeviceState pumpDeviceState, String errorDescription) {
|
public EventOmnipodDeviceStatusChange(String errorDescription) {
|
||||||
this.pumpDeviceState = pumpDeviceState;
|
this.errorDescription = errorDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EventOmnipodDeviceStatusChange(PodDeviceState podDeviceState, String errorDescription) {
|
||||||
|
this.podDeviceState = podDeviceState;
|
||||||
this.errorDescription = errorDescription;
|
this.errorDescription = errorDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "EventOmnipodDeviceStatusChange [" + "rileyLinkServiceState=" + rileyLinkServiceState
|
return "EventOmnipodDeviceStatusChange [" //
|
||||||
+ ", rileyLinkError=" + rileyLinkError + ", pumpDeviceState=" + pumpDeviceState + ']';
|
+ "rileyLinkServiceState=" + rileyLinkServiceState
|
||||||
|
+ ", rileyLinkError=" + rileyLinkError //
|
||||||
|
+ ", podSessionState=" + podSessionState //
|
||||||
|
+ ", podDeviceState=" + podDeviceState + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.androidaps.plugins.pump.omnipod.service;
|
package info.nightscout.androidaps.plugins.pump.omnipod.service;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.joda.time.LocalDateTime;
|
import org.joda.time.LocalDateTime;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -14,6 +15,8 @@ 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.RileyLinkConst;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError;
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkError;
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
|
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
|
||||||
|
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.util.OmnipodConst;
|
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.util.OmnipodUtil;
|
||||||
import info.nightscout.androidaps.utils.SP;
|
import info.nightscout.androidaps.utils.SP;
|
||||||
|
@ -37,12 +40,14 @@ public class OmnipodPumpStatus extends PumpStatus {
|
||||||
public long tempBasalEnd;
|
public long tempBasalEnd;
|
||||||
public Double tempBasalAmount = 0.0d;
|
public Double tempBasalAmount = 0.0d;
|
||||||
public Integer tempBasalLength;
|
public Integer tempBasalLength;
|
||||||
|
public PodSessionState podSessionState;
|
||||||
|
|
||||||
private boolean rileyLinkAddressChanged = false;
|
private boolean rileyLinkAddressChanged = false;
|
||||||
private String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
|
private String regexMac = "([\\da-fA-F]{1,2}(?:\\:|$)){6}";
|
||||||
|
|
||||||
|
|
||||||
public String podNumber;
|
public String podNumber;
|
||||||
|
public PodDeviceState podDeviceState = PodDeviceState.NeverContacted;
|
||||||
|
|
||||||
|
|
||||||
public OmnipodPumpStatus(PumpDescription pumpDescription) {
|
public OmnipodPumpStatus(PumpDescription pumpDescription) {
|
||||||
|
|
|
@ -8,6 +8,8 @@ import com.google.gson.JsonDeserializer;
|
||||||
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonPrimitive;
|
||||||
import com.google.gson.JsonSerializer;
|
import com.google.gson.JsonSerializer;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
import org.joda.time.format.ISODateTimeFormat;
|
import org.joda.time.format.ISODateTimeFormat;
|
||||||
|
@ -19,14 +21,15 @@ import java.util.List;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.logging.L;
|
import info.nightscout.androidaps.logging.L;
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
|
import info.nightscout.androidaps.plugins.bus.RxBus;
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
|
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
|
|
||||||
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
|
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.common.hw.rileylink.data.RLHistoryItem;
|
||||||
import info.nightscout.androidaps.plugins.pump.medtronic.defs.MedtronicNotificationType;
|
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.OmnipodCommunicationManager;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
|
import info.nightscout.androidaps.plugins.pump.omnipod.defs.OmnipodCommandType;
|
||||||
|
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;
|
||||||
import info.nightscout.androidaps.plugins.pump.omnipod.service.OmnipodPumpStatus;
|
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.service.RileyLinkOmnipodService;
|
||||||
import info.nightscout.androidaps.utils.OKDialog;
|
import info.nightscout.androidaps.utils.OKDialog;
|
||||||
|
@ -44,6 +47,9 @@ public class OmnipodUtil extends RileyLinkUtil {
|
||||||
private static OmnipodPumpStatus omnipodPumpStatus;
|
private static OmnipodPumpStatus omnipodPumpStatus;
|
||||||
private static OmnipodCommandType currentCommand;
|
private static OmnipodCommandType currentCommand;
|
||||||
private static Gson gsonInstance = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
private static Gson gsonInstance = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
||||||
|
private static PodSessionState podSessionState;
|
||||||
|
private static PodDeviceState podDeviceState;
|
||||||
|
private static OmnipodPumpPlugin omnipodPumpPlugin;
|
||||||
|
|
||||||
public static Gson getGsonInstance() {
|
public static Gson getGsonInstance() {
|
||||||
return gsonInstance;
|
return gsonInstance;
|
||||||
|
@ -84,29 +90,6 @@ public class OmnipodUtil extends RileyLinkUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void sendNotification(MedtronicNotificationType notificationType) {
|
|
||||||
Notification notification = new Notification( //
|
|
||||||
notificationType.getNotificationType(), //
|
|
||||||
MainApp.gs(notificationType.getResourceId()), //
|
|
||||||
notificationType.getNotificationUrgency());
|
|
||||||
MainApp.bus().post(new EventNewNotification(notification));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void sendNotification(MedtronicNotificationType notificationType, Object... parameters) {
|
|
||||||
Notification notification = new Notification( //
|
|
||||||
notificationType.getNotificationType(), //
|
|
||||||
MainApp.gs(notificationType.getResourceId(), parameters), //
|
|
||||||
notificationType.getNotificationUrgency());
|
|
||||||
MainApp.bus().post(new EventNewNotification(notification));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void dismissNotification(MedtronicNotificationType notificationType) {
|
|
||||||
MainApp.bus().post(new EventDismissNotification(notificationType.getNotificationType()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean isLowLevelDebug() {
|
public static boolean isLowLevelDebug() {
|
||||||
return lowLevelDebug;
|
return lowLevelDebug;
|
||||||
}
|
}
|
||||||
|
@ -179,4 +162,33 @@ public class OmnipodUtil extends RileyLinkUtil {
|
||||||
|
|
||||||
return gsonBuilder.create();
|
return gsonBuilder.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setPodSessionState(PodSessionState podSessionState) {
|
||||||
|
omnipodPumpStatus.podSessionState = podSessionState;
|
||||||
|
RxBus.INSTANCE.send(new EventOmnipodDeviceStatusChange(podSessionState));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static PodDeviceState getPodDeviceState() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void setPodDeviceState(PodDeviceState podDeviceState) {
|
||||||
|
OmnipodUtil.podDeviceState = podDeviceState;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static OmnipodPumpPlugin getPlugin() {
|
||||||
|
return OmnipodUtil.omnipodPumpPlugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static void setPlugin(OmnipodPumpPlugin pumpPlugin) {
|
||||||
|
OmnipodUtil.omnipodPumpPlugin = pumpPlugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,325 @@
|
||||||
|
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.
|
||||||
|
*
|
||||||
|
* @author Andy Rozman (andy.rozman@gmail.com)
|
||||||
|
*/
|
||||||
|
public class OmnipodDashPumpPlugin extends OmnipodPumpPlugin implements PumpInterface {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(L.PUMP);
|
||||||
|
|
||||||
|
protected static OmnipodDashPumpPlugin plugin = null;
|
||||||
|
private RileyLinkOmnipodService omnipodService;
|
||||||
|
private OmnipodPumpStatus pumpStatusLocal = null;
|
||||||
|
|
||||||
|
// variables for handling statuses and history
|
||||||
|
private boolean firstRun = true;
|
||||||
|
private boolean isRefresh = false;
|
||||||
|
private boolean isBasalProfileInvalid = false;
|
||||||
|
private boolean basalProfileChanged = false;
|
||||||
|
private boolean isInitialized = false;
|
||||||
|
|
||||||
|
public static boolean isBusy = false;
|
||||||
|
private List<Long> busyTimestamps = new ArrayList<>();
|
||||||
|
private boolean sentIdToFirebase = false;
|
||||||
|
private boolean hasTimeDateOrTimeZoneChanged = false;
|
||||||
|
|
||||||
|
private Profile currentProfile;
|
||||||
|
|
||||||
|
|
||||||
|
private OmnipodDashPumpPlugin() {
|
||||||
|
|
||||||
|
super(new PluginDescription() //
|
||||||
|
.mainType(PluginType.PUMP) //
|
||||||
|
.fragmentClass(OmnipodFragment.class.getName()) //
|
||||||
|
.pluginName(R.string.omnipod_dash_name) //
|
||||||
|
.shortName(R.string.omnipod_dash_name_short) //
|
||||||
|
.preferencesId(R.xml.pref_omnipod) //
|
||||||
|
.description(R.string.description_pump_omnipod_dash), //
|
||||||
|
PumpType.Insulet_Omnipod_Dash
|
||||||
|
);
|
||||||
|
|
||||||
|
displayConnectionMessages = false;
|
||||||
|
|
||||||
|
if (omnipodCommunicationManager == null) {
|
||||||
|
omnipodCommunicationManager = OmnipodDashCommunicationManager.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
omnipodUIComm = new OmnipodUIComm(omnipodCommunicationManager);
|
||||||
|
|
||||||
|
OmnipodUtil.setPlugin(this);
|
||||||
|
|
||||||
|
// FIXME
|
||||||
|
// serviceConnection = new ServiceConnection() {
|
||||||
|
//
|
||||||
|
// public void onServiceDisconnected(ComponentName name) {
|
||||||
|
// if (isLoggingEnabled())
|
||||||
|
// LOG.debug("RileyLinkOmnipodService is disconnected");
|
||||||
|
// omnipodService = null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
|
// if (isLoggingEnabled())
|
||||||
|
// LOG.debug("RileyLinkOmnipodService is connected");
|
||||||
|
// RileyLinkOmnipodService.LocalBinder mLocalBinder = (RileyLinkOmnipodService.LocalBinder) service;
|
||||||
|
// omnipodService = mLocalBinder.getServiceInstance();
|
||||||
|
//
|
||||||
|
// new Thread(() -> {
|
||||||
|
//
|
||||||
|
// for (int i = 0; i < 20; i++) {
|
||||||
|
// SystemClock.sleep(5000);
|
||||||
|
//
|
||||||
|
// if (OmnipodUtil.getPumpStatus() != null) {
|
||||||
|
// if (isLoggingEnabled())
|
||||||
|
// LOG.debug("Starting OmniPod-RileyLink service");
|
||||||
|
// if (OmnipodUtil.getPumpStatus().setNotInPreInit()) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }).start();
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static OmnipodDashPumpPlugin getPlugin() {
|
||||||
|
if (plugin == null)
|
||||||
|
plugin = new OmnipodDashPumpPlugin();
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String getLogPrefix() {
|
||||||
|
return "OmnipodPlugin::";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// FIXME
|
||||||
|
public Class getServiceClass() {
|
||||||
|
return RileyLinkOmnipodService.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String deviceID() {
|
||||||
|
return "Omnipod Dash";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Pump Plugin
|
||||||
|
|
||||||
|
private boolean isServiceSet() {
|
||||||
|
return omnipodService != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInitialized() {
|
||||||
|
if (isLoggingEnabled() && displayConnectionMessages)
|
||||||
|
LOG.debug(getLogPrefix() + "isInitialized");
|
||||||
|
return isServiceSet() && isInitialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isConnected() {
|
||||||
|
if (isLoggingEnabled() && displayConnectionMessages)
|
||||||
|
LOG.debug(getLogPrefix() + "isConnected");
|
||||||
|
return isServiceSet() && omnipodService.isInitialized();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isConnecting() {
|
||||||
|
if (isLoggingEnabled() && displayConnectionMessages)
|
||||||
|
LOG.debug(getLogPrefix() + "isConnecting");
|
||||||
|
return !isServiceSet() || !omnipodService.isInitialized();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getPumpStatus() {
|
||||||
|
|
||||||
|
if (firstRun) {
|
||||||
|
initializePump(!isRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
// getPodPumpStatus();
|
||||||
|
//
|
||||||
|
// if (firstRun) {
|
||||||
|
// initializePump(!isRefresh);
|
||||||
|
// } else {
|
||||||
|
// refreshAnyStatusThatNeedsToBeRefreshed();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// MainApp.bus().post(new EventMedtronicPumpValuesChanged());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void resetStatusState() {
|
||||||
|
firstRun = true;
|
||||||
|
isRefresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setRefreshButtonEnabled(boolean enabled) {
|
||||||
|
RxBus.INSTANCE.send(new EventOmnipodRefreshButtonState(enabled));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initializePump(boolean realInit) {
|
||||||
|
|
||||||
|
if (isLoggingEnabled())
|
||||||
|
LOG.info(getLogPrefix() + "initializePump - start");
|
||||||
|
|
||||||
|
if (omnipodCommunicationManager == null) {
|
||||||
|
omnipodCommunicationManager = OmnipodDashCommunicationManager.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
// setRefreshButtonEnabled(false);
|
||||||
|
//
|
||||||
|
// getPodPumpStatus();
|
||||||
|
//
|
||||||
|
// if (isRefresh) {
|
||||||
|
// if (isPumpNotReachable()) {
|
||||||
|
// if (isLoggingEnabled())
|
||||||
|
// LOG.error(getLogPrefix() + "initializePump::Pump unreachable.");
|
||||||
|
// MedtronicUtil.sendNotification(MedtronicNotificationType.PumpUnreachable);
|
||||||
|
//
|
||||||
|
// setRefreshButtonEnabled(true);
|
||||||
|
//
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// MedtronicUtil.dismissNotification(MedtronicNotificationType.PumpUnreachable);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// this.pumpState = PumpDriverState.Connected;
|
||||||
|
//
|
||||||
|
// pumpStatusLocal.setLastCommunicationToNow();
|
||||||
|
// setRefreshButtonEnabled(true);
|
||||||
|
|
||||||
|
// TODO need to read status and BasalProfile if pod inited and pod status and set correct commands enabled
|
||||||
|
|
||||||
|
if (!isRefresh) {
|
||||||
|
pumpState = PumpDriverState.Initialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sentIdToFirebase) {
|
||||||
|
Bundle params = new Bundle();
|
||||||
|
params.putString("version", BuildConfig.VERSION);
|
||||||
|
MainApp.getFirebaseAnalytics().logEvent("OmnipodPumpInit", params);
|
||||||
|
|
||||||
|
sentIdToFirebase = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
isInitialized = true;
|
||||||
|
// this.pumpState = PumpDriverState.Initialized;
|
||||||
|
|
||||||
|
this.firstRun = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void triggerUIChange() {
|
||||||
|
MainApp.bus().post(new EventOmnipodPumpValuesChanged());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// OPERATIONS not supported by Pump or Plugin
|
||||||
|
|
||||||
|
//private List<CustomAction> customActions = null;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomAction> getCustomActions() {
|
||||||
|
|
||||||
|
if (customActions == null) {
|
||||||
|
this.customActions = Arrays.asList(
|
||||||
|
customActionInitPod, //
|
||||||
|
customActionDeactivatePod, //
|
||||||
|
customActionResetPod);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.customActions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void timeDateOrTimeZoneChanged() {
|
||||||
|
|
||||||
|
// if (isLoggingEnabled())
|
||||||
|
// LOG.warn(getLogPrefix() + "Time, Date and/or TimeZone changed. ");
|
||||||
|
//
|
||||||
|
// this.hasTimeDateOrTimeZoneChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
package info.nightscout.androidaps.plugins.pump.omnipod_dash.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.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;
|
||||||
|
import info.nightscout.androidaps.utils.SP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by andy on 4.8.2019
|
||||||
|
*/
|
||||||
|
public class OmnipodDashCommunicationManager implements OmnipodCommunicationManagerInterface {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(L.PUMPCOMM);
|
||||||
|
|
||||||
|
private static OmnipodDashCommunicationManager omnipodCommunicationManager;
|
||||||
|
String errorMessage;
|
||||||
|
|
||||||
|
|
||||||
|
public OmnipodDashCommunicationManager(Context context, RFSpy rfspy) {
|
||||||
|
omnipodCommunicationManager = this;
|
||||||
|
OmnipodUtil.getPumpStatus().previousConnection = SP.getLong(
|
||||||
|
RileyLinkConst.Prefs.LastGoodDeviceCommunicationTime, 0L);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private PodSessionState getPodSessionState() {
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static OmnipodDashCommunicationManager getInstance() {
|
||||||
|
return omnipodCommunicationManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//@Override
|
||||||
|
protected void configurePumpSpecificSettings() {
|
||||||
|
//pumpStatus = OmnipodUtil.getPumpStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getErrorResponse() {
|
||||||
|
return this.errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -99,6 +99,83 @@
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:background="@color/listdelimiter" />
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<!-- Pod Address -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1.5"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/omnipod_pod_address"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/omnipod_pod_address"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Pod Address -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1.5"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/omnipod_pod_expiry"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/omnipod_pod_expiry"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -426,6 +503,52 @@
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:background="@color/listdelimiter" />
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1.5"
|
||||||
|
android:gravity="end"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:text="@string/omnipod_pod_active_alerts"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:paddingEnd="2dp"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:text=":"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/omnipod_pod_active_alerts"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="2dip"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:layout_marginRight="20dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
@ -466,6 +589,17 @@
|
||||||
android:paddingRight="0dp"
|
android:paddingRight="0dp"
|
||||||
android:text="@string/omnipod_pod_mgmt" />
|
android:text="@string/omnipod_pod_mgmt" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/omnipod_pod_active_alerts_ack"
|
||||||
|
style="@style/ButtonSmallFontStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:drawableTop="@drawable/icon_cp_aaps_offline"
|
||||||
|
android:paddingLeft="0dp"
|
||||||
|
android:paddingRight="0dp"
|
||||||
|
android:text="@string/omnipod_ack_short" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/omnipod_stats"
|
android:id="@+id/omnipod_stats"
|
||||||
style="@style/ButtonSmallFontStyle"
|
style="@style/ButtonSmallFontStyle"
|
||||||
|
|
|
@ -1674,6 +1674,12 @@
|
||||||
<string name="omnipod_pod_status">Pod Status</string>
|
<string name="omnipod_pod_status">Pod Status</string>
|
||||||
<string name="omnipod_reservoir_left">%1$d U left</string>
|
<string name="omnipod_reservoir_left">%1$d U left</string>
|
||||||
<string name="omnipod_reservoir_over50">Over 50 U</string>
|
<string name="omnipod_reservoir_over50">Over 50 U</string>
|
||||||
|
<string name="omnipod_pod_address">Pod Address</string>
|
||||||
|
<string name="omnipod_pod_expiry">Pod Expires</string>
|
||||||
|
<string name="omnipod_pod_name_no_info">No info</string>
|
||||||
|
<string name="omnipod_pod_active_alerts">Active Pod Alerts</string>
|
||||||
|
<string name="omnipod_ack_short">Ack Alerts</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- Omnipod - Error -->
|
<!-- Omnipod - Error -->
|
||||||
<string name="omnipod_error_operation_not_possible_no_configuration">Operation is not possible.\n\n You need to configure Omnipod first, before you can use this operation.</string>
|
<string name="omnipod_error_operation_not_possible_no_configuration">Operation is not possible.\n\n You need to configure Omnipod first, before you can use this operation.</string>
|
||||||
|
@ -1689,6 +1695,15 @@
|
||||||
<string name="omnipod_namexxx" translatable="false">Omnipod</string>
|
<string name="omnipod_namexxx" translatable="false">Omnipod</string>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Omnipod Dash -->
|
||||||
|
|
||||||
|
<!-- Omnipod - Base -->
|
||||||
|
<string name="omnipod_dash_name" translatable="false">Omnipod Dash</string>
|
||||||
|
<string name="omnipod_dash_name_short" translatable="false">DASH</string>
|
||||||
|
<string name="description_pump_omnipod_dash">Pump integration for Omnipod Dash.</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<plurals name="objective_days">
|
<plurals name="objective_days">
|
||||||
<item quantity="one">%1$d day</item>
|
<item quantity="one">%1$d day</item>
|
||||||
<item quantity="other">%1$d days</item>
|
<item quantity="other">%1$d days</item>
|
||||||
|
|
Loading…
Reference in a new issue