diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
index dcc805ed7e..ec24efa7dc 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java
@@ -48,6 +48,8 @@ public class ActionStringHandler {
private static long lastSentTimestamp = 0;
private static String lastConfirmActionString = null;
+ private static BolusWizard lastBolusWizard = null;
+
private static SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
@@ -58,6 +60,8 @@ public class ActionStringHandler {
public synchronized static void handleInitiate(String actionstring){
+ lastBolusWizard = null;
+
String rTitle = "CONFIRM"; //TODO: i18n
String rMessage = "";
String rAction = "";
@@ -178,19 +182,59 @@ public class ActionStringHandler {
////////////////////////////////////////////// WIZARD
Integer carbsBeforeConstraints = SafeParse.stringToInt(act[1]);
Integer carbsAfterConstraints = MainApp.getConfigBuilder().applyCarbsConstraints(carbsBeforeConstraints);
- //TODO: wizard calculation
- return;
- }
+ if(carbsAfterConstraints - carbsBeforeConstraints !=0){
+ sendError("Carb constraint violation!"); return;
+ }
- else if(false){
- //... add more actions
+ boolean useBG = Boolean.parseBoolean(act[2]);
+ boolean useBolusIOB = Boolean.parseBoolean(act[3]);
+ boolean useBasalIOB = Boolean.parseBoolean(act[4]);
+
+ NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile();
+ if (profile == null) {
+ sendError("No profile found!"); return;
+ }
+
+ BgReading bgReading = MainApp.getDbHelper().actualBg();
+ if(bgReading==null && useBG){
+ sendError("No recent BG to base calculation on!"); return;
+ }
+
+ BolusWizard bolusWizard = new BolusWizard();
+ bolusWizard.doCalc(profile.getDefaultProfile(), carbsAfterConstraints, useBG?bgReading.valueToUnits(profile.getUnits()):0d, 0d, useBolusIOB, useBasalIOB);
+
+ Double insulinAfterConstraints = MainApp.getConfigBuilder().applyBolusConstraints(bolusWizard.calculatedTotalInsulin);
+ if(insulinAfterConstraints - bolusWizard.calculatedTotalInsulin !=0){
+ sendError("Insulin contraint violation!"); return;
+ }
+
+
+ double insulin = bolusWizard.calculatedTotalInsulin;
+ if(bolusWizard.calculatedTotalInsulin < 0) {
+ bolusWizard.calculatedTotalInsulin = 0d;
+ }
+
+ if(bolusWizard.calculatedTotalInsulin <=0 && bolusWizard.carbs <=0){
+ rAction = "info";
+ rTitle = "INFO";
+ }
+ rAction = actionstring;
+
+ DecimalFormat format = new DecimalFormat("0.00");
+ rMessage += "Bolus: " + format.format(bolusWizard.calculatedTotalInsulin) + "U";
+ rMessage += "\nWizard: " + format.format(insulin) + "U";
+ rMessage += "\nCarb: " + format.format(bolusWizard.insulinFromCarbs) + "U";
+ if(useBG)rMessage += "\nBG: " + format.format(bolusWizard.insulinFromBG) + "U";
+ if(useBolusIOB)rMessage += "\nBolus IOB: " + format.format(bolusWizard.insulingFromBolusIOB) + "U";
+ if(useBasalIOB)rMessage += "\nBasal IOB: " + format.format(bolusWizard.insulingFromBasalsIOB) + "U";
+ rMessage += "\nIC:" + DecimalFormatter.to1Decimal(bolusWizard.ic);
+ if(useBG)rMessage += " ISF:" + DecimalFormatter.to1Decimal(bolusWizard.sens);
+
+ lastBolusWizard = bolusWizard;
} else return;
-
-
-
// send result
WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation(rTitle, rMessage, rAction);
lastSentTimestamp = System.currentTimeMillis();
@@ -228,10 +272,17 @@ public class ActionStringHandler {
high *= Constants.MMOLL_TO_MGDL;
}
generateTempTarget(duration, low, high);
+ } else if ("wizard".equals(act[0])){
+ //use last calculation as confirmed string matches
+
+ doBolus(lastBolusWizard.calculatedTotalInsulin, lastBolusWizard.carbs);
+ lastBolusWizard = null;
+ } else if ("bolus".equals(act[0])) {
+ double insulin = SafeParse.stringToDouble(act[1]);
+ int carbs = SafeParse.stringToInt(act[2]);
+ doBolus(insulin, carbs);
}
-
-
-
+ lastBolusWizard = null;
}
private static void generateTempTarget(int duration, double low, double high) {
@@ -275,9 +326,25 @@ public class ActionStringHandler {
});
}
+ private static void doBolus(final Double amount, final Integer carbs) {
+ Handler handler = new Handler(handlerThread.getLooper());
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(amount, carbs, null, true);
+ if (!result.success) {
+ sendError(MainApp.sResources.getString(R.string.treatmentdeliveryerror) +
+ "\n" +
+ result.comment);
+ }
+ }
+ });
+ }
+
private synchronized static void sendError(String errormessage){
WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation("ERROR", errormessage, "error");
lastSentTimestamp = System.currentTimeMillis();
lastConfirmActionString = null;
+ lastBolusWizard = null;
}
}
diff --git a/app/src/main/java/info/nightscout/utils/BolusWizard.java b/app/src/main/java/info/nightscout/utils/BolusWizard.java
index 61ca2ab2cb..80e907bb6f 100644
--- a/app/src/main/java/info/nightscout/utils/BolusWizard.java
+++ b/app/src/main/java/info/nightscout/utils/BolusWizard.java
@@ -15,7 +15,7 @@ import info.nightscout.client.data.NSProfile;
public class BolusWizard {
// Inputs
JSONObject specificProfile = null;
- Integer carbs = 0;
+ public Integer carbs = 0;
Double bg = 0d;
Double correction;
Boolean includeBolusIOB = true;
diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.java
index 9f88cc318d..46352f7209 100644
--- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.java
+++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/FillActivity.java
@@ -52,7 +52,7 @@ public class FillActivity extends Activity {
private class MyGridViewPagerAdapter extends GridPagerAdapter {
@Override
public int getColumnCount(int arg0) {
- return 3;
+ return 2;
}
@Override
diff --git a/wear/wear.iml b/wear/wear.iml
index 33cd39a6c1..ce3df746e7 100644
--- a/wear/wear.iml
+++ b/wear/wear.iml
@@ -43,13 +43,6 @@
-
-
-
-
-
-
-
@@ -58,6 +51,13 @@
+
+
+
+
+
+
+