diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java index 95d887690d..10d45a19c5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java @@ -4,7 +4,6 @@ package info.nightscout.androidaps.plugins.PumpCombo; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; -import android.os.SystemClock; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,14 +15,11 @@ import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Date; - import de.jotomo.ruffy.spi.CommandResult; import de.jotomo.ruffy.spi.PumpState; import de.jotomo.ruffy.spi.history.Bolus; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.plugins.Common.SubscriberFragment; import info.nightscout.androidaps.plugins.PumpCombo.events.EventComboPumpUpdateGUI; import info.nightscout.utils.DateUtil; @@ -36,6 +32,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis private TextView batteryView; private TextView reservoirView; private TextView lastConnectionView; + private TextView lastBolusView; private TextView tempBasalText; private Button refresh; @@ -49,6 +46,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis batteryView = (TextView) view.findViewById(R.id.combo_pumpstate_battery); reservoirView = (TextView) view.findViewById(R.id.combo_insulinstate); lastConnectionView = (TextView) view.findViewById(R.id.combo_lastconnection); + lastBolusView = (TextView) view.findViewById(R.id.combo_last_bolus); tempBasalText = (TextView) view.findViewById(R.id.combo_temp_basal); refresh = (Button) view.findViewById(R.id.combo_refresh); @@ -111,7 +109,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis } if (plugin.getPump().state.errorMsg != null) { statusView.setTextColor(Color.RED); - } else if (plugin.getPump().state.suspended ) { + } else if (plugin.getPump().state.suspended) { statusView.setTextColor(Color.YELLOW); } else { statusView.setTextColor(Color.WHITE); @@ -140,7 +138,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis } else { reservoirView.setTextColor(Color.WHITE); } - int reservoirLevel = plugin.getPump().history.reservoirLevel; + int reservoirLevel = plugin.getPump().reservoirLevel; reservoirView.setText(reservoirLevel == -1 ? "" : "" + reservoirLevel + " U"); // last connection @@ -148,6 +146,19 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis String time = DateUtil.timeString(lastCmdResult.completionTime); lastConnectionView.setText("" + minAgo + " (" + time + ")"); + // last bolus + plugin.getPump().history.bolusHistory.add(new Bolus(System.currentTimeMillis() - 7 * 60 * 1000, 12.8d)); + Bolus bolus = plugin.getPump().lastBolus; + if (bolus == null || bolus.timestamp + 6 * 60 * 60 * 1000 < System.currentTimeMillis()) { + lastBolusView.setText(""); + } else { + long agoMsc = System.currentTimeMillis() - bolus.timestamp; + double agoHours = agoMsc / 60d / 60d / 1000d; + lastBolusView.setText(DecimalFormatter.to2Decimal(bolus.amount) + " U " + + "(" + DecimalFormatter.to1Decimal(agoHours) + " " + MainApp.sResources.getString(R.string.hoursago) + ", " + + DateUtil.timeString(bolus.timestamp) + ") "); + } + // TBR boolean tbrActive = ps.tbrPercent != -1 && ps.tbrPercent != 100; if (tbrActive) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPlugin.java index b284e1d140..195217eed6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPlugin.java @@ -19,6 +19,7 @@ import de.jotomo.ruffy.spi.BolusProgressReporter; import de.jotomo.ruffy.spi.CommandResult; import de.jotomo.ruffy.spi.PumpState; import de.jotomo.ruffy.spi.RuffyCommands; +import de.jotomo.ruffy.spi.history.Bolus; import de.jotomo.ruffy.spi.history.PumpHistoryRequest; import de.jotomo.ruffyscripter.RuffyCommandsV1Impl; import info.nightscout.androidaps.BuildConfig; @@ -562,11 +563,18 @@ public class ComboPlugin implements PluginBase, PumpInterface { // TODO handle running into WARNING_OR_ERROR ... or scripter? purge it CommandResult commandResult = commandExecution.execute(); pump.lastCmdResult = commandResult; - pump.lastCmdResult.completionTime = System.currentTimeMillis(); // todo pump.state = commandResult.state; // TOOD - if (commandResult.history != null) + if (commandResult.history != null) { + if (commandResult.history.reservoirLevel != -1) { + pump.reservoirLevel = commandResult.history.reservoirLevel; + } pump.history = commandResult.history; + if (pump.history.bolusHistory.size() > 0) { + pump.lastBolus = pump.history.bolusHistory.get(0); + } + } + MainApp.bus().post(new EventComboPumpUpdateGUI()); return commandResult; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPump.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPump.java index 2a40fd66fa..1b6c29a008 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPump.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboPump.java @@ -3,10 +3,10 @@ package info.nightscout.androidaps.plugins.PumpCombo; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import java.util.Date; import de.jotomo.ruffy.spi.PumpState; import de.jotomo.ruffy.spi.CommandResult; +import de.jotomo.ruffy.spi.history.Bolus; import de.jotomo.ruffy.spi.history.PumpHistory; class ComboPump { @@ -16,4 +16,7 @@ class ComboPump { volatile PumpState state = new PumpState(); @NonNull volatile PumpHistory history = new PumpHistory(); + @Nullable + volatile Bolus lastBolus; + volatile int reservoirLevel = -1; } diff --git a/app/src/main/res/layout/combopump_fragment.xml b/app/src/main/res/layout/combopump_fragment.xml index 30249f37ea..a637a48c41 100644 --- a/app/src/main/res/layout/combopump_fragment.xml +++ b/app/src/main/res/layout/combopump_fragment.xml @@ -190,6 +190,51 @@ + + + + + + + + + + + + boluses = new ArrayList<>(); + boluses.add(new Bolus(System.currentTimeMillis(), bolus)); return new CommandResult().success(true).enacted(true) - .message(String.format(Locale.US, "Delivered %02.1f U", bolus)); + .message(String.format(Locale.US, "Delivered %02.1f U", bolus)) + .history(new PumpHistory().bolusHistory(boluses)); } catch (CommandException e) { return e.toCommandResult(); } diff --git a/ruffyscripter/src/main/java/de/jotomo/ruffyscripter/commands/ReadHistoryCommand.java b/ruffyscripter/src/main/java/de/jotomo/ruffyscripter/commands/ReadHistoryCommand.java index 92ab430821..6621b66548 100644 --- a/ruffyscripter/src/main/java/de/jotomo/ruffyscripter/commands/ReadHistoryCommand.java +++ b/ruffyscripter/src/main/java/de/jotomo/ruffyscripter/commands/ReadHistoryCommand.java @@ -7,6 +7,7 @@ import org.monkey.d.ruffy.ruffy.driver.display.menu.MenuDate; import org.monkey.d.ruffy.ruffy.driver.display.menu.MenuTime; import java.util.Collections; +import java.util.Date; import java.util.List; import de.jotomo.ruffy.spi.CommandResult; @@ -36,25 +37,33 @@ public class ReadHistoryCommand extends BaseCommand { scripter.pressCheckKey(); scripter.verifyMenuIsDisplayed(MenuType.BOLUS_DATA); if (request.bolusHistory != PumpHistoryRequest.SKIP) { - // Could also be extended, multiwave: - BolusType bolusType = (BolusType) scripter.getCurrentMenu().getAttribute(MenuAttribute.BOLUS_TYPE); - if (!bolusType.equals(BolusType.NORMAL)) { - throw new CommandException().success(false).enacted(false).message("Unsupported bolus type encountered: " + bolusType); - } - Double bolus = (Double) scripter.getCurrentMenu().getAttribute(MenuAttribute.BOLUS); - MenuDate date = (MenuDate) scripter.getCurrentMenu().getAttribute(MenuAttribute.DATE); - MenuTime time = (MenuTime) scripter.getCurrentMenu().getAttribute(MenuAttribute.TIME); + if (request.bolusHistory == PumpHistoryRequest.LAST) { + // Could also be extended, multiwave: + BolusType bolusType = (BolusType) scripter.getCurrentMenu().getAttribute(MenuAttribute.BOLUS_TYPE); + if (!bolusType.equals(BolusType.NORMAL)) { + throw new CommandException().success(false).enacted(false).message("Unsupported bolus type encountered: " + bolusType); + } + Double bolus = (Double) scripter.getCurrentMenu().getAttribute(MenuAttribute.BOLUS); + MenuDate date = (MenuDate) scripter.getCurrentMenu().getAttribute(MenuAttribute.DATE); + MenuTime time = (MenuTime) scripter.getCurrentMenu().getAttribute(MenuAttribute.TIME); + // TODO handle year changes; if current month == 1 and record date == 12, use $YEAR-1 + int currentMonth = new Date().getMonth() + 1; + int currentYear = new Date().getYear() + 1900; + if (currentMonth == 1 && date.getMonth() == 12) { + currentYear -= 1; + } + long recordDate = new Date(currentYear - 1900, date.getMonth() - 1, date.getDay(), time.getHour(), time.getMinute()).getTime(); + history.bolusHistory.add(new Bolus(recordDate, bolus)); - history.bolusHistory.add(new Bolus(0, bolus)); - - int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD); - int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD); +// int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD); +// int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD); /* read displayed date, bolus, add to history while data > last known, press up to go through history */ + } } scripter.pressMenuKey(); scripter.verifyMenuIsDisplayed(MenuType.ERROR_DATA); @@ -81,6 +90,7 @@ public class ReadHistoryCommand extends BaseCommand { // TODO start or end time? MenuTime time = (MenuTime) scripter.getCurrentMenu().getAttribute(MenuAttribute.TIME); } + scripter.pressBackKey(); scripter.returnToRootMenu(); } scripter.verifyRootMenuIsDisplayed(); diff --git a/ruffyscripter/src/main/java/org/monkey/d/ruffy/ruffy/driver/display/menu/MenuDate.java b/ruffyscripter/src/main/java/org/monkey/d/ruffy/ruffy/driver/display/menu/MenuDate.java index 3a1dc5fd10..51b5d2b9b1 100644 --- a/ruffyscripter/src/main/java/org/monkey/d/ruffy/ruffy/driver/display/menu/MenuDate.java +++ b/ruffyscripter/src/main/java/org/monkey/d/ruffy/ruffy/driver/display/menu/MenuDate.java @@ -20,6 +20,14 @@ public class MenuDate { month = Integer.parseInt(p[1]); } + public int getDay() { + return day; + } + + public int getMonth() { + return month; + } + @Override public String toString() { return day+"."+ String.format("%02d",month)+".";