carbs dialog: defaults for mmol, i18n

This commit is contained in:
Milos Kozak 2018-03-10 19:22:31 +01:00
parent 951ad26590
commit ec1c43b905
5 changed files with 74 additions and 55 deletions

View file

@ -38,6 +38,14 @@ public class Constants {
//DanaR //DanaR
public static final double dailyLimitWarning = 0.95d; 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 //NSClientInternal
public static final int MAX_LOG_LINES = 100; public static final int MAX_LOG_LINES = 100;

View file

@ -247,6 +247,10 @@ public class MainApp extends Application {
return sResources.getString(id, args); return sResources.getString(id, args);
} }
public static int gc(int id) {
return sResources.getColor(id);
}
public static MainApp instance() { public static MainApp instance() {
return sInstance; return sInstance;
} }

View file

@ -44,6 +44,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.queue.Callback; import info.nightscout.androidaps.queue.Callback;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NumberPicker; import info.nightscout.utils.NumberPicker;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
@ -70,7 +71,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
private static final double FAV3_DEFAULT = 20; private static final double FAV3_DEFAULT = 20;
private CheckBox suspendLoopCheckbox; private CheckBox suspendLoopCheckbox;
private CheckBox startActivityTTCheckbox; private CheckBox startActivityTTCheckbox;
private CheckBox startEsTTCheckbox; private CheckBox startEatingSoonTTCheckbox;
private Integer maxCarbs; private Integer maxCarbs;
@ -102,7 +103,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
Integer carbs = SafeParse.stringToInt(editCarbs.getText()); Integer carbs = SafeParse.stringToInt(editCarbs.getText());
if (carbs > maxCarbs) { if (carbs > maxCarbs) {
editCarbs.setValue(0d); editCarbs.setValue(0d);
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), getString(R.string.carbsconstraintapplied)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.carbsconstraintapplied));
} }
} }
@ -126,7 +127,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher); editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher);
startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt); startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt);
startEsTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); startEatingSoonTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt);
dateButton = view.findViewById(R.id.newcarbs_eventdate); dateButton = view.findViewById(R.id.newcarbs_eventdate);
timeButton = view.findViewById(R.id.newcarb_eventtime); timeButton = view.findViewById(R.id.newcarb_eventtime);
@ -139,7 +140,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
timeButton.setOnClickListener(this); timeButton.setOnClickListener(this);
//To be able to select only one TT at a time //To be able to select only one TT at a time
startEsTTCheckbox.setOnClickListener(this); startEatingSoonTTCheckbox.setOnClickListener(this);
startActivityTTCheckbox.setOnClickListener(this); startActivityTTCheckbox.setOnClickListener(this);
// TODO prefilling carbs, maybe // TODO prefilling carbs, maybe
@ -151,13 +152,13 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
fav1Button = view.findViewById(R.id.newcarbs_plus1); fav1Button = view.findViewById(R.id.newcarbs_plus1);
fav1Button.setOnClickListener(this); 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 = view.findViewById(R.id.newcarbs_plus2);
fav2Button.setOnClickListener(this); 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 = view.findViewById(R.id.newcarbs_plus3);
fav3Button.setOnClickListener(this); 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); suspendLoopCheckbox = view.findViewById(R.id.newcarbs_suspend_loop);
@ -201,21 +202,21 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
break; break;
case R.id.newcarbs_plus1: case R.id.newcarbs_plus1:
editCarbs.setValue(editCarbs.getValue() 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(); validateInputs();
break; break;
case R.id.newcarbs_plus2: case R.id.newcarbs_plus2:
editCarbs.setValue(editCarbs.getValue() 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(); validateInputs();
break; break;
case R.id.newcarbs_plus3: case R.id.newcarbs_plus3:
editCarbs.setValue(editCarbs.getValue() 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(); validateInputs();
break; break;
case R.id.newcarbs_activity_tt: case R.id.newcarbs_activity_tt:
startEsTTCheckbox.setChecked(false); startEatingSoonTTCheckbox.setChecked(false);
break; break;
case R.id.carbs_eating_soon_tt: case R.id.carbs_eating_soon_tt:
startActivityTTCheckbox.setChecked(false); startActivityTTCheckbox.setChecked(false);
@ -238,45 +239,47 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
String confirmMessage = ""; String confirmMessage = "";
if (carbs > 0) if (carbs > 0)
confirmMessage += getString(R.string.carbs) + ": " + "<font color='" + MainApp.sResources.getColor(R.color.colorCarbsButton) + "'>" + carbsAfterConstraints + "g" + "</font>"; confirmMessage += MainApp.gs(R.string.carbs) + ": " + "<font color='" + MainApp.gc(R.color.colorCarbsButton) + "'>" + carbsAfterConstraints + "g" + "</font>";
if (!carbsAfterConstraints.equals(carbs)) if (!carbsAfterConstraints.equals(carbs))
confirmMessage += "<br/><font color='" + MainApp.sResources.getColor(R.color.low) + "'>" + getString(R.string.carbsconstraintapplied) + "</font>"; confirmMessage += "<br/><font color='" + MainApp.gc(R.color.low) + "'>" + MainApp.gs(R.string.carbsconstraintapplied) + "</font>";
if (suspendLoopCheckbox.isChecked()) { if (suspendLoopCheckbox.isChecked()) {
confirmMessage += "<br/>" + "Loop: " + "<font color='" + MainApp.sResources.getColor(R.color.low) + "'>" + "Suspend for 30 min</font>"; confirmMessage += "<br/>" + MainApp.gs(R.string.loop) + ": " + "<font color='" + MainApp.gc(R.color.low) + "'>" + MainApp.gs(R.string.suspendloopfor30min) + "</font>";
} }
double activityTTDurationSettings = SP.getDouble(R.string.key_activity_duration, 90d); final Profile currentProfile = MainApp.getConfigBuilder().getProfile();
double eatingSoonTTDuration = SP.getDouble(R.string.key_eatingsoon_duration, 45d);
double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, 90d);
double activityTTDuration = activityTTDurationSettings > 0 ? activityTTDurationSettings : 90d;
final double esTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : 45d;
double prefTT = SP.getDouble(R.string.key_activity_target, 140d);
double activityTT = 140d;
double esTT = 90d;
Profile currentProfile = MainApp.getConfigBuilder().getProfile();
if (currentProfile == null) if (currentProfile == null)
return; return;
esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT, currentProfile.getUnits()) : 90d; int activityTTDuration = SP.getInt(R.string.key_activity_duration, Constants.defaultActivityTTDuration);
activityTT = prefTT > 0 ? Profile.toMgdl(prefTT, currentProfile.getUnits()) : 140d; 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()) { if (startActivityTTCheckbox.isChecked()) {
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
confirmMessage += "<br/>" + "TT: " + "<font color='" + MainApp.sResources.getColor(R.color.high) + "'>" + Profile.toMmol(activityTT, Constants.MGDL) + " mmol/l for " + ((int) activityTTDuration) + " min </font>"; confirmMessage += "<br/>" + MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(activityTT) + " mmol/l (" + ((int) activityTTDuration) + " min)</font>";
} else } else
confirmMessage += "<br/>" + "TT: " + "<font color='" + MainApp.sResources.getColor(R.color.high) + "'>" + ((int) activityTT) + " mg/dl for " + ((int) activityTTDuration) + " min </font>"; confirmMessage += "<br/>" + MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to0Decimal(activityTT) + " mg/dl (" + ((int) activityTTDuration) + " min)</font>";
} }
if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if (startEatingSoonTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) {
if (currentProfile.getUnits().equals(Constants.MMOL)) { if (currentProfile.getUnits().equals(Constants.MMOL)) {
confirmMessage += "<br/>" + "TT: " + "<font color='" + MainApp.sResources.getColor(R.color.high) + "'>" + Profile.toMmol(esTT, Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min </font>"; confirmMessage += "<br/>" + MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)</font>";
} else } else
confirmMessage += "<br/>" + "TT: " + "<font color='" + MainApp.sResources.getColor(R.color.high) + "'>" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min </font>"; confirmMessage += "<br/>" + MainApp.gs(R.string.temptargetshort) + ": " + "<font color='" + MainApp.gc(R.color.high) + "'>" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)</font>";
} }
final double finalTT = activityTT; final double finalActivityTT = activityTT;
final double finalEsTT = esTT; final double finalEatigSoonTT = eatingSoonTT;
final int finalActivityTTDuration = activityTTDuration;
final int finalEatingSoonTTDuration = eatingSoonTTDuration;
if (StringUtils.isNoneEmpty(food)) { if (StringUtils.isNoneEmpty(food)) {
confirmMessage += "<br/>" + "Food: " + food; confirmMessage += "<br/>" + "Food: " + food;
} }
@ -291,12 +294,12 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
final Context context = getContext(); final Context context = getContext();
final AlertDialog.Builder builder = new AlertDialog.Builder(context); final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(this.getContext().getString(R.string.confirmation)); builder.setTitle(MainApp.gs(R.string.confirmation));
if (confirmMessage.startsWith("<br/>")) if (confirmMessage.startsWith("<br/>"))
confirmMessage = confirmMessage.substring("<br/>".length()); confirmMessage = confirmMessage.substring("<br/>".length());
builder.setMessage(Html.fromHtml(confirmMessage)); builder.setMessage(Html.fromHtml(confirmMessage));
builder.setPositiveButton(getString(R.string.ok), (dialog, id) -> { builder.setPositiveButton(MainApp.gs(R.string.ok), (dialog, id) -> {
synchronized (builder) { synchronized (builder) {
if (accepted) { if (accepted) {
log.debug("guarding: already accepted"); log.debug("guarding: already accepted");
@ -311,29 +314,29 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
@Override @Override
public void run() { public void run() {
if (!result.success) { if (!result.success) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.tempbasaldeliveryerror));
} }
} }
}); });
} }
if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && startEsTTCheckbox.isChecked())) { if (startActivityTTCheckbox.isChecked()) {
TempTarget tempTarget = new TempTarget(); TempTarget tempTarget = new TempTarget();
tempTarget.date = System.currentTimeMillis(); tempTarget.date = System.currentTimeMillis();
tempTarget.durationInMinutes = (int) activityTTDuration; tempTarget.durationInMinutes = finalActivityTTDuration;
tempTarget.reason = "Activity"; tempTarget.reason = MainApp.gs(R.string.activity);
tempTarget.source = Source.USER; tempTarget.source = Source.USER;
tempTarget.low = (double) finalTT; tempTarget.low = Profile.toMgdl(finalActivityTT, currentProfile.getUnits());
tempTarget.high = (double) finalTT; tempTarget.high = Profile.toMgdl(finalActivityTT, currentProfile.getUnits());
MainApp.getDbHelper().createOrUpdate(tempTarget); MainApp.getDbHelper().createOrUpdate(tempTarget);
} else if (startEsTTCheckbox.isChecked()) { } else if (startEatingSoonTTCheckbox.isChecked()) {
TempTarget tempTarget = new TempTarget(); TempTarget tempTarget = new TempTarget();
tempTarget.date = System.currentTimeMillis(); tempTarget.date = System.currentTimeMillis();
tempTarget.durationInMinutes = (int) esTTDuration; tempTarget.durationInMinutes = finalEatingSoonTTDuration;
tempTarget.reason = "Eating soon"; tempTarget.reason = MainApp.gs(R.string.eatingsoon);
tempTarget.source = Source.USER; tempTarget.source = Source.USER;
tempTarget.low = (double) finalEsTT; tempTarget.low = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits());
tempTarget.high = (double) finalEsTT; tempTarget.high = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits());
MainApp.getDbHelper().createOrUpdate(tempTarget); MainApp.getDbHelper().createOrUpdate(tempTarget);
} }
@ -349,7 +352,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D
} }
} }
}); });
builder.setNegativeButton(getString(R.string.cancel), null); builder.setNegativeButton(MainApp.gs(R.string.cancel), null);
builder.show(); builder.show();
dismiss(); dismiss();
} else } else

