diff --git a/app/src/main/java/info/nightscout/androidaps/Constants.java b/app/src/main/java/info/nightscout/androidaps/Constants.java
index e0549ab9bb..d933018790 100644
--- a/app/src/main/java/info/nightscout/androidaps/Constants.java
+++ b/app/src/main/java/info/nightscout/androidaps/Constants.java
@@ -38,6 +38,14 @@ public class Constants {
//DanaR
public static final double dailyLimitWarning = 0.95d;
+ // Temp targets
+ public static final int defaultActivityTTDuration = 90; // min
+ public static final double defaultActivityTTmgdl = 90d;
+ public static final double defaultActivityTTmmol = 5d;
+ public static final int defaultEatingSoonTTDuration = 45; // min
+ public static final double defaultEatingSoonTTmgdl = 140d;
+ public static final double defaultEatingSoonTTmmol = 8d;
+
//NSClientInternal
public static final int MAX_LOG_LINES = 100;
diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java
index 412383c6e1..2069ea557b 100644
--- a/app/src/main/java/info/nightscout/androidaps/MainApp.java
+++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java
@@ -247,6 +247,10 @@ public class MainApp extends Application {
return sResources.getString(id, args);
}
+ public static int gc(int id) {
+ return sResources.getColor(id);
+ }
+
public static MainApp instance() {
return sInstance;
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java
index 15e93816bd..6f46a5db8a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java
@@ -36,15 +36,15 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo;
+import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
-import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
-import info.nightscout.androidaps.plugins.OpenAPSSMB.DetermineBasalResultSMB;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.utils.DateUtil;
+import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NumberPicker;
import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse;
@@ -69,9 +69,9 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
private static final double FAV1_DEFAULT = 5;
private static final double FAV2_DEFAULT = 10;
private static final double FAV3_DEFAULT = 20;
-
private CheckBox suspendLoopCheckbox;
private CheckBox startActivityTTCheckbox;
+ private CheckBox startEatingSoonTTCheckbox;
private Integer maxCarbs;
@@ -103,7 +103,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
Integer carbs = SafeParse.stringToInt(editCarbs.getText());
if (carbs > maxCarbs) {
editCarbs.setValue(0d);
- ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), getString(R.string.carbsconstraintapplied));
+ ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.carbsconstraintapplied));
}
}
@@ -127,6 +127,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher);
startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt);
+ startEatingSoonTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt);
dateButton = view.findViewById(R.id.newcarbs_eventdate);
timeButton = view.findViewById(R.id.newcarb_eventtime);
@@ -138,6 +139,10 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
dateButton.setOnClickListener(this);
timeButton.setOnClickListener(this);
+ //To be able to select only one TT at a time
+ startEatingSoonTTCheckbox.setOnClickListener(this);
+ startActivityTTCheckbox.setOnClickListener(this);
+
// TODO prefilling carbs, maybe
// TODO maybe update suggested carbs to target TT when checked
// APSResult lastAPSResult = ConfigBuilderPlugin.getActiveAPS().getLastAPSResult();
@@ -147,13 +152,13 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
fav1Button = view.findViewById(R.id.newcarbs_plus1);
fav1Button.setOnClickListener(this);
- fav1Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_1), String.valueOf(FAV1_DEFAULT)));
+ fav1Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_1, String.valueOf(FAV1_DEFAULT)));
fav2Button = view.findViewById(R.id.newcarbs_plus2);
fav2Button.setOnClickListener(this);
- fav2Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_2), String.valueOf(FAV2_DEFAULT)));
+ fav2Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_2, String.valueOf(FAV2_DEFAULT)));
fav3Button = view.findViewById(R.id.newcarbs_plus3);
fav3Button.setOnClickListener(this);
- fav3Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_3), String.valueOf(FAV3_DEFAULT)));
+ fav3Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_3, String.valueOf(FAV3_DEFAULT)));
suspendLoopCheckbox = view.findViewById(R.id.newcarbs_suspend_loop);
@@ -197,19 +202,26 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
break;
case R.id.newcarbs_plus1:
editCarbs.setValue(editCarbs.getValue()
- + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_1), FAV1_DEFAULT));
+ + SP.getDouble(R.string.key_carbs_button_increment_1, FAV1_DEFAULT));
validateInputs();
break;
case R.id.newcarbs_plus2:
editCarbs.setValue(editCarbs.getValue()
- + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_2), FAV2_DEFAULT));
+ + SP.getDouble(R.string.key_carbs_button_increment_2, FAV2_DEFAULT));
validateInputs();
break;
case R.id.newcarbs_plus3:
editCarbs.setValue(editCarbs.getValue()
- + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_3), FAV3_DEFAULT));
+ + SP.getDouble(R.string.key_carbs_button_increment_3, FAV3_DEFAULT));
validateInputs();
break;
+ case R.id.newcarbs_activity_tt:
+ startEatingSoonTTCheckbox.setChecked(false);
+ break;
+ case R.id.carbs_eating_soon_tt:
+ startActivityTTCheckbox.setChecked(false);
+ break;
+
}
}
@@ -227,20 +239,46 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
String confirmMessage = "";
if (carbs > 0)
- confirmMessage += getString(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + "";
+ confirmMessage += MainApp.gs(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + "";
if (!carbsAfterConstraints.equals(carbs))
- confirmMessage += "
" + getString(R.string.carbsconstraintapplied) + "";
+ confirmMessage += "
" + MainApp.gs(R.string.carbsconstraintapplied) + "";
if (suspendLoopCheckbox.isChecked()) {
- confirmMessage += "
" + "Loop: " + "" + "Suspend for 30 min";
+ confirmMessage += "
" + MainApp.gs(R.string.loop) + ": " + "" + MainApp.gs(R.string.suspendloopfor30min) + "";
}
- double prefTTDuration = SP.getDouble(R.string.key_activity_duration, 90d);
- double ttDuration = prefTTDuration > 0 ? prefTTDuration : 90d;
- double prefTT = SP.getDouble(R.string.key_activity_target, 140d);
- double tt = prefTT > 0 ? prefTT : 140d;
+ final Profile currentProfile = MainApp.getConfigBuilder().getProfile();
+ if (currentProfile == null)
+ return;
+
+ int activityTTDuration = SP.getInt(R.string.key_activity_duration, Constants.defaultActivityTTDuration);
+ activityTTDuration = activityTTDuration > 0 ? activityTTDuration : Constants.defaultActivityTTDuration;
+ double activityTT = SP.getDouble(R.string.key_activity_target, currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultActivityTTmmol : Constants.defaultActivityTTmgdl);
+ activityTT = activityTT > 0 ? activityTT : currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultActivityTTmmol : Constants.defaultActivityTTmgdl;
+
+ int eatingSoonTTDuration = SP.getInt(R.string.key_eatingsoon_duration, Constants.defaultEatingSoonTTDuration);
+ eatingSoonTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : Constants.defaultEatingSoonTTDuration;
+ double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultEatingSoonTTmmol : Constants.defaultEatingSoonTTmgdl);
+ eatingSoonTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT, currentProfile.getUnits()) : currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultEatingSoonTTmmol : Constants.defaultEatingSoonTTmgdl;
+
+
if (startActivityTTCheckbox.isChecked()) {
- confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min ";
+ if (currentProfile.getUnits().equals(Constants.MMOL)) {
+ confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to1Decimal(activityTT) + " mmol/l (" + ((int) activityTTDuration) + " min)";
+ } else
+ confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to0Decimal(activityTT) + " mg/dl (" + ((int) activityTTDuration) + " min)";
+
}
+ if (startEatingSoonTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) {
+ if (currentProfile.getUnits().equals(Constants.MMOL)) {
+ confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)";
+ } else
+ confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)";
+
+ }
+ final double finalActivityTT = activityTT;
+ final double finalEatigSoonTT = eatingSoonTT;
+ final int finalActivityTTDuration = activityTTDuration;
+ final int finalEatingSoonTTDuration = eatingSoonTTDuration;
if (StringUtils.isNoneEmpty(food)) {
confirmMessage += "
" + "Food: " + food;
@@ -249,66 +287,80 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
if (!initialEventTime.equals(eventTime)) {
confirmMessage += "
Time: " + DateUtil.dateAndTimeString(eventTime);
}
+ if (confirmMessage.length() > 0) {
- final int finalCarbsAfterConstraints = carbsAfterConstraints;
+ final int finalCarbsAfterConstraints = carbsAfterConstraints;
- final Context context = getContext();
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ final Context context = getContext();
+ final AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(this.getContext().getString(R.string.confirmation));
- if (confirmMessage.startsWith("
"))
- confirmMessage = confirmMessage.substring("
".length());
- builder.setMessage(Html.fromHtml(confirmMessage));
- builder.setPositiveButton(getString(R.string.ok), (dialog, id) -> {
- synchronized (builder) {
- if (accepted) {
- log.debug("guarding: already accepted");
- return;
- }
- accepted = true;
+ builder.setTitle(MainApp.gs(R.string.confirmation));
+ if (confirmMessage.startsWith("
"))
+ confirmMessage = confirmMessage.substring("
".length());
- if (suspendLoopCheckbox.isChecked()) {
- final LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop();
- activeloop.suspendTo(System.currentTimeMillis() + 30L * 60 * 1000);
- ConfigBuilderPlugin.getCommandQueue().cancelTempBasal(true, new Callback() {
- @Override
- public void run() {
- if (!result.success) {
- ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror));
+ builder.setMessage(Html.fromHtml(confirmMessage));
+ builder.setPositiveButton(MainApp.gs(R.string.ok), (dialog, id) -> {
+ synchronized (builder) {
+ if (accepted) {
+ log.debug("guarding: already accepted");
+ return;
+ }
+ accepted = true;
+
+ if (suspendLoopCheckbox.isChecked()) {
+ final LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop();
+ activeloop.suspendTo(System.currentTimeMillis() + 30L * 60 * 1000);
+ ConfigBuilderPlugin.getCommandQueue().cancelTempBasal(true, new Callback() {
+ @Override
+ public void run() {
+ if (!result.success) {
+ ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.tempbasaldeliveryerror));
+ }
}
- }
- });
- }
+ });
+ }
- if (startActivityTTCheckbox.isChecked()) {
- TempTarget tempTarget = new TempTarget();
- tempTarget.date = System.currentTimeMillis();
- tempTarget.durationInMinutes = (int) ttDuration;
- tempTarget.reason = "Activity";
- tempTarget.source = Source.USER;
- tempTarget.low = (int) tt;
- tempTarget.high = (int) tt;
- MainApp.getDbHelper().createOrUpdate(tempTarget);
- }
+ if (startActivityTTCheckbox.isChecked()) {
+ TempTarget tempTarget = new TempTarget();
+ tempTarget.date = System.currentTimeMillis();
+ tempTarget.durationInMinutes = finalActivityTTDuration;
+ tempTarget.reason = MainApp.gs(R.string.activity);
+ tempTarget.source = Source.USER;
+ tempTarget.low = Profile.toMgdl(finalActivityTT, currentProfile.getUnits());
+ tempTarget.high = Profile.toMgdl(finalActivityTT, currentProfile.getUnits());
+ MainApp.getDbHelper().createOrUpdate(tempTarget);
+ } else if (startEatingSoonTTCheckbox.isChecked()) {
+ TempTarget tempTarget = new TempTarget();
+ tempTarget.date = System.currentTimeMillis();
+ tempTarget.durationInMinutes = finalEatingSoonTTDuration;
+ tempTarget.reason = MainApp.gs(R.string.eatingsoon);
+ tempTarget.source = Source.USER;
+ tempTarget.low = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits());
+ tempTarget.high = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits());
+ MainApp.getDbHelper().createOrUpdate(tempTarget);
+ }
- if (finalCarbsAfterConstraints > 0 || food != null) {
- DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
- detailedBolusInfo.date = eventTime.getTime();
- detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION;
- detailedBolusInfo.carbs = finalCarbsAfterConstraints;
+ if (finalCarbsAfterConstraints > 0 || food != null) {
+ DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
+ detailedBolusInfo.date = eventTime.getTime();
+ detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION;
+ detailedBolusInfo.carbs = finalCarbsAfterConstraints;
// detailedBolusInfo.food = food;
- detailedBolusInfo.context = context;
- detailedBolusInfo.source = Source.USER;
- MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
+ detailedBolusInfo.context = context;
+ detailedBolusInfo.source = Source.USER;
+ MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
+ }
}
- }
- });
- builder.setNegativeButton(getString(R.string.cancel), null);
- builder.show();
- dismiss();
+ });
+ builder.setNegativeButton(MainApp.gs(R.string.cancel), null);
+ builder.show();
+ dismiss();
+ } else
+ dismiss();
} catch (Exception e) {
log.error("Unhandled exception", e);
}
+
}
@Override
@@ -326,4 +378,4 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
eventTime.setSeconds(second);
timeButton.setText(DateUtil.timeString(eventTime));
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java
index 7c86cde764..0b8b263262 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java
@@ -246,8 +246,19 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener,
double ttDuration = prefTTDuration > 0 ? prefTTDuration : 45d;
double prefTT = SP.getDouble(R.string.key_eatingsoon_target, 80d);
double tt = prefTT > 0 ? prefTT : 80d;
+ Profile currentProfile = MainApp.getConfigBuilder().getProfile();
+ if(currentProfile == null)
+ return;
+ if(currentProfile.getUnits().equals(Constants.MMOL))
+ tt = prefTT > 0 ? Profile.toMgdl(prefTT, Constants.MMOL) : 80d;
+ else
+ tt = prefTT > 0 ? prefTT : 80d;
+ final double finalTT = tt;
if (startESMCheckbox.isChecked()) {
- confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min ";
+ if(currentProfile.getUnits().equals("mmol")){
+ confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt, Constants.MGDL) + " mmol for " + ((int) ttDuration) + " min ";
+ } else
+ confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min ";
}
if (!initialEventTime.equals(eventTime)) {
@@ -277,8 +288,8 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener,
tempTarget.durationInMinutes = (int) ttDuration;
tempTarget.reason = "Eating soon";
tempTarget.source = Source.USER;
- tempTarget.low = (int) tt;
- tempTarget.high = (int) tt;
+ tempTarget.low = (int) finalTT;
+ tempTarget.high = (int) finalTT;
MainApp.getDbHelper().createOrUpdate(tempTarget);
}
@@ -339,4 +350,4 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener,
eventTime.setSeconds(second);
timeButton.setText(DateUtil.timeString(eventTime));
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/layout/overview_newcarbs_dialog.xml b/app/src/main/res/layout/overview_newcarbs_dialog.xml
index 1860078ddb..3be973c402 100644
--- a/app/src/main/res/layout/overview_newcarbs_dialog.xml
+++ b/app/src/main/res/layout/overview_newcarbs_dialog.xml
@@ -37,20 +37,27 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
- android:text="Start activity TT" />
+ android:text="@string/start_activity_tt" />
+
+
+ android:text="@string/suspendloopfor30min" />
+ android:layout_gravity="center_horizontal"
+ android:padding="5dp">
+ android:visibility="gone" />
+ android:layout_marginBottom="5dp"
+ android:orientation="horizontal">