diff --git a/app/build.gradle b/app/build.gradle index b885c36dcd..77d1bde228 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -263,4 +263,4 @@ task full_clean(type: Delete) { } clean.dependsOn full_clean -preBuild.dependsOn copyLibs \ No newline at end of file +preBuild.dependsOn copyLibs diff --git a/app/src/main/java/info/nightscout/androidaps/HistoryBrowseActivity.java b/app/src/main/java/info/nightscout/androidaps/HistoryBrowseActivity.java index cf3d1fc34c..c308cd2efe 100644 --- a/app/src/main/java/info/nightscout/androidaps/HistoryBrowseActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/HistoryBrowseActivity.java @@ -80,9 +80,9 @@ public class HistoryBrowseActivity extends AppCompatActivity { ButterKnife.bind(this); - bgGraph.getGridLabelRenderer().setGridColor(MainApp.sResources.getColor(R.color.graphgrid)); + bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid)); bgGraph.getGridLabelRenderer().reloadStyles(); - iobGraph.getGridLabelRenderer().setGridColor(MainApp.sResources.getColor(R.color.graphgrid)); + iobGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid)); iobGraph.getGridLabelRenderer().reloadStyles(); iobGraph.getGridLabelRenderer().setHorizontalLabelsVisible(false); bgGraph.getGridLabelRenderer().setLabelVerticalWidth(50); diff --git a/app/src/main/java/info/nightscout/androidaps/data/Profile.java b/app/src/main/java/info/nightscout/androidaps/data/Profile.java index 783124168f..374612f2f5 100644 --- a/app/src/main/java/info/nightscout/androidaps/data/Profile.java +++ b/app/src/main/java/info/nightscout/androidaps/data/Profile.java @@ -180,6 +180,10 @@ public class Profile { } public synchronized boolean isValid(String from) { + return isValid(from, true); + } + + public synchronized boolean isValid(String from, boolean notify) { if (!isValid) return false; if (!isValidated) { @@ -207,7 +211,7 @@ public class Profile { if (pump != null && !pump.getPumpDescription().is30minBasalRatesCapable) { for (int index = 0; index < basal_v.size(); index++) { long secondsFromMidnight = basal_v.keyAt(index); - if (secondsFromMidnight % 3600 != 0) { + if (notify && secondsFromMidnight % 3600 != 0) { Notification notification = new Notification(Notification.BASAL_PROFILE_NOT_ALIGNED_TO_HOURS, String.format(MainApp.gs(R.string.basalprofilenotaligned), from), Notification.NORMAL); MainApp.bus().post(new EventNewNotification(notification)); } @@ -220,7 +224,8 @@ public class Profile { for (int i = 0; i < basal_v.size(); i++) { if (basal_v.valueAt(i) < description.basalMinimumRate) { basal_v.setValueAt(i, description.basalMinimumRate); - sendBelowMinimumNotification(from); + if (notify) + sendBelowMinimumNotification(from); } } } else { diff --git a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java index ef0277d170..5ddb7a80b2 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java +++ b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java @@ -211,27 +211,27 @@ public class BgReading implements DataPointWithLabelInterface { if (highLine < 1) { highLine = Profile.fromMgdlToUnits(OverviewPlugin.bgTargetHigh, units); } - int color = MainApp.sResources.getColor(R.color.inrange); + int color = MainApp.gc(R.color.inrange); if (isPrediction()) return getPredectionColor(); else if (valueToUnits(units) < lowLine) - color = MainApp.sResources.getColor(R.color.low); + color = MainApp.gc(R.color.low); else if (valueToUnits(units) > highLine) - color = MainApp.sResources.getColor(R.color.high); + color = MainApp.gc(R.color.high); return color; } public int getPredectionColor() { if (isIOBPrediction) - return MainApp.sResources.getColor(R.color.iob); + return MainApp.gc(R.color.iob); if (isCOBPrediction) - return MainApp.sResources.getColor(R.color.cob); + return MainApp.gc(R.color.cob); if (isaCOBPrediction) - return 0x80FFFFFF & MainApp.sResources.getColor(R.color.cob); + return 0x80FFFFFF & MainApp.gc(R.color.cob); if (isUAMPrediction) - return MainApp.sResources.getColor(R.color.uam); + return MainApp.gc(R.color.uam); if (isZTPrediction) - return MainApp.sResources.getColor(R.color.zt); + return MainApp.gc(R.color.zt); return R.color.mdtp_white; } diff --git a/app/src/main/java/info/nightscout/androidaps/db/CareportalEvent.java b/app/src/main/java/info/nightscout/androidaps/db/CareportalEvent.java index 755005cdae..d5a1c90100 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/CareportalEvent.java +++ b/app/src/main/java/info/nightscout/androidaps/db/CareportalEvent.java @@ -251,7 +251,7 @@ public class CareportalEvent implements DataPointWithLabelInterface { @Override public int getColor() { if (eventType.equals(ANNOUNCEMENT)) - return MainApp.sResources.getColor(R.color.notificationAnnouncement); + return MainApp.gc(R.color.notificationAnnouncement); if (eventType.equals(MBG)) return Color.RED; if (eventType.equals(BGCHECK)) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java index 828c7dbcc9..dda2e61006 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java @@ -175,14 +175,14 @@ public class FillDialog extends DialogFragment implements OnClickListener { confirmMessage.add(""); confirmMessage.add(MainApp.gs(R.string.bolus) + ": " + "" + insulinAfterConstraints + "U" + ""); if (!insulinAfterConstraints.equals(insulin)) - confirmMessage.add("" + MainApp.gs(R.string.bolusconstraintapplied) + ""); + confirmMessage.add("" + MainApp.gs(R.string.bolusconstraintapplied) + ""); } if (pumpSiteChangeCheckbox.isChecked()) - confirmMessage.add("" + "" + MainApp.gs(R.string.record_pump_site_change) + ""); + confirmMessage.add("" + "" + MainApp.gs(R.string.record_pump_site_change) + ""); if (insulinCartridgeChangeCheckbox.isChecked()) - confirmMessage.add("" + "" + MainApp.gs(R.string.record_insulin_cartridge_change) + ""); + confirmMessage.add("" + "" + MainApp.gs(R.string.record_insulin_cartridge_change) + ""); final String notes = notesEdit.getText().toString(); if (!notes.isEmpty()) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java index ac018e3101..4a4210f29e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/CareportalFragment.java @@ -269,9 +269,9 @@ public class CareportalFragment extends SubscriberFragment implements View.OnCli public static int determineTextColor(CareportalEvent careportalEvent, double warnThreshold, double urgentThreshold) { if (careportalEvent.isOlderThan(urgentThreshold)) { - return MainApp.sResources.getColor(R.color.low); + return MainApp.gc(R.color.low); } else if (careportalEvent.isOlderThan(warnThreshold)) { - return MainApp.sResources.getColor(R.color.high); + return MainApp.gc(R.color.high); } else { return Color.WHITE; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java index 829a0fa4ad..70b5eb466b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java @@ -330,7 +330,7 @@ public class ConfigBuilderFragment extends SubscriberFragment { } if (plugin.isEnabled(type)) { - view.setBackgroundColor(MainApp.sResources.getColor(R.color.configBuilderSelectedBackground)); + view.setBackgroundColor(MainApp.gc(R.color.configBuilderSelectedBackground)); } return view; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinFragment.java index a171d646e9..a524a5b318 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinFragment.java @@ -52,7 +52,7 @@ public class InsulinFragment extends Fragment { private void updateGUI() { insulinName.setText(ConfigBuilderPlugin.getActiveInsulin().getFriendlyName()); insulinComment.setText(ConfigBuilderPlugin.getActiveInsulin().getComment()); - insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(ConfigBuilderPlugin.getActiveInsulin().getDia()) + "h"); + insulinDia.setText(MainApp.gs(R.string.dia) + " " + Double.toString(ConfigBuilderPlugin.getActiveInsulin().getDia()) + "h"); insulinGraph.show(ConfigBuilderPlugin.getActiveInsulin()); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/BolusProgressDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/BolusProgressDialog.java index 2ca8e6961a..8ef6ec2fc6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/BolusProgressDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/BolusProgressDialog.java @@ -70,6 +70,9 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL @Override public void onResume() { super.onResume(); + if(!ConfigBuilderPlugin.getCommandQueue().bolusInQueue()) { + bolusEnded = true; + } if (bolusEnded) { dismiss(); } else { 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 c60d237882..4360e2ed34 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 @@ -1,9 +1,7 @@ package info.nightscout.androidaps.plugins.Overview.Dialogs; -import android.content.Intent; import android.os.Bundle; import android.os.HandlerThread; -import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.text.Editable; @@ -33,15 +31,13 @@ import java.util.List; 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.interfaces.Constraint; -import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.Treatments.CarbsGenerator; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; -import info.nightscout.androidaps.queue.Callback; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DefaultValueHelper; @@ -334,10 +330,10 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C actions.add(MainApp.gs(R.string.duration) + ": " + duration + MainApp.gs(R.string.shorthour)); } if (carbs > 0) { - actions.add(MainApp.gs(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + ""); + actions.add(MainApp.gs(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + ""); } if (!carbsAfterConstraints.equals(carbs)) { - actions.add("" + MainApp.gs(R.string.carbsconstraintapplied) + ""); + actions.add("" + MainApp.gs(R.string.carbsconstraintapplied) + ""); } final String notes = notesEdit.getText().toString(); if (!notes.isEmpty()) { @@ -364,48 +360,40 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C } accepted = true; - if (startActivityTTCheckbox.isChecked()) { - TempTarget tempTarget = new TempTarget() - .date(System.currentTimeMillis()) - .duration(finalActivityTTDuration) - .reason(MainApp.gs(R.string.activity)) - .source(Source.USER) - .low(Profile.toMgdl(finalActivityTT, currentProfile.getUnits())) - .high(Profile.toMgdl(finalActivityTT, currentProfile.getUnits())); - TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); - } else if (startEatingSoonTTCheckbox.isChecked()) { - TempTarget tempTarget = new TempTarget() - .date(System.currentTimeMillis()) - .duration(finalEatingSoonTTDuration) - .reason(MainApp.gs(R.string.eatingsoon)) - .source(Source.USER) - .low(Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits())) - .high(Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits())); - TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); - } else if (startHypoTTCheckbox.isChecked()) { - TempTarget tempTarget = new TempTarget() - .date(System.currentTimeMillis()) - .duration(finalHypoTTDuration) - .reason(MainApp.gs(R.string.hypo)) - .source(Source.USER) - .low(Profile.toMgdl(finalHypoTT, currentProfile.getUnits())) - .high(Profile.toMgdl(finalHypoTT, currentProfile.getUnits())); - TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); - } + if (startActivityTTCheckbox.isChecked()) { + TempTarget tempTarget = new TempTarget() + .date(System.currentTimeMillis()) + .duration(finalActivityTTDuration) + .reason(MainApp.gs(R.string.activity)) + .source(Source.USER) + .low(Profile.toMgdl(finalActivityTT, currentProfile.getUnits())) + .high(Profile.toMgdl(finalActivityTT, currentProfile.getUnits())); + TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); + } else if (startEatingSoonTTCheckbox.isChecked()) { + TempTarget tempTarget = new TempTarget() + .date(System.currentTimeMillis()) + .duration(finalEatingSoonTTDuration) + .reason(MainApp.gs(R.string.eatingsoon)) + .source(Source.USER) + .low(Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits())) + .high(Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits())); + TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); + } else if (startHypoTTCheckbox.isChecked()) { + TempTarget tempTarget = new TempTarget() + .date(System.currentTimeMillis()) + .duration(finalHypoTTDuration) + .reason(MainApp.gs(R.string.hypo)) + .source(Source.USER) + .low(Profile.toMgdl(finalHypoTT, currentProfile.getUnits())) + .high(Profile.toMgdl(finalHypoTT, currentProfile.getUnits())); + TreatmentsPlugin.getPlugin().addToHistoryTempTarget(tempTarget); + } if (carbsAfterConstraints > 0) { if (duration == 0) { - createCarb(carbsAfterConstraints, time, notes); + CarbsGenerator.createCarb(carbsAfterConstraints, time, CareportalEvent.CARBCORRECTION, notes); } else { - long remainingCarbs = carbsAfterConstraints; - int ticks = (duration * 4); //duration guaranteed to be integer greater zero - for (int i = 0; i < ticks; i++){ - long carbTime = time + i * 15 * 60 * 1000; - long smallCarbAmount = Math.round((1d * remainingCarbs) / (ticks-i)); //on last iteration (ticks-i) is 1 -> smallCarbAmount == remainingCarbs - remainingCarbs -= smallCarbAmount; - if (smallCarbAmount > 0) - createCarb(smallCarbAmount, carbTime, notes); - } + CarbsGenerator.generateCarbs(carbsAfterConstraints, time, duration, notes); } } } @@ -420,31 +408,4 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, C log.error("Unhandled exception", e); } } - - private void createCarb(long carbs, long time, @Nullable String notes) { - DetailedBolusInfo carbInfo = new DetailedBolusInfo(); - carbInfo.date = time; - carbInfo.eventType = CareportalEvent.CARBCORRECTION; - carbInfo.carbs = carbs; - carbInfo.context = getContext(); - carbInfo.source = Source.USER; - carbInfo.notes = notes; - if (ConfigBuilderPlugin.getActivePump().getPumpDescription().storesCarbInfo && carbInfo.date <= now()) { - ConfigBuilderPlugin.getCommandQueue().bolus(carbInfo, new Callback() { - @Override - public void run() { - if (!result.success) { - Intent i = new Intent(MainApp.instance(), ErrorHelperActivity.class); - i.putExtra("soundid", R.raw.boluserror); - i.putExtra("status", result.comment); - i.putExtra("title", MainApp.gs(R.string.treatmentdeliveryerror)); - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - MainApp.instance().startActivity(i); - } - } - }); - } else { - TreatmentsPlugin.getPlugin().addToHistoryTreatment(carbInfo); - } - } } 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 3539bee093..875d207352 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 @@ -201,14 +201,14 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener List actions = new LinkedList<>(); if (insulin > 0) { - actions.add(MainApp.gs(R.string.bolus) + ": " + "" + insulinAfterConstraints + "U" + ""); + actions.add(MainApp.gs(R.string.bolus) + ": " + "" + insulinAfterConstraints + "U" + ""); if (recordOnlyCheckbox.isChecked()) { - actions.add("" + MainApp.gs(R.string.bolusrecordedonly) + ""); + actions.add("" + MainApp.gs(R.string.bolusrecordedonly) + ""); } } if (!insulinAfterConstraints.equals(insulin)) - actions.add("" + MainApp.gs(R.string.bolusconstraintapplied) + ""); + actions.add("" + MainApp.gs(R.string.bolusconstraintapplied) + ""); int eatingSoonTTDuration = SP.getInt(R.string.key_eatingsoon_duration, Constants.defaultEatingSoonTTDuration); eatingSoonTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : Constants.defaultEatingSoonTTDuration; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java index 718b1c6bfa..c38f41b825 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java @@ -304,16 +304,15 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com final Profile profile = MainApp.getConfigBuilder().getProfile(); if (profile != null && (calculatedTotalInsulin > 0d || calculatedCarbs > 0d)) { - DecimalFormat formatNumber2decimalplaces = new DecimalFormat("0.00"); - String confirmMessage = MainApp.gs(R.string.entertreatmentquestion); Double insulinAfterConstraints = MainApp.getConstraintChecker().applyBolusConstraints(new Constraint<>(calculatedTotalInsulin)).value(); Integer carbsAfterConstraints = MainApp.getConstraintChecker().applyCarbsConstraints(new Constraint<>(calculatedCarbs)).value(); - confirmMessage += "
" + MainApp.gs(R.string.bolus) + ": " + "" + formatNumber2decimalplaces.format(insulinAfterConstraints) + "U" + ""; - confirmMessage += "
" + MainApp.gs(R.string.carbs) + ": " + carbsAfterConstraints + "g"; - + if (insulinAfterConstraints > 0) + confirmMessage += "
" + MainApp.gs(R.string.bolus) + ": " + "" + DecimalFormatter.toPumpSupportedBolus(insulinAfterConstraints) + "U" + ""; + if (carbsAfterConstraints > 0) + confirmMessage += "
" + MainApp.gs(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + ""; if (insulinAfterConstraints - calculatedTotalInsulin != 0 || !carbsAfterConstraints.equals(calculatedCarbs)) { AlertDialog.Builder builder = new AlertDialog.Builder(context); 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 3d0970f8f4..f43a78d64f 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 @@ -240,7 +240,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, loopStatusLayout = (LinearLayout) view.findViewById(R.id.overview_looplayout); pumpStatusLayout = (LinearLayout) view.findViewById(R.id.overview_pumpstatuslayout); - pumpStatusView.setBackgroundColor(MainApp.sResources.getColor(R.color.colorInitializingBorder)); + pumpStatusView.setBackgroundColor(MainApp.gc(R.color.colorInitializingBorder)); iobView = (TextView) view.findViewById(R.id.overview_iob); cobView = (TextView) view.findViewById(R.id.overview_cob); @@ -300,9 +300,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, else axisWidth = 80; - bgGraph.getGridLabelRenderer().setGridColor(MainApp.sResources.getColor(R.color.graphgrid)); + bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid)); bgGraph.getGridLabelRenderer().reloadStyles(); - iobGraph.getGridLabelRenderer().setGridColor(MainApp.sResources.getColor(R.color.graphgrid)); + iobGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid)); iobGraph.getGridLabelRenderer().reloadStyles(); iobGraph.getGridLabelRenderer().setHorizontalLabelsVisible(false); bgGraph.getGridLabelRenderer().setLabelVerticalWidth(axisWidth); @@ -1006,11 +1006,11 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, //Start with updating the BG as it is unaffected by loop. // **** BG value **** if (lastBG != null) { - int color = MainApp.sResources.getColor(R.color.inrange); + int color = MainApp.gc(R.color.inrange); if (lastBG.valueToUnits(units) < lowLine) - color = MainApp.sResources.getColor(R.color.low); + color = MainApp.gc(R.color.low); else if (lastBG.valueToUnits(units) > highLine) - color = MainApp.sResources.getColor(R.color.high); + color = MainApp.gc(R.color.high); bgView.setText(lastBG.valueToUnitsToString(units)); arrowView.setText(lastBG.directionToSymbol()); bgView.setTextColor(color); @@ -1034,23 +1034,23 @@ 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.sResources.getColor(R.color.loopenabled)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.loopenabled)); apsModeView.setTextColor(Color.BLACK); final LoopPlugin loopPlugin = LoopPlugin.getPlugin(); if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isSuperBolus()) { - apsModeView.setBackgroundColor(MainApp.sResources.getColor(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); apsModeView.setText(String.format(MainApp.gs(R.string.loopsuperbolusfor), loopPlugin.minutesToEndOfSuspend())); apsModeView.setTextColor(Color.WHITE); } else if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isDisconnected()) { - apsModeView.setBackgroundColor(MainApp.sResources.getColor(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); apsModeView.setText(String.format(MainApp.gs(R.string.loopdisconnectedfor), loopPlugin.minutesToEndOfSuspend())); apsModeView.setTextColor(Color.WHITE); } else if (loopPlugin.isEnabled(PluginType.LOOP) && loopPlugin.isSuspended()) { - apsModeView.setBackgroundColor(MainApp.sResources.getColor(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); apsModeView.setText(String.format(MainApp.gs(R.string.loopsuspendedfor), loopPlugin.minutesToEndOfSuspend())); apsModeView.setTextColor(Color.WHITE); } else if (pump.isSuspended()) { - apsModeView.setBackgroundColor(MainApp.sResources.getColor(R.color.looppumpsuspended)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.looppumpsuspended)); apsModeView.setText(MainApp.gs(R.string.pumpsuspended)); apsModeView.setTextColor(Color.WHITE); } else if (loopPlugin.isEnabled(PluginType.LOOP)) { @@ -1060,7 +1060,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, apsModeView.setText(MainApp.gs(R.string.openloop)); } } else { - apsModeView.setBackgroundColor(MainApp.sResources.getColor(R.color.loopdisabled)); + apsModeView.setBackgroundColor(MainApp.gc(R.color.loopdisabled)); apsModeView.setText(MainApp.gs(R.string.disabledloop)); apsModeView.setTextColor(Color.WHITE); } @@ -1072,12 +1072,12 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, TempTarget tempTarget = TreatmentsPlugin.getPlugin().getTempTargetFromHistory(); if (tempTarget != null) { tempTargetView.setTextColor(Color.BLACK); - tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground)); + tempTargetView.setBackgroundColor(MainApp.gc(R.color.tempTargetBackground)); 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.sResources.getColor(R.color.tempTargetDisabledBackground)); + tempTargetView.setBackgroundColor(MainApp.gc(R.color.tempTargetDisabledBackground)); tempTargetView.setText(Profile.toTargetRangeString(profile.getTargetLow(), profile.getTargetHigh(), units, units)); tempTargetView.setVisibility(View.VISIBLE); } @@ -1148,7 +1148,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, } } if (activeTemp != null) { - baseBasalView.setTextColor(MainApp.sResources.getColor(R.color.basal)); + baseBasalView.setTextColor(MainApp.gc(R.color.basal)); } else { baseBasalView.setTextColor(Color.WHITE); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java index 177e7f9642..1c8b27c113 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java @@ -320,14 +320,13 @@ public class GraphData { } private double getNearestBg(long date) { - double bg = 0; for (int r = bgReadingsArray.size() - 1; r >= 0; r--) { BgReading reading = bgReadingsArray.get(r); if (reading.date > date) continue; - bg = Profile.fromMgdlToUnits(reading.value, units); - break; + return Profile.fromMgdlToUnits(reading.value, units); } - return bg; + return bgReadingsArray.size() > 0 + ? Profile.fromMgdlToUnits(bgReadingsArray.get(0).value, units) : 0; } // scale in % of vertical size (like 0.3) @@ -436,10 +435,10 @@ public class GraphData { for (long time = fromTime; time <= toTime; time += 5 * 60 * 1000L) { AutosensData autosensData = IobCobCalculatorPlugin.getPlugin().getAutosensData(time); if (autosensData != null) { - int color = Color.BLACK; // "=" - if (autosensData.pastSensitivity.equals("C")) color = Color.GRAY; - if (autosensData.pastSensitivity.equals("+")) color = Color.GREEN; - if (autosensData.pastSensitivity.equals("-")) color = Color.RED; + int color = MainApp.gc(R.color.deviationblack); // "=" + if (autosensData.pastSensitivity.equals("C")) color = MainApp.gc(R.color.deviationgrey); + if (autosensData.pastSensitivity.equals("+")) color = MainApp.gc(R.color.deviationgreen); + if (autosensData.pastSensitivity.equals("-")) color = MainApp.gc(R.color.deviationred); devArray.add(new DeviationDataPoint(time, autosensData.deviation, color, devScale)); maxDevValueFound = Math.max(maxDevValueFound, Math.abs(autosensData.deviation)); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfilePlugin.java index ce190b691b..c132196228 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ProfileLocal/LocalProfilePlugin.java @@ -177,7 +177,7 @@ public class LocalProfilePlugin extends PluginBase implements ProfileInterface { } public synchronized boolean isValidEditState() { - return createProfileStore().getDefaultProfile().isValid(MainApp.gs(R.string.localprofile)); + return createProfileStore().getDefaultProfile().isValid(MainApp.gs(R.string.localprofile), false); } @NonNull diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java index 455f1f7015..a37069c71d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpCombo/ComboFragment.java @@ -124,6 +124,10 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis activityView.setTextColor(Color.WHITE); activityView.setTextSize(14); activityView.setText(activity); + } else if (ConfigBuilderPlugin.getCommandQueue().size() > 0) { + activityView.setTextColor(Color.WHITE); + activityView.setTextSize(14); + activityView.setText(""); } else if (plugin.isInitialized()){ activityView.setTextColor(Color.WHITE); activityView.setTextSize(20); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java index b8afdaf15a..b11cd87278 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRFragment.java @@ -111,7 +111,7 @@ public class DanaRFragment extends SubscriberFragment { View view = inflater.inflate(R.layout.danar_fragment, container, false); unbinder = ButterKnife.bind(this, view); - pumpStatusView.setBackgroundColor(MainApp.sResources.getColor(R.color.colorInitializingBorder)); + pumpStatusView.setBackgroundColor(MainApp.gc(R.color.colorInitializingBorder)); return view; } catch (Exception e) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/CarbsGenerator.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/CarbsGenerator.java new file mode 100644 index 0000000000..99168a2776 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/CarbsGenerator.java @@ -0,0 +1,56 @@ +package info.nightscout.androidaps.plugins.Treatments; + +import android.content.Intent; +import android.support.annotation.Nullable; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.data.DetailedBolusInfo; +import info.nightscout.androidaps.db.CareportalEvent; +import info.nightscout.androidaps.db.Source; +import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.Overview.Dialogs.ErrorHelperActivity; +import info.nightscout.androidaps.queue.Callback; + +import static info.nightscout.utils.DateUtil.now; + +public class CarbsGenerator { + public static void generateCarbs(int amount, long startTime, int duration, @Nullable String notes) { + long remainingCarbs = amount; + int ticks = (duration * 4); //duration guaranteed to be integer greater zero + for (int i = 0; i < ticks; i++){ + long carbTime = startTime + i * 15 * 60 * 1000; + int smallCarbAmount = (int) Math.round((1d * remainingCarbs) / (ticks-i)); //on last iteration (ticks-i) is 1 -> smallCarbAmount == remainingCarbs + remainingCarbs -= smallCarbAmount; + if (smallCarbAmount > 0) + createCarb(smallCarbAmount, carbTime, CareportalEvent.MEALBOLUS, notes); + } + } + + public static void createCarb(int carbs, long time, String eventType, @Nullable String notes) { + DetailedBolusInfo carbInfo = new DetailedBolusInfo(); + carbInfo.date = time; + carbInfo.eventType = eventType; + carbInfo.carbs = carbs; + carbInfo.context = MainApp.instance(); + carbInfo.source = Source.USER; + carbInfo.notes = notes; + if (ConfigBuilderPlugin.getActivePump().getPumpDescription().storesCarbInfo && carbInfo.date <= now()) { + ConfigBuilderPlugin.getCommandQueue().bolus(carbInfo, new Callback() { + @Override + public void run() { + if (!result.success) { + Intent i = new Intent(MainApp.instance(), ErrorHelperActivity.class); + i.putExtra("soundid", R.raw.boluserror); + i.putExtra("status", result.comment); + i.putExtra("title", MainApp.gs(R.string.treatmentdeliveryerror)); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + MainApp.instance().startActivity(i); + } + } + }); + } else { + TreatmentsPlugin.getPlugin().addToHistoryTreatment(carbInfo); + } + } +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/Treatment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/Treatment.java index 1983c38242..997a55b5a4 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/Treatment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/Treatment.java @@ -186,7 +186,7 @@ public class Treatment implements DataPointWithLabelInterface { @Override public int getColor() { if (isSMB) - return MainApp.sResources.getColor(R.color.tempbasal); + return MainApp.gc(R.color.tempbasal); else if (isValid) return Color.CYAN; else diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java index fe79f8555b..ea75dfad6a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java @@ -107,13 +107,13 @@ public class TreatmentsFragment extends SubscriberFragment implements View.OnCli } private void setBackgroundColorOnSelected(TextView selected) { - treatmentsTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - extendedBolusesTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - tempBasalsTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - tempTargetTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - profileSwitchTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - careportalTab.setBackgroundColor(MainApp.sResources.getColor(R.color.defaultbackground)); - selected.setBackgroundColor(MainApp.sResources.getColor(R.color.tabBgColorSelected)); + treatmentsTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + extendedBolusesTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + tempBasalsTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + tempTargetTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + profileSwitchTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + careportalTab.setBackgroundColor(MainApp.gc(R.color.defaultbackground)); + selected.setBackgroundColor(MainApp.gc(R.color.tabBgColorSelected)); } @Subscribe 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 aca5100fb6..5ec2723fa4 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 @@ -19,6 +19,7 @@ import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.BgReading; +import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.db.ProfileSwitch; import info.nightscout.androidaps.db.Source; @@ -31,6 +32,8 @@ import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog; import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.IobCobCalculator.CobInfo; +import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; @@ -40,6 +43,7 @@ import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin; import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin; import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin; import info.nightscout.androidaps.plugins.PumpInsight.InsightPlugin; +import info.nightscout.androidaps.plugins.Treatments.CarbsGenerator; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.queue.Callback; import info.nightscout.utils.BolusWizard; @@ -179,6 +183,9 @@ public class ActionStringHandler { } } else if ("wizard".equals(act[0])) { + sendError("Update APP on Watch!"); + return; + } else if ("wizard2".equals(act[0])) { ////////////////////////////////////////////// WIZARD Integer carbsBeforeConstraints = SafeParse.stringToInt(act[1]); Integer carbsAfterConstraints = MainApp.getConstraintChecker().applyCarbsConstraints(new Constraint<>(carbsBeforeConstraints)).value(); @@ -188,10 +195,12 @@ public class ActionStringHandler { return; } - boolean useBG = Boolean.parseBoolean(act[2]); - boolean useBolusIOB = Boolean.parseBoolean(act[3]); - boolean useBasalIOB = Boolean.parseBoolean(act[4]); - int percentage = Integer.parseInt(act[5]); + boolean useBG = SP.getBoolean(R.string.key_wearwizard_bg, true); + boolean useBolusIOB = SP.getBoolean(R.string.key_wearwizard_bolusiob, true); + boolean useBasalIOB = SP.getBoolean(R.string.key_wearwizard_basaliob, true); + boolean useCOB = SP.getBoolean(R.string.key_wearwizard_cob, true); + boolean useTrend = SP.getBoolean(R.string.key_wearwizard_trend, false); + int percentage = Integer.parseInt(act[2]); Profile profile = MainApp.getConfigBuilder().getProfile(); if (profile == null) { @@ -205,9 +214,16 @@ public class ActionStringHandler { return; } + CobInfo cobInfo = IobCobCalculatorPlugin.getPlugin().getCobInfo(false, "Wizard wear"); + if (useCOB && (cobInfo == null || cobInfo.displayCob == null)) { + sendError("Unknown COB! BG reading missing or recent app restart?"); + return; + } + DecimalFormat format = new DecimalFormat("0.00"); + DecimalFormat formatInt = new DecimalFormat("0"); BolusWizard bolusWizard = new BolusWizard(); - bolusWizard.doCalc(profile, null, carbsAfterConstraints, 0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, percentage, useBolusIOB, useBasalIOB, false, false); + bolusWizard.doCalc(profile, null, carbsAfterConstraints, useCOB?cobInfo.displayCob:0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, percentage, useBolusIOB, useBasalIOB, false, useTrend); Double insulinAfterConstraints = MainApp.getConstraintChecker().applyBolusConstraints(new Constraint<>(bolusWizard.calculatedTotalInsulin)).value(); if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) { @@ -232,11 +248,15 @@ public class ActionStringHandler { rMessage += "\n_____________"; rMessage += "\nCalc (IC:" + DecimalFormatter.to1Decimal(bolusWizard.ic) + ", " + "ISF:" + DecimalFormatter.to1Decimal(bolusWizard.sens) + "): "; rMessage += "\nFrom Carbs: " + format.format(bolusWizard.insulinFromCarbs) + "U"; + if (useCOB) + rMessage += "\nFrom" + formatInt.format(cobInfo.displayCob) + "g COB : " + format.format(bolusWizard.insulinFromCOB) + "U"; if (useBG) rMessage += "\nFrom BG: " + 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"; + if (useTrend) + rMessage += "\nFrom 15' trend: " + format.format(bolusWizard.insulinFromTrend) + "U"; if (percentage != 100) { rMessage += "\nPercentage: " + format.format(bolusWizard.totalBeforePercentageAdjustment) + "U * " + percentage + "% -> ~" + format.format(bolusWizard.calculatedTotalInsulin) + "U"; } @@ -308,6 +328,27 @@ public class ActionStringHandler { } } + } else if ("ecarbs".equals(act[0])) { + ////////////////////////////////////////////// ECARBS + int carbs = SafeParse.stringToInt(act[1]); + int starttime = SafeParse.stringToInt(act[2]); + int duration = SafeParse.stringToInt(act[3]); + long starttimestamp = System.currentTimeMillis() + starttime*60*1000; + Integer carbsAfterConstraints = MainApp.getConstraintChecker().applyCarbsConstraints(new Constraint<>(carbs)).value(); + rMessage += MainApp.gs(R.string.carbs) + ": " + carbsAfterConstraints + "g"; + rMessage += "\n" + MainApp.gs(R.string.time) + ": " + DateUtil.timeString(starttimestamp); + rMessage += "\n" + MainApp.gs(R.string.duration) + ": " + duration + "h"; + + + if ( (carbsAfterConstraints - carbs != 0)) { + rMessage += "\n" + MainApp.gs(R.string.constraintapllied); + } + if(carbsAfterConstraints <= 0){ + sendError("Carbs = 0! No action taken!"); + return; + } + rAction += "ecarbs " + carbsAfterConstraints + " " + starttimestamp + " " + duration; + } else return; @@ -560,7 +601,7 @@ public class ActionStringHandler { high *= Constants.MMOLL_TO_MGDL; } generateTempTarget(duration, low, high); - } else if ("wizard".equals(act[0])) { + } else if ("wizard2".equals(act[0])) { //use last calculation as confirmed string matches doBolus(lastBolusWizard.calculatedTotalInsulin, lastBolusWizard.carbs); @@ -573,12 +614,28 @@ public class ActionStringHandler { int timeshift = SafeParse.stringToInt(act[1]); int percentage = SafeParse.stringToInt(act[2]); setCPP(timeshift, percentage); + } else if ("ecarbs".equals(act[0])) { + int carbs = SafeParse.stringToInt(act[1]); + long starttime = SafeParse.stringToLong(act[2]); + int duration = SafeParse.stringToInt(act[3]); + + doECarbs(carbs, starttime, duration); } else if ("dismissoverviewnotification".equals(act[0])) { MainApp.bus().post(new EventDismissNotification(SafeParse.stringToInt(act[1]))); } lastBolusWizard = null; } + private static void doECarbs(int carbs, long time, int duration) { + if (carbs > 0) { + if (duration == 0) { + CarbsGenerator.createCarb(carbs, time, CareportalEvent.CARBCORRECTION, "watch"); + } else { + CarbsGenerator.generateCarbs(carbs, time, duration, "watch eCarbs"); + } + } + } + private static void setCPP(int timeshift, int percentage) { String msg = ""; diff --git a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueue.java b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueue.java index 9085e3f762..d2fd2a5e24 100644 --- a/app/src/main/java/info/nightscout/androidaps/queue/CommandQueue.java +++ b/app/src/main/java/info/nightscout/androidaps/queue/CommandQueue.java @@ -75,7 +75,7 @@ import info.nightscout.androidaps.queue.commands.CommandTempBasalPercent; public class CommandQueue { private static Logger log = LoggerFactory.getLogger(CommandQueue.class); - private LinkedList queue = new LinkedList<>(); + private final LinkedList queue = new LinkedList<>(); protected Command performing; private QueueThread thread = null; @@ -162,8 +162,18 @@ public class CommandQueue { tempCommandQueue.readStatus(reason, callback); } + public synchronized boolean bolusInQueue(){ + if(isRunning(Command.CommandType.BOLUS)) return true; + for (int i = 0; i < queue.size(); i++) { + if (queue.get(i).commandType == Command.CommandType.BOLUS) { + return true; + } + } + return false; + } + // returns true if command is queued - public boolean bolus(DetailedBolusInfo detailedBolusInfo, Callback callback) { + public synchronized boolean bolus(DetailedBolusInfo detailedBolusInfo, Callback callback) { Command.CommandType type = detailedBolusInfo.isSMB ? Command.CommandType.SMB_BOLUS : Command.CommandType.BOLUS; if(type.equals(Command.CommandType.BOLUS) && detailedBolusInfo.carbs > 0 && detailedBolusInfo.insulin == 0){ diff --git a/app/src/main/java/info/nightscout/androidaps/tabs/SlidingTabStrip.java b/app/src/main/java/info/nightscout/androidaps/tabs/SlidingTabStrip.java index 587850f678..6c8e034477 100644 --- a/app/src/main/java/info/nightscout/androidaps/tabs/SlidingTabStrip.java +++ b/app/src/main/java/info/nightscout/androidaps/tabs/SlidingTabStrip.java @@ -62,7 +62,7 @@ class SlidingTabStrip extends LinearLayout { DEFAULT_BOTTOM_BORDER_COLOR_ALPHA); mDefaultTabColorizer = new SimpleTabColorizer(); - mDefaultTabColorizer.setIndicatorColors(MainApp.sResources.getColor(R.color.tabBgColorSelected)); + mDefaultTabColorizer.setIndicatorColors(MainApp.gc(R.color.tabBgColorSelected)); mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density); mBottomBorderPaint = new Paint(); diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 3929d73dfc..13c22801e1 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,6 +1,6 @@ - Настройки на сигурността + Настройки на сигурността Максимален инсулин при болус [единици] Максимални въглехидрати [гр] Опции @@ -10,7 +10,7 @@ Изход Използвай удължен болус за над 200% DanaR Bluetooth устройство - Използване на абсолютни стойности за базал + Използване на абсолютни стойности за базал Рестартирайте телефона или AndroidAPS от системните настройки или Android APS няма да записва проблемите (което е важно за работата на алгоритъма)! Цел: Действие: @@ -35,12 +35,12 @@ Инс: IOB: Общо IOB: - Количество въглехидрати - Количество инсулин + Въглехидрати (гр.): + Ед. инсулин: КЗ ВХ Корекция - Ед + Ед. IOB от болуси Старт сега Базова базална стойност @@ -157,7 +157,7 @@ Друго Глюкомер Сензор - ВХ + Въглехидрати Инсулин ВХ след Разделяне @@ -235,7 +235,7 @@ Пръст Сензор Ръчно - Времена цел + Временна цел Откажи временна цел DanaR профил DIA (Време на действие на инсулина) ч.: @@ -248,7 +248,7 @@ DS болус DE болус грешка - пълнене + презареждане базал по часове КЗ въглехидрати @@ -262,7 +262,7 @@ Инсулин за деня Грешки КЗ - Пълнене + Презареждане Спиране Свързва се с помпата за %d сек. Парола за помпата @@ -682,4 +682,191 @@ Няма достатъчно инсулин в резервоара Празен Обнови + един + %.2f U/h + Добавяне на допълнителни функции за използване през деня, като SMB + Пълнене + Избран APS + Няма базални стойности за някои часове: %s + Временният базал е зададен от помпата + Румънски + Френски + Китайски + Болусът е спрян + Спиране на болус + Хипоглекимия + Настройка на целевата КЗ чрез аутосенс + Възрастни с голяма инсулинова резистентност + OpenAPS SMB + SMB + Разреши UAM + Разреши SMB + Използвай супер микро болуси вместо временен базал за по бързо действие + Детекция на необявено хранене (UAM) + Продължителност на вр. цел при хипоглекимия + Временна цел при хипоглекимия + мин. + ч. + Максимални минути за ограничаване на базала от SMB + Програмиране на помпа за болус + Състояние + Активност + Няма връзка от %d мин. + %d%% (%d мин. остават) + Инициализация + Прекратен поради грешка + Прекратен от потребителя + Изпълнява + Отказва временен базал + Задава временен базал (%d%% / %d min) + Болус (%.1f U) + Обновява + Исканата операция не се поддържа от помпата + Опасно използване: удължени или многовълнови болуси са активни. Помпата е изключена за само 6 часа. Само нормални болуси се поддържат. + Опасно използване: помпата използва различни базални нива от първоначалния профил. Loop е спрян. Изберете първоначалния профил и обновете. + Болуси с едно и също количество бяха поискани в последните две минути. За да се предотврати дублиране вече доставен болус, операцията е забранена. + Сега + Ниско ниво на резервоар на помпа + Батерията на помпата е слаба + Помпата отчита грешка E%d: %s + Необходимо е сверяване на часа в помпата + Отказването на временният базал беше потвърдено + Помпата е недостъпна. Не беше доставен болус. + Болусът беше неуспешен. За да сте сигурни, моля, проверете помпата, за да избегнете повторение на вече доставен болус. За да се избегнат бъгове болусите не се повтарят автоматично. + Само %.2f U от искания болус от %.2f U е доставен поради грешка. Моля, проверете помпата, за да потвърдите това и да предприемете съответните действия. + Insight + Insight помпа + Статус + Променено + ПОМПАТА Е СПРЯНА + Статуса е актуализиран + преди + с + Активен временен базал + мин. остават + История + Последно извършено действие + мин. + Предупреждение за измерване на КЗ + Маз. + гр. + kJ + Бел. + ]]> + BT Watchdog + Изключва Bluetooth на телефона за една секунда, ако няма връзка с помпата. Това може да помогне на някои телефони, където Bluetooth блокира. + Bluetooth + G5 настройки за upload + Настройки на съветник + Изтегляне КЗ от Найтскаут + --- + Макс. множител за настоящ базал + Макс. множител за най-големия базал за денонощието + Мин. стойност за аутосенс + Макс. стойност за аутосенс + Позволи връзка в роуминг + Настройки за свързване + Само при зареждане + Настройки за визуализация + Основни настройки + Използвай само WiFi + CGM + секунда + минута + час + ден + седмица + %ds изтича %s + Статистика + Предварително свързване + Автоматично свързване при отваряне на AndroidAPS, преди връзка с помпата за намаляване на първоначалното забавяне + Не се препоръчва поради голяма консумация на батерия + Разреши SMB постоянно + "Разрешава SMB постоянно и независимо от болусите. Възможно само с източник на КЗ с добра филтрация като G5 " + Разреши SMB след въглехидрати + "Разрешава SMB 6 часа след въглехидрати, дори при COB=0. Възможно само с източник на КЗ с добра филтрация като G5 приложение " + Разреши SMB с COB + Разрешава SMB, когато има активни COB + Разреши SMB с временни цели + Разрешава SMB, когато има активна временна цел на КЗ + Разреши SMB с по-високи временни цели на КЗ + "Разрешава SMB когато има активна по-висока временна цел " + Заглушаване + Инсулин + Въглехидрати + Бутони + Изпраща калибрация към xDrip+ или отваря G5 диалог за калибрация + Отваря xDrip+, бутонът назад връща към AAPS + Количество въглехидрати за добавяне при натискане на бутона + Количество инсулин за добавяне при натискане на бутона + Не може да се използва CGM приложението. Уверете се, че е инсталирано. + CGM + История + Уведомяване при SMB + Покажи SMB на часовника като стандартен болус. + Създаване на известие при грешки + Създаване на Nightscout известие при грешки и локални аларми (също видими в Кеърпортал при Лечения) + Покажи предвиждане на часовника + Предвиждане + Избор на данни + Позволява автоматично изпращане на данни за грешки и статистически данни до разработчиците чрез fabric.io service. + Моля обновете G5 приложението до поддържана версия. + Не доставяй болус, само запис + Категория + Подкатегория + Болусът ще бъде само записан + Допълни липсващи данни за КЗ от Nightscout + SMB чрез помпата + Чувствителност + Отклонение + Активни въглехидрати + Базали + Няма избрано действие, нищо няма да се случи + Използвате dev версия. Closed loop е деактивиран. + Engineering mode не е активиран и не е release версия + Прочита базалният профил + "Историята на помпата се промени след извършване на изчислението за болус. Болусът не беше доставен. Моля, преизчислете дали все още е необходим болус. Ако се изисква същото болусно количество, моля, изчакайте две минути, тъй за това време болусите с едно и също количество са блокирани от съображения за безопасност " + " http://www.androidaps.org facebook: http://facebook.androidaps.org" + Старт на вр.цел за физ. активност + Старт на вр. цел за Eating soon + Вр.цел + Старт на вр. цел при хипо + ЦЕЛ %d не е стартирана + ЦЕЛ %d не е завършена + Помпата не може да подава временен базал + Няма валидна базална прочетена от помпата + Closed loop е забранен в настройките + Аутосенс е забранен в настройките + SMB е забранен в настройките + Ограничаване на макс. базална стойност до %.2f Е/ч поради %s + лимит на помпата + трябва да бъде положително число + множител на макс. базал + множител на макс. дневен базал + Болус беше доставен през последните 3 мин, пропуска SMB + Базалът е зададен коректно + Ограничаване на максималната процентна стойност до %d%% поради %s + Ограничаване на болус до %.1f Е поради %s + Ограничаване на макс. IOB до %.1f Е поради %s + Ограничаване на въглехидрати до %d гр. поради %s + Ограничаване на IOB до %.1f Е поради %s + макс. стойност в настройките + опасно използване + Прочитането на статуса се провали + Записано смяна на сет + Записано смяна на резервоар + SMB \"винаги\" и \"след въглехидрати\" е забранен, защото е активен източник на КЗ, който не поддържа необходимата филтрация + SMB не е позволен в режим open loop + Храна + Очаква време за синхронизация (%d sec) + Прекъснат (%d m) + Автоматично careportal събитие + Автоматично изпраща смяна на резервоар, сет и аларми на помпата към Nightscout + Максималният общ IOB OpenAPS не може да бъде повече от [U] + Помпата е спряна + Помпата е стартирана + Помпата е на пауза + Макс. време за усвояване на храна (часа) + Време за което всяко хранене се счита за усвоено. Оставащите въглехидрати ще бъдат изчиствани. + Време diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b078523a63..3aedbbddac 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -582,7 +582,7 @@ Setzte Basalschritt zu 0.01 IE/h Tägl. Basalmenge Tägl. Basalmenge * 2 - Tägl. Gesamtdosis + TDD Gerät noch nicht gefunden DanaRS Dana diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c737dfa5aa..a39ab1ce48 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -5,10 +5,12 @@ Preferencias Refrescar tratamientos desde NS Restablecer las bases de datos + ¿Realmente quiere resetear la base de datos? Salida Usar bolos extendidos para> 200% DanaR dispositivo Bluetooth Usar siempre valor basal absoluto + Por favor reinicia el teléfono o AndroidAPS desde ajustes de sistema, sino AndroidAPS no guardará registros (importantes para trazar y verificar que el algoritmo funcione correctamente) Objetivo: Meta: Inicio @@ -23,6 +25,7 @@ Insulina: Carbohidratos: IOB: + IOB: Actividad: Total IOB: Actividad total IOB: @@ -34,6 +37,7 @@ Insulina [U] Carbohidratos [g] Glucosa + TT Hidratos Carbono Corrección U @@ -62,12 +66,14 @@ Razón Glucosa Delta + Delta: Config Builder Objetivos OpenAPS MA Sinopsis Perfil NS Perfil simple + Basal temporal Tratamientos Bomba virtual Careportal @@ -79,10 +85,11 @@ días Duración mínima Restricciones - Lazo - Lazo + Loop + Loop APS Tras procesar limitaciones + Basal temporal en la bomba Última aceptada OK Cancelar @@ -91,6 +98,7 @@ Plugin está desactivado Violación restricciones Error de administración del bolo + Basal Temporal no emitida Valor basal [%] % (100% = actual) Aceptar nueva basal temporal: @@ -100,22 +108,28 @@ Confirmación Introduzca nuevo tratamiento: Bolo + Bolo: Basal + Basal: Carbohidratos Cambiar datos! Establecer nuevo bolo extendido: Origen BG xDrip Modo APS - Lazo cerrado - Lazo abierto + Loop cerrado + Loop abierto + Loop Inactivo + Desactivar loop + Activar loop Nueva propuesta disponible Versión de NSClient no soportada + Versión no acceptada de Nightscout NSClient no instalado. Registro perdido! BG disponible en NS Estado de la bomba disponible en NS Aceptados - LAZO DESACTIVADO POR RESTRICCIONES + LOOP DESACTIVADO POR RESTRICCIONES Czech English Basal IOB @@ -167,9 +181,11 @@ Archivo no encontrado Exportar ajustes Importar ajustes + Frances + Chino German - Max valor U / hr en Basal temporal - Máximos basales IOB para OpenAPS [U] + Este valor es llamado max basal en el contexto OpenAPS + Este valor es llamado Max Iob en el contexto OpenAPS\nEsta es la máxima insulina en [U] APS puede entregar a la vez. Bulgarian DESCARTAR Idioma @@ -190,6 +206,7 @@ Bomba IOB Unidades diarias Último bolo: + Hace %.1fh Datos invalidos Valor no establecido correctamente Recargar Perfil @@ -204,10 +221,12 @@ Esperando resultado Números de teléfono permitidos XXXXXXXXXX +; + YYYYYYYYYY - Para entregar bolo %.2fU responder con código %s + Para entregar bolo %.2fU responder con código %s Bolo falló - Bolo %.2fU entregado con éxito - Entregando %.2fU + Bolo %.2fU entregado con éxito + Bolo %.2fU enviado correctamente + Entregando %.2fU + Permitir comandos remotos vía SMS Bolo remoto no permitido Dedo Sensor @@ -217,7 +236,6 @@ Configuración perfil DanaR DIA [h] No se pudo actualizar el perfil basal - Historial Recargar Subiendo E bolo @@ -246,6 +264,8 @@ Bomba ocupada Entregado Detenido + Bolo interrumpido + Deteniendo bolo Oclusión Detener Parar pulsado @@ -253,23 +273,23 @@ Configuración de visualización y monitoreo, y el análisis de los basales y ratios Comprobar que los datos de BG están disponibles en Nightscout, y que los datos de la bomba de insulina se están subiendo Empezar con bucle abierto - Ejecutar en modo de lazo abierto durante unos días, y aceptar manualmente las basales temporales - Entender el lazo abierto, incluidas las recomendaciones de basales temporales + Ejecutar en modo de Loop abierto durante unos días, y aceptar manualmente las basales temporales + Entender el Loop abierto, incluidas las recomendaciones de basales temporales Sobre la base de esa experiencia, decidir valores de máximo basal, y ajustar la bomba y preferencias Iniciar el bucle cerrado con suspensión con baja glucosa - Ejecutar en lazo cerrado con max IOB=0 durante unos días sin demasiados valores bajos de glucosa + Ejecutar en Loop cerrado con max IOB=0 durante unos días sin demasiados valores bajos de glucosa Ajuste del bucle cerrado, aumento máximo IOB por encima de 0 y bajando gradualmente objetivos BG Funcionando unos cuantos días, y al menos una noche sin alarmas bajas BG, y bajar gradualmente BG Ajustar los basales y ratios, si es necesario, y luego activar auto-sens - 1 semana lazo cerrado completado con entrada regular de carbohidratos + 1 semana Loop cerrado completado con entrada regular de carbohidratos Habilitar funciones adicionales para su uso durante el día, como asistente de comida avanzado + Habilitar funciones adicionales para uso durante el día como SMB Alcanzado el límite permitido Sin perfil seleccionado - Korean - Acciones - Corr - Loop Inactivo - Bolo Comida + Loop se ha desactivado + Loop se ha activado + Loop inactivo + loop activo Valor %s fuera de limites Botón Texto: Carbs: @@ -278,79 +298,29 @@ Editar Eliminar Asistente - Ajustes asistente - Loop se ha desactivado - Loop se ha activado - Loop inactivo - loop activo + Asistente configuración + No permitidos ajustes basales remotos + Para iniciar basal %.2fU/h responder con código %s + Basal temporal %.2fU/h para %d min iniciada correctamente + Fallo inicio basal temporal + Para parar basal temporal responder con código %s Basal temporal cancelada Fallo cancelación basal temporal - Fallo inicio basal temporal - Basal temporal %.2fU/h para %d min iniciada correctamente - Permitir comandos SMS remotos - Para parar basal temporal responder con código %s + Comando desconocido o respuesta incorrecta + Bolo Comida + Corr + Korean + Acciones AndroidAPS iniciado - Español NS solo subida (sinc. inactiva) NS solo subida. No efectivo con SGV salvo que este seleccionada una fuente local como xDrip. No efectivo en perfiles usando perfiles NS - Otros ¡Bomba no iniciada! - No permitidos ajustes basales remotos - ¿Realmente quiere resetear la base de datos? - Comando desconocido o respuesta incorrecta + Bomba no iniciada, ¡perfil no ajustado! ¡Por favor asegurar que la cantidad coincide con la especificación del set de infusión! - Para iniciar basal %.2fU/h responder con código %s - "ACC" - "REL" - "BombaV" - "Trat" - "SMS" - "PerfSipmple" - "Perf" - "General" - "Obj" - "Oaps" - "Lazo" - "PerfLoc" - "Dana" - "Conf" - "CP" - Actividad - Por favor reinicia el teléfono o AndroidAPS desde ajustes de sistema, sino AndroidAPS no guardará registros (importantes para trazar y verificar que el algoritmo funcione correctamente) - Matriz de %d elementos. Valor actual: - Ratio Basal: - Valor basal menor del mínimo. Perfil no fijado. + Otros Botón 1 Botón 2 Botón 3 - Inhabilitar EasyUI modo en bomba - Habilitar bolos extendidos en bomba - Cambio de modo de U/d a U/h en bomba - Comida temprano - Marca ALTA - Iniciando . . . - Perfil Local - Media Larga Delta - Marca BAJO - Batería Baja - %dmin antes - Usar característica AMA autosens - Datos Autosens - Marcas Alta y Baja para graficos en Sinopsis y Smartwatch - Rango de visualización - Perfil basal actualizado en bomba - Error en ajuste de perfil basal - Bomba no iniciada, ¡perfil no ajustado! - Error en bomba - Apagando Bomba - Eliminar registro: - Enviar todos los datos - Media corta delta - Bolo: - Último BG: - %dmin antes - Bolo %.2fU enviado correctamente - Rango Objetivo: Unidades: Sólo se permiten caracteres numéricos Sólo se permiten dígitos en el rango %1$s - %2$s @@ -364,10 +334,9 @@ Sueco Max U/h para el perfil base "Max IOB basal OpenAPs puede emitir " - Para enviar calibracion %.2f responder con código %s + Para enviar calibracion %.2f responder con código %s Entregaré %.2fU Duración de acitividad de insulina - habilitar funciones adicionales para uso durante el día como SMB %.2f limitado a %.2f no permitido el mando remoto Para cancelar loop por %d minutos responde con código %s @@ -376,22 +345,51 @@ mg/dl mmol/l DIA: + Rango Objetivo: + Rango de visualización + Marcas Alta y Baja para graficos en Sinopsis y Smartwatch + Marca BAJO + Marca ALTA Reloj + Enviar todos los datos Abrir ajustes en reloj + Error en bomba + Batería Baja + Apagando Bomba Batería de la bomba descargada DanaR Korean + Ratio Basal: + Error al activar perfil basal + Perfil basal actualizado en bomba + Inhabilitar EasyUI modo en bomba + Habilitar bolos extendidos en bomba + Cambio de modo de U/d a U/h en bomba + Valor Basal por debajo del mínimo. Perfil NO aplicado! BG: + Último BG: MDI MM640g Avisos permanentes DATOS CADUCADOS + %dmin antes + %dmin antes + Perfil Local OpenAPS AMA + Delta media corta + Delta media larga + Matriz de %d elementos. Valor actual: + Datos Autosens Script debug + Usar característica AMA autosens Renovar datos desde NS + ComidendoPronto + Hipo + Actividad + Eliminar registro: DanaR Stats - Dosis diaria cumulativa - "Dosis diaria ampliada exponencialmente " - Base + TDD acumulativa + "TDD ampliada exponencialmente " + Basal Bolo Dosis diaria Fecha @@ -402,6 +400,22 @@ Datos caducados pro favor pincha RELOAD Basal total Basal diaria *2 + Inicializando + "ACC" + "CONF" + "LOOP" + "PERFSIM" + OAPS + "PERFLOC" + "DANA" + "GENERAL" + "BOMBAV" + "PERF" + "TRAT" + "CP" + "OBJ" + RELOJ + "SMS" Tab titulo corto Usa siempre delta media corto en vez de delta simple Recomendado si los datos de origen no filtrados como xDrip son inestables. @@ -412,21 +426,21 @@ "Ajuste pro defecto: 4 Esto es la otra mitad de los ajustes de seguridad de OpenAPS y la otra mitad de \"3x max diario, 4x actual\". Esto significa, que tu base no puede ser mas alta que el numero que multiplica tu base. Esto es para evitar que las personas se encuentren en situaciones peligrosas por aumentar mucho la base sin entender el algoritmo del sistema. El ajuste por defecto es x4. La mayoría de las personas nunca tendra que cambiar estos ajustes, si no debe modificar otros ajustes en la terapia. " "Ajuste por defecto: 1.2\nEsto es un multilicador para autosens (y pronto autotune) para poner un 20% limite máximo a la cota de autosens ratio, la que determina cuantos ajustes autosens puede hacer a la base, a cuanto puede ajustar ISF y a cuanto puede bajar el objective de glucosa. " Ajuste pro defecto: 0.7\nEl otro lade de limitaciones de seguridad de autosens, limitando a cuanto puede bajar la base y a cuanto puede subir ISF y BG objectivos. - Ajuste pro defcto: true\nEsto se usa para permitir autosens a ajustar objectivos BG en addicion a ISF y bases. - Ajuste pro defecto: 2 \nDormir bolo es iniciado después de proveder un bolo para comida, así el loop no interactuará con low temps cuando acabas de comer. El ajuste pro defecto es 2; quiere decir con el DIA de 3 h el bolo será dormido por fases por 1.5 h (3DIA/2). - "Ajustes pro defecto: 3.0\nEsto es un ajuste pro defecto para la absorcion de carbohidratos pro 5 minutos. Por defecto se espera 3mg/dl/5min. Esto afecta la velocidad de reduccion de COB y cuanta absorcion se usa para calcular el BG futuro previsto, si la glucosa diminua mas de lo previsto o aumenta mas de lo previsto. " - "Atención!\nNormalment no tienes que editar los valores a continuacion. Por favor PINCHA AQUI y LEE el texto y PROCURA ENTENDER antes de cambiar alguno de los valores. " + Ajuste por defecto: true\nEsto se usa para permitir autosens a ajustar objectivos BG ademas de ISF y bases. + Ajuste por defecto: 2 \nDormir bolo es iniciado después de proveder un bolo para comida, así el loop no interactuará con low temps cuando acabas de comer. El ajuste pro defecto es 2; quiere decir con el DIA de 3 h el bolo será dormido por fases por 1.5 h (3DIA/2). + "Ajustes pro defecto: 3.0\nEsto es un ajuste pro defecto para la absorción de carbohidratos pro 5 minutos. Por defecto se espera 3mg/dl/5min. Esto afecta la velocidad de reducción de COB y cuanta absorción se usa para calcular el BG futuro previsto, si la glucosa diminua mas de lo previsto o aumenta mas de lo previsto. " + "Atención!\nNormalment no tienes que editar los valores a continuación. Por favor PINCHA AQUI y LEE el texto y PROCURA ENTENDER antes de cambiar alguno de los valores. " numero de telefonp incorrecto Copiar al Clipboard Copiado al clipboard mostrar log - Calibracion - Calibracion - Mandar calibracion %.1f a xDrip? + Calibración + Calibración + Mandar calibración %.1f a xDrip? xDrip+ no instalado - Calibracion mandada a xDrip - Calibracion remota no admitida - Mandar calibracion tiene que ser activada en xDrip. + Calibración mandada a xDrip + Calibración remota no admitida + Mandar calibración tiene que ser activada en xDrip. xDrip no recibe calibraciones bomba parada recibir estado de bomba @@ -473,9 +487,9 @@ Adulto Por favor elige edad del paciente para emplear limites de seguridad Glimp - Aparato parece no soportar optimizacion de bateria whitelisting! - Por favor permita Permission - %s necesita optimizacion de bateria whitelisting para funcionar bien + Aparato parece no soportar optimización de bateria whitelisting! + Por favor conceda permiso + %s necesita optimización de bateria whitelisting para funcionar bien Loop desactivado desactivado (%d m) Superbolus (%d m) @@ -489,14 +503,14 @@ Desconectar bomba por 2 h Desconectar bomba por 3 h Reiniciar - duracion incorrecta + duración incorrecta Loop desactivado Loop reiniciado Tendencia 15 min COB Superbolo Indica app start en NS - Aplicacion existente para aplicar ajustes. + Saliendo de la aplicación para aplicar ajustes. DanaRv2 Insulina Insulina acción rápida @@ -505,7 +519,7 @@ INS Insulina acción rápida prolongada activar superbolo en wizard - Activar función superbolo en wizard. No lo actives hasta que hayas aprendido lo que realmente hace. PUEDE CAUSAR SOBREDOSIS DE INSULINA usandolo sin precaucion! + Activar función superbolo en wizard. No lo actives hasta que hayas aprendido lo que realmente hace. PUEDE CAUSAR SOBREDOSIS DE INSULINA usandolo sin precaución! IOB COB Firmware @@ -517,7 +531,7 @@ xds Mostrar BGI agregar BGI a status line - datos no mandados a NS + Datos no mandados a NS Todos los datos mandados a NS son borrados. AAPS esta conectado a NS pero no hay cambios en NS Nivel base Nivel bolo @@ -543,16 +557,16 @@ Stale data threshold [min] Urgent stale data threshold [min] Interval para autosens [h] - Horas en el pasado para detectar sensividad (tiempo de absorcion de carbohidratos no incluidos) + Horas en el pasado para detectar sensibilidad (tiempo de absorción de carbohidratos no incluidos) Bomba OpenAPS Uploader - Deteccion sensividad + Detección sensibilidad SENS - Sensitivity Oref0 - Sensitivity AAPS - Ajustes absorcion - Tiempo max absorcion comida [h] + Sensibilidad Oref0 + Sensibilidad AAPS + Ajustes absorción + Tiempo max absorción comida [h] Tiempo esperado en el que todos los carbohidratos son absorbados mostrar bolo prolongado en % SAGE @@ -563,9 +577,9 @@ UPLD BAS EXT - Pantalla proteccion - Cierre - Al activar autosens recuerda editar todos carbohidratos comidos. Si no, sensividad será calculada incorrectamente !!! + Bloqueo de pantalla + Bloqueo + Al activar autosens recuerda editar todos carbohidratos comidos. Si no, sensibilidad será calculada incorrectamente !!! Sensitivity WeightedAverage OK Cancelar @@ -578,7 +592,7 @@ CGM Y OPENAPS BOMBA Valor base [U/h] - Duracion [min] + Duración [min] IOB Curve Peak Time Peak Time [min] Free-Peak Oref @@ -589,8 +603,8 @@ Fecha INVALIDO Esperando para conectar con bomba - Coneccion OK - Coneccion fuera de tiempo + conexión OK + conexión fuera de tiempo CONECTANDO aparato no encontrado Deposito vacio @@ -606,11 +620,11 @@ Porcientos Cambio de tiepmo Ojbectivo temporal por defecto - duracion comiendopronto + duración comiendopronto objectivo comiendopronto - duracion actividad + duración actividad objectivo actividad - Prime + Cebado recibiendo estado de bolo prolongado recibiendo estado bolo recibiendo estado bolo temporal @@ -619,7 +633,7 @@ usar otra vez Control desde reloj editar y emitir abjectivos temp. y tratamientos por reloj - Fuera tiempo coneccion + Fuera tiempo conexión comida g ]]> @@ -630,7 +644,7 @@ ]]> Esperando terminar bolo. Faltan %d seg. Processando - "Iniciando emision bolo " + "Iniciando emisión bolo " Orden se esta efectuando en este momento control de la bomba corigido bomba no alcanzable @@ -643,7 +657,7 @@ INFO Bluetooth BT Watchdog - Apaga el bluetooth del móvil por un segundo si no hay coneccion con la bomba. Esto ayuda con algunos moviles con problemas de establecer coneccion bluetooth estable. + Apaga el bluetooth del móvil por un segundo si no hay conexión con la bomba. Esto ayuda con algunos moviles con problemas de establecer conexión bluetooth estable. DexcomG5 App (patched) Envias datos BG a NS G5 upload ajustes @@ -654,20 +668,20 @@ En xDrip elige 640g/Eversense date source NSClient BG Valor base remplazado por valor mínimo - Calculacion BG - Calculacion bolo IOB - Calculacion base IOB - Calculacion tendencia - Calculacion superbolo + Cálculo BG + Cálculo bolo IOB + Cálculo basal IOB + Cálculo tendencia + Cálculo superbolo Si No Solo positivo Solo negativo - Calculacion COB - Calculacion objectivo temporal + Cálculo COB + Cálculo objectivo temporal Loop activado APS seleccionado - NSClient tiene permission de escribir + NSClient tiene permiso para escribir Modo cerrado activado Máximo IOB puesto correctamente BG adquirible del origen seleccionado @@ -677,7 +691,7 @@ Actualizar Estado Actividad - Ninguna coneccnion por %d min + Ninguna conexión por %d min %d%% (%d min restan) Apagado por error Apagado por usario @@ -687,7 +701,7 @@ Emitiendo bolo (%.1f U) Actualizando "Acción no disponible en la bomba " - Uso inseguro: bolo prolongado o multiwave activo. Modo Loop ha sido puesto a baja emision para solo 6 horas. Solo bolo normal se puede emitir en modo loop. + Uso inseguro: bolo prolongado o multiwave activo. Modo Loop ha sido puesto a baja emisión para solo 6 horas. Solo bolo normal se puede emitir en modo loop. "Uso inseguro: la bomba usa base diferente a la primera. El loop ha sido apagado. Elige primero perfil en la bomba y acualiza. " Un bolo de mismo valor ha sido dado durante el pasado minuto. Para evitar bolos dobles y asegurarse contra bugs esto no es permitido. Ahora @@ -698,24 +712,232 @@ La bomba muesta el error E%d: %s Bajo Vacio + Historial Normal Se necesita actualizar reloj de la bomba Alerta TBR cancelada, advertencia acceptada - Emision del bolo fallada. Ningún bolo se ha emitido. Para asegurarse, por favor controle la bomba para evitar bolo doble. Para evitar bugs no se reinician bolos automaticamente. + Emisión del bolo fallada. Ningún bolo se ha emitido. Para asegurarse, por favor controle la bomba para evitar bolo doble. Para evitar bugs no se reinician bolos automaticamente. "Solo %.2f U del bolo mandado de %.2f U ha sido emitido por causa de un error. Por favorn controla la bomba para confirmar y toma acciones apropiadas. " "Fallo de emitir bolo y de controlar historical de la bomba.Por favor controla manualmente y crea un record en Careportal si el bolo ha sido emitido. " - Reestablecido coneccion fallada. + Reestablecido conexión fallada. "No hay suficiente insulina en el deposito para emitir bolo. " "Error al emitir bolo prolongado. " - bomba no alcanzable treshold [min] - TT - Versión no acceptada de Nightscout - Activar loop - Desactivar loop - Base: - Base temporal no emitida - Base temporal - Delta: - IOB: + Bomba no alcanzable durante [min] + Múltiples bolos con la misma cantidad en el mismo minuto fueron importados. Solo se puede agregar un registro a los tratamientos. Verifique la bomba y agregue manualmente un registro de bolo usando la pestaña Careportal. Asegúrese de crear un bolo con un tiempo que no use otro bolo. + Comprobando cambios en el historial + Tasa Basal cambiada en bomba, pero falló al leer + La tasa Basal en la bomba ha cambiado y será actualizada pronto + Actualizando estado bomba + Rechazando temporal alta ya que el calculo no consideró los cambios recientes en el historial de la bomba + El bolus se administró con éxito, pero no se pudo agregar la entrada al tratamiento. Esto puede suceder si se administran dos bolos pequeños del mismo tamaño en los últimos dos minutos. Verifique el historial de la bomba y las entradas de tratamiento y use Careportal para agregar entradas faltantes. Asegúrese de no agregar ninguna entrada para el mismo minuto exacto y la misma cantidad. + El historial de la bomba ha cambiado después de que se realizó el cálculo del bolo. El bolo no fue entregado. Por favor, vuelva a calcular si aún se necesita un bolo. Si se requiere la misma cantidad de bolo, espere dos minutos ya que los bolos con la misma cantidad se bloquean cuando se solicita con menos de dos minutos entre ellos por seguridad (independientemente de si se administraron o no). + Leyendo perfil basal + Inicio TT Hipo + Ninguna acción seleccionada, nada sucederá + Basales + Carbohidratos activos COB + Insulina activa IOB + Desviaciones + Sensibilidad + Autorelleno de lecturas perdidas de BG + El Bolo solo será anotado + Categoría + Subcategoría + No administrar Bolo, solo anotar + min + TT + Inicio TT Actividad + Inicio TT ComiendoPronto + Por favor actualiza la app G5, a una soportada + Permita que los informes automáticos de errores y los datos de uso de funciones se envíen a los desarrolladores a través del servicio fabric.io. + Fabric Upload + Opciones de datos + Predicciones + Mostrar predicciones en el reloj + Crear notificaciones en Nightscout para diálogos de error y alertas locales (también visibles en Careportal en Tratamientos) + "Crear notificaciones de los errores" + Muestre SMB en el reloj como un bolo estándar. + Notificar cada SMB + Historial + CGM + No se pudo iniciar la aplicación CGM. Asegúrate de que está instalada. + Cantidad de insulina que se agrega cuando se presiona el botón + "Cantidad de Carbohidratos que se agregan cuando se presiona el botón " + Abre xDrip+, los botones Atrás regresan a AAPS + Envía una calibración a xDrip + o abre el diálogo de calibración G5 + Botones + Carbohidratos + Insulina + Silenciar + Dejar Basal Temporal correr + No recomendado por agotar batería + Conectar de forma preventiva + Conectar automáticamente cuando se abre AndroidAPS, antes de solicitar ningún comando de bomba, para reducir el retraso de la conexión + Estadísticas + Estado de Mantener-Activo + %ds expira en %s + Adulto resistente a la insulina + Habilitar SMB durante 6 h después de Carbohidratos, incluso con 0 COB. Solo posible con fuente BG con buen filtrado de datos como G5 + Habilitar SMB siempre de forma independiente a los Bolos. Solo posible con fuente BG con buen filtrado de datos como G5 + Habilitar SMB después de Carbohidratos + Habilitar SMB cuando hay un Objetivo Temporal (TT) ALTO activo (Actividad) + Habilitar SMB con Objetivo Temporal Alto + Habilitar SMB cuando hay un Objetivo Temporal (TT) activo (ComerPronto, Actividad) + Habilitar SMB con Objetivos Temporales + Habilitar SMB cuando hay Carbohidratos Activo COB. + Habilitar SMB con COB + Habilitar SMB siempre + s + Semana + Día + Hora + minuto + segundo + Incompatible + No autorizado + Vinculación aplicación + Código rechazado + Esperando código de confirmación + Desconocido + Aplicación Companion incompatible, necesitamos la versión + Companion app parece no instalada! + ¡La aplicación Companion no parece estar instalada! + Permanecer siempre conectado + Usar cancelación Basal Temporal (TBR) real + Actualmente, cancelar una Basal Temporal TBR (crea una alarma de bomba) en su lugar establecer el 90% durante 1 minuto + Advertencia W31: Cartucho insulina bajo + Advertencia W32: Bateria baja + Advertencia W33: Fecha/hora inválida + Advertencia W34: Final de garantía + Advertencia W36: Basal Temporal cancelada + Warning W38: Bolo cancelado + Warning W39: Adevertencia tiempo de prestamo + SMB administrado por bomba + Inicializando + SMB + Activar UAM + Activar SMB + Usar Super Micro Bolus en lugar de Basal Temporal para una acción más rápida + Detección Comidas No Anunciadas UAM + Insight + Bomba Insight + Estado + Modificado + BOMBA PARADA + Estado actualizado + hace + con + Basal Temporal TBR Activa + minutos faltan + Libro de registros + Última acción completada + necesita + PUESTA EN MARCHA + SINCRONIZADO + OCUPADO + SINCRONIZANDO + DESOCUPADO + Contador Bolos + Contador TBR + Minutos máximos de basal para limitar SMB a + restan sobre + total con + Bomba inalcanzable. No se administró ningún Bolo + Autosens también ajusta los objetivos + Duración Hipo + Objetivo Hipo + m + h + Objetivo %d no iniciado + Objetivo %d no finalizado + La bomba no tiene capacidad basal temporal + Tasa Basal no valida en la bomba + Loop cerrado desabilitado en preferencias + Autosens desabilitado en preferencias + SMB desabilitado en preferencias + limitando max basal rate a %.2f U/h debido a %s + Limite de la bomba + Tiene que ser un valor positivo + Multiplicador basal máximo + Multiplicador diario basal máximo + Un Bolo entregado en los últimos 3 minutos + Basal establecida correctamente + Limitando porcentaje máximo de tasa a %d%% debido a %s + "Limitando el bolo a %.1f U debido a %s " + Limitando max IOB to %.1f U debido a %s + Limitando carbs to %d g debido a %s + Limitando IOB to %.1f U debido a %s + Valor máximo en preferencias + Limite estricto + uso no seguro + Error al leer estado + Anotar cambio sitio bomba + Anotar cambio cartucho de insulina + "SMB siempre y después de que los carbohidratos deshabilitados porque la fuente activa de BG no admite el filtrado avanzado " + "SMB no permitido en modo de Loop abierto " + Comida + reset + Esperando para sincronización de tiempo (%d sec) + Desconectado (%d m) + Eventos Careportal automáticos + "Subi automáticamente la insulina, la cánula y los cambios de batería y las alarmas de bombeo a Nightscout " + Este valor se denomina IOB máx. En el contexto de OpenAPS. OpenAPS no agregará más insulina si el IOB actual es mayor que este valor. + Tiempo máximo de absorción de la comida [h] + "Tiempo en el que cualquier comida se considera absorbida. Los carbohidratos restantes serán cortados. " + Tiempo + Mostrar el campo notas en dialogos de tratamientos + Solicitado: %.2fU Entregado: %.2fU Codigo de error: %d + Primer incremento insulina + Segundo incremento insulina + Tercer incremento insulina + Primer incremento carbohidratos + Segundo incremento carbohidratos + Tercer incremento carbohidratos + CGM + Usar solo WIFI + WIFI SSID + Ajustes conexión + SSID\'s permitido (separados por punto y coma) + Permitir conexión en roaming + "Proporción de autosens máximos " + "Proporción autosens mínima " + Máximo multiplicador diario de seguridad + "Multiplicador de seguridad basal actual " + DIA Divisor para suspensión de bolos + El máximo total de IOB OpenAPS no puede rebasar [U] + n/a + Bomba parada + Bomba iniciada + Bomba pausada + por adelantado con + %.2f U/h + OpenAPS SMB + " http://www.androidaps.org http://www.androidaps.de (de) facebook: http://facebook.androidaps.org http://facebook.androidaps.de (de)" + El último bolo tiene más de 24 horas o está en el futuro. Compruebe la fecha en que la bomba está configurada correctamente. + La hora / fecha del bolo administrado en la bomba parece incorrecta; es probable que la IOB sea incorrecta. Verifique la hora / fecha de la bomba. + Falta Cambio de Perfil. Haga un Cambio de Perfil o presione \"Activar perfil\" en PerfilLocal. + Error E13: error de idioma + "Error E10: error de rebobinado " + "Error E7: error electrónico " + "Error E6: error mecánico " + "Mantenimiento M30: Tipo de cartucho no configurado " + "Mantenimiento M29: tipo de batería no configurada " + "Mantenimiento M28: tiempo de pausa del modo de pausa " + "Mantenimiento M27: Error en la descarga de datos " + "Mantenimiento M20: Cartucho no insertado " + "Mantenimiento M21: Cartucho vacío " + "Mantenimiento M22: Batería agotada " + "Mantenimiento M23: Apagado automático " + "Mantenimiento M26: cambio de cartucho no completado " + "Mantenimiento M25: tiempo de prestamo finalizado - final de la operación " + "Mantenimiento M24: Oclusión " + Español + Solo si cargando + Autobackfill BG + Asistente configuración + Calculos incluidos en el resultado del asistente + Mostrar configuración + Configuración general + Rumano diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a5e65e2eda..0e0fdb6c02 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,8 +3,9 @@ #ff00ff #00ffff #1e88e5 - #FFFFCC03 + #1ea3e5 #FFFB8C00 + #FFFB8C00 #ffea00 #00ffff #FFFFFF @@ -22,6 +23,7 @@ #C803A9F4 #757575 #d8d8d8 + #ff1a1a #424242 @@ -64,4 +66,9 @@ #ff827c #009705 + #c8666666 + #7200FF00 + #72FF0000 + #72000000 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84acd8205c..e0ce1ebbf0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@  - Tratments safety + Treatments safety Max allowed bolus [U] Max allowed carbs [g] @@ -710,7 +710,7 @@ Getting extended bolus status Getting bolus status Getting temporary basal status - Gettings pump settings + Getting pump settings Getting pump time reuse Controls from Watch @@ -1035,4 +1035,13 @@ Current basal safety multiplier n/a Autobackfill BG + Wizard Settings + wearwizard_bg + wearwizard_trend + wearwizard_cob + wearwizard_bolusiob + wearwizard_basaliob + Calculations included in the Wizard result: + Display Settings + General Settings diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 0dce661482..2c3c9f3435 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -13,35 +13,78 @@ android:summary="@string/wearcontrol_summary" android:title="@string/wearcontrol_title" /> - + - + - + - + - + + + + + + + + + + + + + + + + diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index 32cf7a5d1d..01423985d0 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -208,6 +208,10 @@ android:name=".interaction.actions.FillActivity" android:label="Fill"> + + diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.java new file mode 100644 index 0000000000..a598a39c2c --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/ECarbActivity.java @@ -0,0 +1,134 @@ +package info.nightscout.androidaps.interaction.actions; + + +import android.content.res.Resources; +import android.os.Bundle; +import android.support.wearable.view.DotsPageIndicator; +import android.support.wearable.view.GridPagerAdapter; +import android.support.wearable.view.GridViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import java.text.DecimalFormat; + +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.data.ListenerService; +import info.nightscout.androidaps.interaction.utils.PlusMinusEditText; +import info.nightscout.androidaps.interaction.utils.SafeParse; + +/** + * Created by adrian on 04/08/18. + */ + + +public class ECarbActivity extends ViewSelectorActivity { + + PlusMinusEditText editCarbs; + PlusMinusEditText editStartTime; + PlusMinusEditText editDuration; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.grid_layout); + final Resources res = getResources(); + final GridViewPager pager = (GridViewPager) findViewById(R.id.pager); + + pager.setAdapter(new MyGridViewPagerAdapter()); + DotsPageIndicator dotsPageIndicator = (DotsPageIndicator) findViewById(R.id.page_indicator); + dotsPageIndicator.setPager(pager); + } + + + @Override + protected void onPause() { + super.onPause(); + finish(); + } + + + private class MyGridViewPagerAdapter extends GridPagerAdapter { + @Override + public int getColumnCount(int arg0) { + return 4; + } + + @Override + public int getRowCount() { + return 1; + } + + @Override + public Object instantiateItem(ViewGroup container, int row, int col) { + + if(col == 0){ + final View view = getInflatedPlusMinusView(container); + double def = 0; + if (editCarbs != null){ + def = SafeParse.stringToDouble(editCarbs.editText.getText().toString()); + } + editCarbs = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 150d, 1d, new DecimalFormat("0"), true); + setLabelToPlusMinusView(view, "carbs"); + container.addView(view); + return view; + } else if(col == 1){ + final View view = getInflatedPlusMinusView(container); + double def = 0; + if (editStartTime != null){ + def = SafeParse.stringToDouble(editStartTime.editText.getText().toString()); + } + editStartTime = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 300d, 15d, new DecimalFormat("0"), false); + setLabelToPlusMinusView(view, "start [min]"); + container.addView(view); + return view; + } else if(col == 2){ + final View view = getInflatedPlusMinusView(container); + double def = 0; + if (editDuration != null){ + def = SafeParse.stringToDouble(editDuration.editText.getText().toString()); + } + editDuration = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, def, 0d, 8d, 1d, new DecimalFormat("0"), false); + setLabelToPlusMinusView(view, "duration [h]"); + container.addView(view); + return view; + } else { + + final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_send_item, container, false); + final ImageView confirmbutton = (ImageView) view.findViewById(R.id.confirmbutton); + confirmbutton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + //check if it can happen that the fagment is never created that hold data? + // (you have to swipe past them anyways - but still) + + String actionstring = "ecarbs " +SafeParse.stringToInt(editCarbs.editText.getText().toString()) + + " " + SafeParse.stringToInt(editStartTime.editText.getText().toString()) + + " " + SafeParse.stringToInt(editDuration.editText.getText().toString()); + ListenerService.initiateAction(ECarbActivity.this, actionstring); + finish(); + } + }); + container.addView(view); + return view; + } + } + + @Override + public void destroyItem(ViewGroup container, int row, int col, Object view) { + // Handle this to get the data before the view is destroyed? + // Object should still be kept by this, just setup for reinit? + container.removeView((View)view); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view==object; + } + + + } +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.java index 7701b17d25..5c16063bb2 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.java +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/WizardActivity.java @@ -32,9 +32,6 @@ public class WizardActivity extends ViewSelectorActivity { PlusMinusEditText editCarbs; PlusMinusEditText editPercentage; - boolean useBG; - boolean includeBolusIOB; - boolean includeBasalIOB; boolean hasPercentage; @@ -63,7 +60,7 @@ public class WizardActivity extends ViewSelectorActivity { private class MyGridViewPagerAdapter extends GridPagerAdapter { @Override public int getColumnCount(int arg0) { - return hasPercentage?6:5; + return hasPercentage?3:2; } @Override @@ -86,79 +83,7 @@ public class WizardActivity extends ViewSelectorActivity { setLabelToPlusMinusView(view, "carbs"); container.addView(view); return view; - } else if(col == 1){ - final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_toggle_item, container, false); - final TextView textView = (TextView) view.findViewById(R.id.label); - textView.setText("include BG?"); - - final ImageView togglebutton = (ImageView) view.findViewById(R.id.togglebutton); - if(useBG){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - togglebutton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - useBG = !useBG; - if(useBG){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - } - }); - container.addView(view); - return view; - } else if(col == 2){ - final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_toggle_item, container, false); - final TextView textView = (TextView) view.findViewById(R.id.label); - textView.setText("Bolus IOB?"); - - final ImageView togglebutton = (ImageView) view.findViewById(R.id.togglebutton); - if(includeBolusIOB){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - togglebutton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - includeBolusIOB = !includeBolusIOB; - if(includeBolusIOB){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - } - }); - container.addView(view); - return view; - } else if(col == 3){ - final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.action_toggle_item, container, false); - final TextView textView = (TextView) view.findViewById(R.id.label); - textView.setText("Basal IOB?"); - - final ImageView togglebutton = (ImageView) view.findViewById(R.id.togglebutton); - if(includeBasalIOB){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - togglebutton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - includeBasalIOB = !includeBasalIOB; - if(includeBasalIOB){ - togglebutton.setImageResource(R.drawable.ic_toggle_on); - } else { - togglebutton.setImageResource(R.drawable.ic_toggle_off); - } - } - }); - container.addView(view); - return view; - } else if(col == 4 && hasPercentage){ + } else if(col == 1 && hasPercentage){ final View view = getInflatedPlusMinusView(container); if (editPercentage == null) { editPercentage = new PlusMinusEditText(view, R.id.amountfield, R.id.plusbutton, R.id.minusbutton, 100d, 50d, 150d, 1d, new DecimalFormat("0"), false); @@ -184,10 +109,7 @@ public class WizardActivity extends ViewSelectorActivity { if (editPercentage != null) percentage = SafeParse.stringToInt(editPercentage.editText.getText().toString()); - String actionstring = "wizard " + SafeParse.stringToInt(editCarbs.editText.getText().toString()) - + " " + useBG - + " " + includeBolusIOB - + " " + includeBasalIOB + String actionstring = "wizard2 " + SafeParse.stringToInt(editCarbs.editText.getText().toString()) + " " + percentage; ListenerService.initiateAction(WizardActivity.this, actionstring); finish(); diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuActivity.java b/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuActivity.java index 34dce7dd11..fb8bb61e20 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuActivity.java +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/menus/MainMenuActivity.java @@ -7,10 +7,10 @@ import android.preference.PreferenceManager; import java.util.Vector; -import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.data.ListenerService; import info.nightscout.androidaps.interaction.AAPSPreferences; import info.nightscout.androidaps.interaction.actions.BolusActivity; +import info.nightscout.androidaps.interaction.actions.ECarbActivity; import info.nightscout.androidaps.interaction.actions.TempTargetActivity; import info.nightscout.androidaps.interaction.utils.MenuListActivity; import info.nightscout.androidaps.interaction.actions.WizardActivity; @@ -46,8 +46,9 @@ public class MainMenuActivity extends MenuListActivity { Vector menuitems = new Vector(); menuitems.add("TempT"); - menuitems.add("Bolus"); if(showWizard) menuitems.add("Wizard"); + menuitems.add("eCarb"); + menuitems.add("Bolus"); menuitems.add("Settings"); menuitems.add("Status"); if (showPrimeFill) menuitems.add("Prime/Fill"); @@ -86,6 +87,10 @@ public class MainMenuActivity extends MenuListActivity { intent = new Intent(this, FillMenuActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(intent); - } + } else if ("eCarb".equals(action)) { + intent = new Intent(this, ECarbActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + this.startActivity(intent); + } } }