View file

@ -37,27 +37,27 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:text="Start activity TT"/> android:text="@string/start_activity_tt" />
<CheckBox <CheckBox
android:id="@+id/carbs_eating_soon_tt" android:id="@+id/carbs_eating_soon_tt"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:text="Set Eating soon TT"/> android:text="@string/start_eating_soon_tt" />
<CheckBox <CheckBox
android:id="@+id/newcarbs_suspend_loop" android:id="@+id/newcarbs_suspend_loop"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:text="Suspend loop for 30 min"/> android:text="@string/suspendloopfor30min" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="5dp" android:layout_gravity="center_horizontal"
android:layout_gravity="center_horizontal"> android:padding="5dp">
<TextView <TextView
android:id="@+id/newcarbs_eventdate" android:id="@+id/newcarbs_eventdate"
@ -83,7 +83,7 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:width="180dp" android:width="180dp"
android:inputType="text|textCapWords" android:inputType="text|textCapWords"
android:visibility="gone"/> android:visibility="gone" />
<info.nightscout.utils.NumberPicker <info.nightscout.utils.NumberPicker
android:id="@+id/newcarb_carbsamount" android:id="@+id/newcarb_carbsamount"
@ -98,8 +98,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:layout_marginBottom="5dp"
android:layout_marginBottom="5dp"> android:orientation="horizontal">
<Button <Button
android:id="@+id/newcarbs_plus1" android:id="@+id/newcarbs_plus1"

View file

@ -968,5 +968,9 @@
<string name="fabric_upload">Fabric Upload</string> <string name="fabric_upload">Fabric Upload</string>
<string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string> <string name="allow_automated_crash_reporting">Allow automated crash reporting and feature usage data to be sent to the developers via the fabric.io service.</string>
<string name="g5appnotdetected">Please update your G5 app to supported version</string> <string name="g5appnotdetected">Please update your G5 app to supported version</string>
<string name="suspendloopfor30min">Suspend for 30 min</string>
<string name="start_activity_tt">Start Activity TT</string>
<string name="start_eating_soon_tt">Start Eating soon TT</string>
<string name="temptargetshort">TT</string>
</resources> </resources>