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 @@ + + + + + + +