Initial take on bolus progress reporting.
This commit is contained in:
parent
a230501f74
commit
c1ecad1ed6
|
@ -14,12 +14,18 @@ import java.util.Locale;
|
||||||
import de.jotomo.ruffyscripter.PumpState;
|
import de.jotomo.ruffyscripter.PumpState;
|
||||||
import de.jotomo.ruffyscripter.RuffyScripter;
|
import de.jotomo.ruffyscripter.RuffyScripter;
|
||||||
|
|
||||||
|
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.BOLUSING;
|
||||||
|
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.FINISHED;
|
||||||
|
import static de.jotomo.ruffyscripter.commands.ProgressReportCallback.State.PREPARING;
|
||||||
|
|
||||||
public class BolusCommand implements Command {
|
public class BolusCommand implements Command {
|
||||||
private static final Logger log = LoggerFactory.getLogger(BolusCommand.class);
|
private static final Logger log = LoggerFactory.getLogger(BolusCommand.class);
|
||||||
|
|
||||||
private final double bolus;
|
private final double bolus;
|
||||||
|
private final ProgressReportCallback progressReportCallback;
|
||||||
|
|
||||||
public BolusCommand(double bolus) {
|
public BolusCommand(double bolus, ProgressReportCallback progressReportCallback) {
|
||||||
|
this.progressReportCallback = progressReportCallback;
|
||||||
this.bolus = bolus;
|
this.bolus = bolus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +42,7 @@ public class BolusCommand implements Command {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(RuffyScripter scripter, PumpState initialPumpState) {
|
public CommandResult execute(RuffyScripter scripter, PumpState initialPumpState) {
|
||||||
|
progressReportCallback.progress(PREPARING, 0, 0);
|
||||||
try {
|
try {
|
||||||
enterBolusMenu(scripter);
|
enterBolusMenu(scripter);
|
||||||
|
|
||||||
|
@ -45,6 +52,7 @@ public class BolusCommand implements Command {
|
||||||
// confirm bolus
|
// confirm bolus
|
||||||
scripter.verifyMenuIsDisplayed(MenuType.BOLUS_ENTER);
|
scripter.verifyMenuIsDisplayed(MenuType.BOLUS_ENTER);
|
||||||
scripter.pressCheckKey();
|
scripter.pressCheckKey();
|
||||||
|
progressReportCallback.progress(BOLUSING, 0, 0);
|
||||||
|
|
||||||
// the pump displays the entered bolus and waits a bit to let user check and cancel
|
// the pump displays the entered bolus and waits a bit to let user check and cancel
|
||||||
scripter.waitForMenuToBeLeft(MenuType.BOLUS_ENTER);
|
scripter.waitForMenuToBeLeft(MenuType.BOLUS_ENTER);
|
||||||
|
@ -56,9 +64,15 @@ public class BolusCommand implements Command {
|
||||||
// wait for bolus delivery to complete; the remaining units to deliver are counted
|
// wait for bolus delivery to complete; the remaining units to deliver are counted
|
||||||
// down and are displayed on the main menu.
|
// down and are displayed on the main menu.
|
||||||
Double bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING);
|
Double bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING);
|
||||||
|
double lastBolusReported = 0;
|
||||||
while (bolusRemaining != null) {
|
while (bolusRemaining != null) {
|
||||||
log.debug("Delivering bolus, remaining: " + bolusRemaining);
|
if (lastBolusReported != bolusRemaining) {
|
||||||
SystemClock.sleep(200);
|
log.debug("Delivering bolus, remaining: " + bolusRemaining);
|
||||||
|
int percentDelivered = (int) (100 - (bolusRemaining / bolus * 100));
|
||||||
|
progressReportCallback.progress(BOLUSING, percentDelivered, bolus - bolusRemaining);
|
||||||
|
lastBolusReported = bolusRemaining;
|
||||||
|
}
|
||||||
|
SystemClock.sleep(50);
|
||||||
bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING);
|
bolusRemaining = (Double) scripter.currentMenu.getAttribute(MenuAttribute.BOLUS_REMAINING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +84,8 @@ public class BolusCommand implements Command {
|
||||||
"Bolus delivery did not complete as expected. "
|
"Bolus delivery did not complete as expected. "
|
||||||
+ "Check pump manually, the bolus might not have been delivered.");
|
+ "Check pump manually, the bolus might not have been delivered.");
|
||||||
|
|
||||||
|
progressReportCallback.progress(FINISHED, 100, bolus);
|
||||||
|
|
||||||
// read last bolus record; those menus display static data and therefore
|
// read last bolus record; those menus display static data and therefore
|
||||||
// only a single menu update is sent
|
// only a single menu update is sent
|
||||||
scripter.navigateToMenu(MenuType.MY_DATA_MENU);
|
scripter.navigateToMenu(MenuType.MY_DATA_MENU);
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package de.jotomo.ruffyscripter.commands;
|
||||||
|
|
||||||
|
public interface ProgressReportCallback {
|
||||||
|
enum State {
|
||||||
|
PREPARING,
|
||||||
|
BOLUSING,
|
||||||
|
CANCELLING,
|
||||||
|
FINISHED,
|
||||||
|
CANCELLED
|
||||||
|
}
|
||||||
|
|
||||||
|
void progress(State state, int percent, double delivered);
|
||||||
|
}
|
|
@ -31,6 +31,7 @@ import de.jotomo.ruffyscripter.commands.BolusCommand;
|
||||||
import de.jotomo.ruffyscripter.commands.CancelTbrCommand;
|
import de.jotomo.ruffyscripter.commands.CancelTbrCommand;
|
||||||
import de.jotomo.ruffyscripter.commands.Command;
|
import de.jotomo.ruffyscripter.commands.Command;
|
||||||
import de.jotomo.ruffyscripter.commands.CommandResult;
|
import de.jotomo.ruffyscripter.commands.CommandResult;
|
||||||
|
import de.jotomo.ruffyscripter.commands.ProgressReportCallback;
|
||||||
import de.jotomo.ruffyscripter.commands.DetermineCapabilitiesCommand;
|
import de.jotomo.ruffyscripter.commands.DetermineCapabilitiesCommand;
|
||||||
import de.jotomo.ruffyscripter.commands.ReadPumpStateCommand;
|
import de.jotomo.ruffyscripter.commands.ReadPumpStateCommand;
|
||||||
import de.jotomo.ruffyscripter.commands.SetTbrCommand;
|
import de.jotomo.ruffyscripter.commands.SetTbrCommand;
|
||||||
|
@ -48,6 +49,7 @@ import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
import info.nightscout.androidaps.interfaces.PumpDescription;
|
import info.nightscout.androidaps.interfaces.PumpDescription;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress;
|
||||||
import info.nightscout.androidaps.plugins.PumpCombo.events.EventComboPumpUpdateGUI;
|
import info.nightscout.androidaps.plugins.PumpCombo.events.EventComboPumpUpdateGUI;
|
||||||
import info.nightscout.utils.DateUtil;
|
import info.nightscout.utils.DateUtil;
|
||||||
import info.nightscout.utils.SP;
|
import info.nightscout.utils.SP;
|
||||||
|
@ -369,7 +371,34 @@ public class ComboPlugin implements PluginBase, PumpInterface {
|
||||||
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
|
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
|
||||||
if (detailedBolusInfo.insulin > 0) {
|
if (detailedBolusInfo.insulin > 0) {
|
||||||
// bolus needed, ask pump to deliver it
|
// bolus needed, ask pump to deliver it
|
||||||
CommandResult bolusCmdResult = runCommand(new BolusCommand(detailedBolusInfo.insulin));
|
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.getInstance();
|
||||||
|
MainApp.bus().post(bolusingEvent);
|
||||||
|
CommandResult bolusCmdResult = runCommand(new BolusCommand(detailedBolusInfo.insulin, new ProgressReportCallback() {
|
||||||
|
@Override
|
||||||
|
public void progress(State state, int percent, double delivered) {
|
||||||
|
EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.getInstance();
|
||||||
|
switch (state) {
|
||||||
|
// TODO move into enum as toString or so and make it translateb
|
||||||
|
case BOLUSING:
|
||||||
|
bolusingEvent.status = String.format(MainApp.sResources.getString(R.string.bolusdelivering), delivered);
|
||||||
|
break;
|
||||||
|
case PREPARING:
|
||||||
|
bolusingEvent.status = "Preparing pump for bolus";
|
||||||
|
break;
|
||||||
|
case FINISHED:
|
||||||
|
bolusingEvent.status = "Bolus delivery finished successfully";
|
||||||
|
break;
|
||||||
|
case CANCELLED:
|
||||||
|
bolusingEvent.status = "Bolus delivery was cancelled";
|
||||||
|
break;
|
||||||
|
case CANCELLING:
|
||||||
|
bolusingEvent.status = "Cancelling bolus delivery";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
bolusingEvent.percent = percent;
|
||||||
|
MainApp.bus().post(bolusingEvent);
|
||||||
|
}
|
||||||
|
}));
|
||||||
PumpEnactResult pumpEnactResult = new PumpEnactResult();
|
PumpEnactResult pumpEnactResult = new PumpEnactResult();
|
||||||
pumpEnactResult.success = bolusCmdResult.success;
|
pumpEnactResult.success = bolusCmdResult.success;
|
||||||
pumpEnactResult.enacted = bolusCmdResult.enacted;
|
pumpEnactResult.enacted = bolusCmdResult.enacted;
|
||||||
|
|
Loading…
Reference in a new issue