From 4ebc1497838b729a31e1abbe2af91da9e4bb3d8d Mon Sep 17 00:00:00 2001 From: Nico Schmitz Date: Tue, 12 Jun 2018 23:28:11 +0200 Subject: [PATCH] Add changes of schmitzn/reservoir-view --- .../androidaps/interfaces/PumpInterface.java | 2 + .../plugins/Overview/OverviewFragment.java | 59 +++++++++++++------ .../plugins/PumpCombo/ComboPlugin.java | 5 ++ .../PumpDanaR/AbstractDanaRPlugin.java | 3 + .../plugins/PumpDanaRS/DanaRSPlugin.java | 5 ++ .../plugins/PumpInsight/InsightPlugin.java | 3 + .../androidaps/plugins/PumpMDI/MDIPlugin.java | 3 + .../PumpVirtual/VirtualPumpPlugin.java | 3 + app/src/main/res/layout/overview_fragment.xml | 12 ++++ app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values/colors.xml | 11 ++-- app/src/main/res/values/strings.xml | 7 +++ app/src/main/res/xml/pref_overview.xml | 32 ++++++++++ 13 files changed, 126 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java index 65911f82c6..9030cf8bfd 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java @@ -33,6 +33,8 @@ public interface PumpInterface { double getBaseBasalRate(); // base basal rate, not temp basal + double getReservoirLevel(); + PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo); void stopBolusDelivering(); PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes, Profile profile, boolean enforceNew); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index fadb30420c..a5f375a7bb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -134,6 +134,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, TextView baseBasalView; TextView extendedBolusView; TextView activeProfileView; + TextView reservoirView; TextView iobView; TextView cobView; TextView apsModeView; @@ -232,6 +233,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, baseBasalView = (TextView) view.findViewById(R.id.overview_basebasal); extendedBolusView = (TextView) view.findViewById(R.id.overview_extendedbolus); activeProfileView = (TextView) view.findViewById(R.id.overview_activeprofile); + reservoirView = (TextView) view.findViewById(R.id.overview_reservoir); pumpStatusView = (TextView) view.findViewById(R.id.overview_pumpstatus); pumpDeviceStatusView = (TextView) view.findViewById(R.id.overview_pump); openapsDeviceStatusView = (TextView) view.findViewById(R.id.overview_openaps); @@ -1040,25 +1042,25 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; if (Config.APS && pump.getPumpDescription().isTempBasalCapable) { apsModeView.setVisibility(View.VISIBLE); - apsModeView.setBackgroundColor(MainApp.gc(R.color.loopenabled)); - apsModeView.setTextColor(Color.BLACK); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgDefault)); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextDefault)); final LoopPlugin loopPlugin = LoopPlugin.getPlugin(); if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isSuperBolus()) { - apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); apsModeView.setText(String.format(MainApp.gs(R.string.loopsuperbolusfor), loopPlugin.minutesToEndOfSuspend())); - apsModeView.setTextColor(Color.WHITE); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); } else if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isDisconnected()) { - apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); apsModeView.setText(String.format(MainApp.gs(R.string.loopdisconnectedfor), loopPlugin.minutesToEndOfSuspend())); - apsModeView.setTextColor(Color.WHITE); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); } else if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isSuspended()) { - apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); apsModeView.setText(String.format(MainApp.gs(R.string.loopsuspendedfor), loopPlugin.minutesToEndOfSuspend())); - apsModeView.setTextColor(Color.WHITE); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); } else if (pump.isSuspended()) { - apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); apsModeView.setText(MainApp.gs(R.string.pumpsuspended)); - apsModeView.setTextColor(Color.WHITE); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); } else if (loopPlugin.isEnabled(PluginType.LOOP)) { if (closedLoopEnabled.value()) { apsModeView.setText(MainApp.gs(R.string.closedloop)); @@ -1066,9 +1068,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, apsModeView.setText(MainApp.gs(R.string.openloop)); } } else { - apsModeView.setBackgroundColor(MainApp.gc(R.color.loopdisabled)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.ribbonBgCritical)); apsModeView.setText(MainApp.gs(R.string.disabledloop)); - apsModeView.setTextColor(Color.WHITE); + apsModeView.setTextColor(MainApp.gc(R.color.ribbonTextCritical)); } } else { apsModeView.setVisibility(View.GONE); @@ -1077,13 +1079,13 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, // temp target TempTarget tempTarget = TreatmentsPlugin.getPlugin().getTempTargetFromHistory(); if (tempTarget != null) { - tempTargetView.setTextColor(Color.BLACK); - tempTargetView.setBackgroundColor(MainApp.gc(R.color.tempTargetBackground)); + tempTargetView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); + tempTargetView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); tempTargetView.setVisibility(View.VISIBLE); tempTargetView.setText(Profile.toTargetRangeString(tempTarget.low, tempTarget.high, Constants.MGDL, units) + " " + DateUtil.untilString(tempTarget.end())); } else { - tempTargetView.setTextColor(Color.WHITE); - tempTargetView.setBackgroundColor(MainApp.gc(R.color.tempTargetDisabledBackground)); + tempTargetView.setTextColor(MainApp.gc(R.color.ribbonTextDefault)); + tempTargetView.setBackgroundColor(MainApp.gc(R.color.ribbonBgDefault)); tempTargetView.setText(Profile.toTargetRangeString(profile.getTargetLow(), profile.getTargetHigh(), units, units)); tempTargetView.setVisibility(View.VISIBLE); } @@ -1190,7 +1192,30 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, } activeProfileView.setText(MainApp.getConfigBuilder().getProfileName()); - activeProfileView.setBackgroundColor(Color.GRAY); + activeProfileView.setBackgroundColor(MainApp.gc(R.color.ribbonBgDefault)); + activeProfileView.setTextColor(MainApp.gc(R.color.ribbonTextDefault)); + + if (reservoirView != null) { + boolean showReservoirView = SP.getBoolean(R.string.key_show_reservoirview, false); + int reservoirLevel = pump.isInitialized() ? (int) Math.round(pump.getReservoirLevel()) : -1; + if (showReservoirView && reservoirLevel != -1) { + int levelWarning = SP.getInt(R.string.key_reservoirview_levelwarning, 80); + int levelCritical = SP.getInt(R.string.key_reservoirview_levelcritical, 5); + reservoirView.setText(reservoirLevel + " " + MainApp.sResources.getString(R.string.insulin_unit_shortname)); + if (reservoirLevel <= levelCritical) { + reservoirView.setBackgroundColor(MainApp.gc(R.color.ribbonBgCritical)); + reservoirView.setTextColor(MainApp.gc(R.color.ribbonTextCritical)); + } else if (reservoirLevel <= levelWarning) { + reservoirView.setBackgroundColor(MainApp.gc(R.color.ribbonBgWarning)); + reservoirView.setTextColor(MainApp.gc(R.color.ribbonTextWarning)); + } else { + reservoirView.setBackgroundColor(MainApp.gc(R.color.ribbonBgDefault)); + reservoirView.setTextColor(MainApp.gc(R.color.ribbonTextDefault)); + } + } else { + reservoirView.setVisibility(View.GONE); + } + } tempTargetView.setOnLongClickListener(view -> { view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); 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 b1f2b076ae..c78af7a75b 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 @@ -423,6 +423,11 @@ public class ComboPlugin extends PluginBase implements PumpInterface, Constraint return pump.basalProfile.hourlyRates[currentHour]; } + @Override + public double getReservoirLevel() { + return pump.reservoirLevel; + } + private static BolusProgressReporter bolusProgressReporter = (state, percent, delivered) -> { EventOverviewBolusProgress event = EventOverviewBolusProgress.getInstance(); switch (state) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/AbstractDanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/AbstractDanaRPlugin.java index 1f51979126..77263e41b2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/AbstractDanaRPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/AbstractDanaRPlugin.java @@ -150,6 +150,9 @@ public abstract class AbstractDanaRPlugin extends PluginBase implements PumpInte return pump.currentBasal; } + @Override + public double getReservoirLevel() { return pump.reservoirRemainingUnits; } + @Override public void stopBolusDelivering() { if (sExecutionService == null) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java index bf44745f4a..574a775426 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java @@ -352,6 +352,11 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte return pump.currentBasal; } + @Override + public double getReservoirLevel() { + return pump.reservoirRemainingUnits; + } + @Override public synchronized PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { detailedBolusInfo.insulin = MainApp.getConstraintChecker().applyBolusConstraints(new Constraint<>(detailedBolusInfo.insulin)).value(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpInsight/InsightPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpInsight/InsightPlugin.java index 9fb98d3175..752360cbfc 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpInsight/InsightPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpInsight/InsightPlugin.java @@ -385,6 +385,9 @@ public class InsightPlugin extends PluginBase implements PumpInterface, Constrai return basalRate; } + @Override + public double getReservoirLevel() { return reservoirInUnits; } + public String getBaseBasalRateString() { final DecimalFormat df = new DecimalFormat("#.##"); return df.format(basalRate); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java index 09cff7d97e..76068e71d4 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpMDI/MDIPlugin.java @@ -129,6 +129,9 @@ public class MDIPlugin extends PluginBase implements PumpInterface { return 0d; } + @Override + public double getReservoirLevel() { return -1; } + @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { PumpEnactResult result = new PumpEnactResult(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java index 653ab66c21..bda4f2402e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpVirtual/VirtualPumpPlugin.java @@ -197,6 +197,9 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface { return 0d; } + @Override + public double getReservoirLevel() { return reservoirInUnits; } + @Override public PumpEnactResult deliverTreatment(DetailedBolusInfo detailedBolusInfo) { PumpEnactResult result = new PumpEnactResult(); diff --git a/app/src/main/res/layout/overview_fragment.xml b/app/src/main/res/layout/overview_fragment.xml index 8e37ae7675..8f68a3c834 100644 --- a/app/src/main/res/layout/overview_fragment.xml +++ b/app/src/main/res/layout/overview_fragment.xml @@ -47,6 +47,18 @@ android:textAppearance="?android:attr/textAppearanceSmall" /> + TBR Pumpen-Speicher Aktiviere die SuperBolus-Funktion im Wizard. Nicht aktivieren, wenn du nicht weißt, welche Auswirkungen dieser Bolus hat! ES KANN ZU EINER ÜBERDOSIERUNG AN INSULIN KOMMEN! + Zeige Reservoir-Füllstand in Übersicht + Zeigt den Füllstand des Reservoirs in der Übersicht an. Status des Bolus wird ermittelt PAIRING Bolus-Abgabe gestartet diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7f1fcc268c..9811aff465 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -59,10 +59,6 @@ #de7550 #25912e - #47c8ff - #FFDD7792 - #ff0400 - #FF8C00 #ff0400 #ff5e55 @@ -75,4 +71,11 @@ #72FF0000 #72000000 + #424242 + #f4d700 + #ff0400 + #FFFFFF + #303030 + #FFFFFF + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb9e2cc36c..f478801797 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -607,6 +607,13 @@ key_usersuperbolus Enable superbolus in wizard Enable superbolus functionality in wizard. Do not enable until you learn what it really does. IT MAY CAUSE INSULIN OVERDOSE IF USED BLINDLY! + key_show_reservoirview + Show reservoir level in overview + Show the reservoir level on the overview page. + key_reservoirview_levelwarning + Level warning + key_reservoirview_levelcritical + Level critical IOB COB Firmware diff --git a/app/src/main/res/xml/pref_overview.xml b/app/src/main/res/xml/pref_overview.xml index 5d08cd671e..b235a97f1e 100644 --- a/app/src/main/res/xml/pref_overview.xml +++ b/app/src/main/res/xml/pref_overview.xml @@ -143,6 +143,38 @@ android:summary="@string/enablesuperbolus_summary" android:title="@string/enablesuperbolus" /> + + + + + +