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" />
+
+
+
+
+
+