Merge remote-tracking branch 'origin/dev' into develop

* origin/dev: (21 commits)
  1.5h
  Don't change schema.
  Fix comparing non-primitives.
  Generify MainApp.getSpecificPlugin.
  Fix some warnings / simplify a bit.
  Remove now unused dia, insulinInterfaceId from Treatment.
  correct supercall
  Use bolusstep granularity in fill dialog
  bugfix: fill as invalid treatments if triggered from phone
  add invalid treatments to charts in "invalid" colour
  Use bolusstep as step for insulin correction in wizard
  Update strings.xml
  fix of fix :(
  small refactoring
  Multiply time passed instead of divide dia.
  Update strings.xml
  Fix initalizing profile with default values.
  moved the code of the bg update to the top before all the loop logic happens, so there would be no delay
  Update strings.xml
  Update strings.xml
  ...
This commit is contained in:
Johannes Mockenhaupt 2017-08-23 16:36:06 +02:00
commit 52d2b425b8
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
40 changed files with 439 additions and 263 deletions

View file

@ -44,7 +44,7 @@ android {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 23 targetSdkVersion 23
versionCode 1500 versionCode 1500
version "1.5g-combo-dev" version "1.5h-combo-dev"
buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", generateGitBuild() buildConfigField "String", "BUILDVERSION", generateGitBuild()
} }

View file

@ -101,8 +101,6 @@ public class MainApp extends Application {
log.info("Version: " + BuildConfig.VERSION_NAME); log.info("Version: " + BuildConfig.VERSION_NAME);
log.info("BuildVersion: " + BuildConfig.BUILDVERSION); log.info("BuildVersion: " + BuildConfig.BUILDVERSION);
Answers.getInstance().logCustom(new CustomEvent("AppStart"));
sBus = new Bus(ThreadEnforcer.ANY); sBus = new Bus(ThreadEnforcer.ANY);
sInstance = this; sInstance = this;
sResources = getResources(); sResources = getResources();
@ -160,6 +158,11 @@ public class MainApp extends Application {
MainApp.getConfigBuilder().initialize(); MainApp.getConfigBuilder().initialize();
} }
NSUpload.uploadAppStart(); NSUpload.uploadAppStart();
if (MainApp.getConfigBuilder().isClosedModeEnabled())
Answers.getInstance().logCustom(new CustomEvent("AppStart-ClosedLoop"));
else
Answers.getInstance().logCustom(new CustomEvent("AppStart"));
startKeepAliveService(); startKeepAliveService();
@ -265,8 +268,6 @@ public class MainApp extends Application {
@Nullable @Nullable
public static InsulinInterface getInsulinIterfaceById(int id) { public static InsulinInterface getInsulinIterfaceById(int id) {
ArrayList<PluginBase> newList = new ArrayList<>();
if (pluginsList != null) { if (pluginsList != null) {
for (PluginBase p : pluginsList) { for (PluginBase p : pluginsList) {
if (p.getType() == PluginBase.INSULIN && ((InsulinInterface) p).getId() == id) if (p.getType() == PluginBase.INSULIN && ((InsulinInterface) p).getId() == id)
@ -323,11 +324,11 @@ public class MainApp extends Application {
} }
@Nullable @Nullable
public static PluginBase getSpecificPlugin(Class pluginClass) { public static <T extends PluginBase> T getSpecificPlugin(Class<T> pluginClass) {
if (pluginsList != null) { if (pluginsList != null) {
for (PluginBase p : pluginsList) { for (PluginBase p : pluginsList) {
if (p.getClass() == pluginClass) if (pluginClass.isAssignableFrom(p.getClass()))
return p; return (T) p;
} }
} else { } else {
log.error("pluginsList=null"); log.error("pluginsList=null");

View file

@ -124,9 +124,9 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
addPreferencesFromResource(R.xml.pref_profile); addPreferencesFromResource(R.xml.pref_profile);
} }
if (Config.DANAR) { if (Config.DANAR) {
DanaRPlugin danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); DanaRPlugin danaRPlugin = MainApp.getSpecificPlugin(DanaRPlugin.class);
DanaRKoreanPlugin danaRKoreanPlugin = (DanaRKoreanPlugin) MainApp.getSpecificPlugin(DanaRKoreanPlugin.class); DanaRKoreanPlugin danaRKoreanPlugin = MainApp.getSpecificPlugin(DanaRKoreanPlugin.class);
DanaRv2Plugin danaRv2Plugin = (DanaRv2Plugin) MainApp.getSpecificPlugin(DanaRv2Plugin.class); DanaRv2Plugin danaRv2Plugin = MainApp.getSpecificPlugin(DanaRv2Plugin.class);
if (danaRPlugin.isEnabled(PluginBase.PUMP) || danaRKoreanPlugin.isEnabled(PluginBase.PUMP)) { if (danaRPlugin.isEnabled(PluginBase.PUMP) || danaRKoreanPlugin.isEnabled(PluginBase.PUMP)) {
addPreferencesFromResource(R.xml.pref_danar); addPreferencesFromResource(R.xml.pref_danar);
} }
@ -143,16 +143,16 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
addPreferencesFromResource(R.xml.pref_combo); addPreferencesFromResource(R.xml.pref_combo);
} }
} }
VirtualPumpPlugin virtualPumpPlugin = (VirtualPumpPlugin) MainApp.getSpecificPlugin(VirtualPumpPlugin.class); VirtualPumpPlugin virtualPumpPlugin = MainApp.getSpecificPlugin(VirtualPumpPlugin.class);
if (virtualPumpPlugin != null && virtualPumpPlugin.isEnabled(PluginBase.PUMP)) { if (virtualPumpPlugin != null && virtualPumpPlugin.isEnabled(PluginBase.PUMP)) {
addPreferencesFromResource(R.xml.pref_virtualpump); addPreferencesFromResource(R.xml.pref_virtualpump);
} }
InsulinOrefFreePeakPlugin insulinOrefFreePeakPlugin = (InsulinOrefFreePeakPlugin) MainApp.getSpecificPlugin(InsulinOrefFreePeakPlugin.class); InsulinOrefFreePeakPlugin insulinOrefFreePeakPlugin = MainApp.getSpecificPlugin(InsulinOrefFreePeakPlugin.class);
if(insulinOrefFreePeakPlugin.isEnabled(PluginBase.INSULIN)){ if(insulinOrefFreePeakPlugin.isEnabled(PluginBase.INSULIN)){
addPreferencesFromResource(R.xml.pref_insulinoreffreepeak); addPreferencesFromResource(R.xml.pref_insulinoreffreepeak);
} }
NSClientInternalPlugin nsClientInternalPlugin = (NSClientInternalPlugin) MainApp.getSpecificPlugin(NSClientInternalPlugin.class); NSClientInternalPlugin nsClientInternalPlugin = MainApp.getSpecificPlugin(NSClientInternalPlugin.class);
if (nsClientInternalPlugin != null && nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) { if (nsClientInternalPlugin != null && nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) {
addPreferencesFromResource(R.xml.pref_nsclientinternal); addPreferencesFromResource(R.xml.pref_nsclientinternal);
} }
@ -164,13 +164,13 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
addPreferencesFromResource(R.xml.pref_advanced); addPreferencesFromResource(R.xml.pref_advanced);
if (Config.WEAR) { if (Config.WEAR) {
WearPlugin wearPlugin = (WearPlugin) MainApp.getSpecificPlugin(WearPlugin.class); WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class);
if (wearPlugin != null && wearPlugin.isEnabled(PluginBase.GENERAL)) { if (wearPlugin != null && wearPlugin.isEnabled(PluginBase.GENERAL)) {
addPreferencesFromResource(R.xml.pref_wear); addPreferencesFromResource(R.xml.pref_wear);
} }
} }
StatuslinePlugin statuslinePlugin = (StatuslinePlugin) MainApp.getSpecificPlugin(StatuslinePlugin.class); StatuslinePlugin statuslinePlugin = MainApp.getSpecificPlugin(StatuslinePlugin.class);
if (statuslinePlugin != null && statuslinePlugin.isEnabled(PluginBase.GENERAL)) { if (statuslinePlugin != null && statuslinePlugin.isEnabled(PluginBase.GENERAL)) {
addPreferencesFromResource(R.xml.pref_xdripstatus); addPreferencesFromResource(R.xml.pref_xdripstatus);
} }

View file

@ -17,7 +17,6 @@ import info.nightscout.androidaps.interfaces.InsulinInterface;
public class DetailedBolusInfo { public class DetailedBolusInfo {
public long date = System.currentTimeMillis(); public long date = System.currentTimeMillis();
public InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin();
public String eventType = CareportalEvent.MEALBOLUS; public String eventType = CareportalEvent.MEALBOLUS;
public double insulin = 0; public double insulin = 0;
public double carbs = 0; public double carbs = 0;

View file

@ -75,7 +75,7 @@ public class Profile {
ic = json.getJSONArray("carbratio"); ic = json.getJSONArray("carbratio");
if (getIc(0) == null) { if (getIc(0) == null) {
int defaultIC = 25; int defaultIC = 25;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultIC + "\",\"timeAsSeconds\":\"0\"}]"); ic = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultIC + "\",\"timeAsSeconds\":\"0\"}]");
Notification noic = new Notification(Notification.IC_MISSING, MainApp.sResources.getString(R.string.icmissing), Notification.URGENT); Notification noic = new Notification(Notification.IC_MISSING, MainApp.sResources.getString(R.string.icmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(noic)); MainApp.bus().post(new EventNewNotification(noic));
} else { } else {
@ -84,7 +84,7 @@ public class Profile {
basal = json.getJSONArray("basal"); basal = json.getJSONArray("basal");
if (getBasal(0) == null) { if (getBasal(0) == null) {
double defaultBasal = 0.1d; double defaultBasal = 0.1d;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultBasal + "\",\"timeAsSeconds\":\"0\"}]"); basal = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultBasal + "\",\"timeAsSeconds\":\"0\"}]");
Notification nobasal = new Notification(Notification.BASAL_MISSING, MainApp.sResources.getString(R.string.basalmissing), Notification.URGENT); Notification nobasal = new Notification(Notification.BASAL_MISSING, MainApp.sResources.getString(R.string.basalmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(nobasal)); MainApp.bus().post(new EventNewNotification(nobasal));
} else { } else {
@ -93,7 +93,7 @@ public class Profile {
targetLow = json.getJSONArray("target_low"); targetLow = json.getJSONArray("target_low");
if (getTargetLow(0) == null) { if (getTargetLow(0) == null) {
double defaultLow = units.equals(Constants.MGDL) ? 120 : 6; double defaultLow = units.equals(Constants.MGDL) ? 120 : 6;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultLow + "\",\"timeAsSeconds\":\"0\"}]"); targetLow = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultLow + "\",\"timeAsSeconds\":\"0\"}]");
Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT); Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(notarget)); MainApp.bus().post(new EventNewNotification(notarget));
} else { } else {
@ -102,7 +102,7 @@ public class Profile {
targetHigh = json.getJSONArray("target_high"); targetHigh = json.getJSONArray("target_high");
if (getTargetHigh(0) == null) { if (getTargetHigh(0) == null) {
double defaultHigh = units.equals(Constants.MGDL) ? 160 : 8; double defaultHigh = units.equals(Constants.MGDL) ? 160 : 8;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultHigh + "\",\"timeAsSeconds\":\"0\"}]"); targetHigh = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultHigh + "\",\"timeAsSeconds\":\"0\"}]");
Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT); Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(notarget)); MainApp.bus().post(new EventNewNotification(notarget));
} else { } else {
@ -378,6 +378,11 @@ public class Profile {
else return value * Constants.MMOLL_TO_MGDL; else return value * Constants.MMOLL_TO_MGDL;
} }
public static Double toMmol(Double value, String units) {
if (units.equals(Constants.MGDL)) return value * Constants.MGDL_TO_MMOLL;
else return value;
}
public static Double fromMgdlToUnits(Double value, String units) { public static Double fromMgdlToUnits(Double value, String units) {
if (units.equals(Constants.MGDL)) return value; if (units.equals(Constants.MGDL)) return value;
else return value * Constants.MGDL_TO_MMOLL; else return value * Constants.MGDL_TO_MMOLL;
@ -393,9 +398,16 @@ public class Profile {
else return DecimalFormatter.to1Decimal(valueInMmol); else return DecimalFormatter.to1Decimal(valueInMmol);
} }
// targets are stored in mg/dl // targets are stored in mg/dl but profile vary
public static String toTargetRangeString(double low, double high, String units) { public static String toTargetRangeString(double low, double high, String sourceUnits, String units) {
if (low == high) return toUnitsString(low, Profile.fromMgdlToUnits(low, Constants.MMOL), units); double lowMgdl = toMgdl(low, sourceUnits);
else return toUnitsString(low, Profile.fromMgdlToUnits(low, Constants.MMOL), units) + " - " + toUnitsString(high, Profile.fromMgdlToUnits(high, Constants.MMOL), units); double highMgdl = toMgdl(high, sourceUnits);
double lowMmol = toMmol(low, sourceUnits);
double highMmol = toMmol(high, sourceUnits);
if (low == high)
return toUnitsString(lowMgdl, lowMmol, units);
else
return toUnitsString(lowMgdl, lowMmol, units) + " - " + toUnitsString(highMgdl, highMmol, units);
} }
} }

View file

@ -187,7 +187,7 @@ public class ExtendedBolus implements Interval, DataPointWithLabelInterface {
if (calcdate > dia_ago && calcdate <= time) { if (calcdate > dia_ago && calcdate <= time) {
double tempBolusSize = absoluteRate() * spacing / 60d; double tempBolusSize = absoluteRate() * spacing / 60d;
Treatment tempBolusPart = new Treatment(insulinInterface, dia); Treatment tempBolusPart = new Treatment();
tempBolusPart.insulin = tempBolusSize; tempBolusPart.insulin = tempBolusSize;
tempBolusPart.date = calcdate; tempBolusPart.date = calcdate;

View file

@ -223,7 +223,7 @@ public class TemporaryBasal implements Interval {
double tempBolusSize = netBasalRate * tempBolusSpacing / 60d; double tempBolusSize = netBasalRate * tempBolusSpacing / 60d;
netBasalAmount += tempBolusSize; netBasalAmount += tempBolusSize;
Treatment tempBolusPart = new Treatment(insulinInterface, dia); Treatment tempBolusPart = new Treatment();
tempBolusPart.insulin = tempBolusSize; tempBolusPart.insulin = tempBolusSize;
tempBolusPart.date = calcdate; tempBolusPart.date = calcdate;

View file

@ -8,8 +8,6 @@ import com.j256.ormlite.table.DatabaseTable;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
@ -17,7 +15,6 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface;
import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries; import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
@ -51,31 +48,13 @@ public class Treatment implements DataPointWithLabelInterface {
public boolean isSMB = false; public boolean isSMB = false;
@DatabaseField @DatabaseField
public int insulinInterfaceID = InsulinInterface.FASTACTINGINSULIN; public int insulinInterfaceID = InsulinInterface.FASTACTINGINSULIN; // currently unused, will be used in the future
@DatabaseField @DatabaseField
public double dia = Constants.defaultDIA; public double dia = Constants.defaultDIA; // currently unused, will be used in the future
public Treatment() { public Treatment() {
} }
public Treatment(long date) {
this.date = date;
}
public Treatment(InsulinInterface insulin) {
insulinInterfaceID = insulin.getId();
dia = insulin.getDia();
}
public Treatment(InsulinInterface insulin, double dia) {
insulinInterfaceID = insulin.getId();
this.dia = dia;
}
public long getMillisecondsFromStart() {
return System.currentTimeMillis() - date;
}
public String toString() { public String toString() {
return "Treatment{" + return "Treatment{" +
"date= " + date + "date= " + date +
@ -170,7 +149,10 @@ public class Treatment implements DataPointWithLabelInterface {
@Override @Override
public int getColor() { public int getColor() {
if (isValid)
return Color.CYAN; return Color.CYAN;
else
return MainApp.instance().getResources().getColor(android.R.color.holo_red_light);
} }
@Override @Override
@ -183,10 +165,8 @@ public class Treatment implements DataPointWithLabelInterface {
public Iob iobCalc(long time, double dia) { public Iob iobCalc(long time, double dia) {
if (!isValid) if (!isValid)
return new Iob(); return new Iob();
InsulinInterface insulinInterface = MainApp.getInsulinIterfaceById(insulinInterfaceID);
if (insulinInterface == null)
insulinInterface = ConfigBuilderPlugin.getActiveInsulin();
InsulinInterface insulinInterface = ConfigBuilderPlugin.getActiveInsulin();
return insulinInterface.iobCalcForTreatment(this, time, dia); return insulinInterface.iobCalcForTreatment(this, time, dia);
} }
} }

View file

@ -69,8 +69,8 @@ public class FillDialog extends DialogFragment implements OnClickListener {
insulin = (TextView) view.findViewById(R.id.treatments_newtreatment_insulinamount); insulin = (TextView) view.findViewById(R.id.treatments_newtreatment_insulinamount);
Double maxInsulin = MainApp.getConfigBuilder().applyBolusConstraints(Constants.bolusOnlyForCheckLimit); Double maxInsulin = MainApp.getConfigBuilder().applyBolusConstraints(Constants.bolusOnlyForCheckLimit);
double bolusstep = MainApp.getConfigBuilder().getPumpDescription().bolusStep;
editInsulin = new PlusMinusEditText(view, R.id.treatments_newtreatment_insulinamount, R.id.treatments_newtreatment_insulinamount_plus, R.id.treatments_newtreatment_insulinamount_minus, 0d, 0d, maxInsulin, 0.05d, new DecimalFormat("0.00"), false); editInsulin = new PlusMinusEditText(view, R.id.treatments_newtreatment_insulinamount, R.id.treatments_newtreatment_insulinamount_plus, R.id.treatments_newtreatment_insulinamount_minus, 0d, 0d, maxInsulin, bolusstep, new DecimalFormat("0.00"), false);
//setup preset buttons //setup preset buttons
Button button1 = (Button) view.findViewById(R.id.fill_preset_button1); Button button1 = (Button) view.findViewById(R.id.fill_preset_button1);
@ -164,7 +164,7 @@ public class FillDialog extends DialogFragment implements OnClickListener {
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
detailedBolusInfo.insulin = finalInsulinAfterConstraints; detailedBolusInfo.insulin = finalInsulinAfterConstraints;
detailedBolusInfo.context = context; detailedBolusInfo.context = context;
detailedBolusInfo.source = Source.NONE; detailedBolusInfo.source = Source.USER;
detailedBolusInfo.isValid = false; // do not count it in IOB (for pump history) detailedBolusInfo.isValid = false; // do not count it in IOB (for pump history)
PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo); PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo);
if (!result.success) { if (!result.success) {

View file

@ -3,6 +3,8 @@ package info.nightscout.androidaps.plugins.ConstraintsSafety;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Objects;
import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.BuildConfig;
import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
@ -161,17 +163,17 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
Double origRate = absoluteRate; Double origRate = absoluteRate;
if (absoluteRate > maxBasal) { if (absoluteRate > maxBasal) {
absoluteRate = maxBasal; absoluteRate = maxBasal;
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && !Objects.equals(origPercentRate, Constants.basalPercentOnlyForCheckLimit))
log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h");
} }
if (absoluteRate > maxBasalMult * profile.getBasal()) { if (absoluteRate > maxBasalMult * profile.getBasal()) {
absoluteRate = Math.floor(maxBasalMult * profile.getBasal() * 100) / 100; absoluteRate = Math.floor(maxBasalMult * profile.getBasal() * 100) / 100;
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && !Objects.equals(origPercentRate, Constants.basalPercentOnlyForCheckLimit))
log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h");
} }
if (absoluteRate > profile.getMaxDailyBasal() * maxBasalFromDaily) { if (absoluteRate > profile.getMaxDailyBasal() * maxBasalFromDaily) {
absoluteRate = profile.getMaxDailyBasal() * maxBasalFromDaily; absoluteRate = profile.getMaxDailyBasal() * maxBasalFromDaily;
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && !Objects.equals(origPercentRate, Constants.basalPercentOnlyForCheckLimit))
log.debug("Limiting rate " + origRate + " by 3 * maxDailyBasal to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by 3 * maxDailyBasal to " + absoluteRate + "U/h");
} }
@ -180,7 +182,7 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
percentRateAfterConst = Round.ceilTo((double) percentRateAfterConst, 10d).intValue(); percentRateAfterConst = Round.ceilTo((double) percentRateAfterConst, 10d).intValue();
else percentRateAfterConst = Round.floorTo((double) percentRateAfterConst, 10d).intValue(); else percentRateAfterConst = Round.floorTo((double) percentRateAfterConst, 10d).intValue();
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && !Objects.equals(origPercentRate, Constants.basalPercentOnlyForCheckLimit))
log.debug("Recalculated percent rate " + percentRate + "% to " + percentRateAfterConst + "%"); log.debug("Recalculated percent rate " + percentRate + "% to " + percentRateAfterConst + "%");
return percentRateAfterConst; return percentRateAfterConst;
} }

View file

@ -9,7 +9,6 @@ import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries; import com.jjoe64.graphview.series.LineGraphSeries;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
@ -39,14 +38,14 @@ public class ActivityGraph extends GraphView {
double dia = insulin.getDia(); double dia = insulin.getDia();
int hours = (int) Math.floor(dia + 1); int hours = (int) Math.floor(dia + 1);
Treatment t = new Treatment(insulin, dia); Treatment t = new Treatment();
t.date = 0; t.date = 0;
t.insulin = 1d; t.insulin = 1d;
LineGraphSeries<DataPoint> activitySeries = null; LineGraphSeries<DataPoint> activitySeries = null;
LineGraphSeries<DataPoint> iobSeries = null; LineGraphSeries<DataPoint> iobSeries = null;
List<DataPoint> activityArray = new ArrayList<DataPoint>(); List<DataPoint> activityArray = new ArrayList<>();
List<DataPoint> iobArray = new ArrayList<DataPoint>(); List<DataPoint> iobArray = new ArrayList<>();
for (long time = 0; time <= hours * 60 * 60 * 1000; time += 5 * 60 * 1000L) { for (long time = 0; time <= hours * 60 * 60 * 1000; time += 5 * 60 * 1000L) {
Iob iob = t.iobCalc(time, dia); Iob iob = t.iobCalc(time, dia);
@ -56,7 +55,7 @@ public class ActivityGraph extends GraphView {
DataPoint[] activityDataPoints = new DataPoint[activityArray.size()]; DataPoint[] activityDataPoints = new DataPoint[activityArray.size()];
activityDataPoints = activityArray.toArray(activityDataPoints); activityDataPoints = activityArray.toArray(activityDataPoints);
addSeries(activitySeries = new LineGraphSeries<DataPoint>(activityDataPoints)); addSeries(activitySeries = new LineGraphSeries<>(activityDataPoints));
activitySeries.setThickness(8); activitySeries.setThickness(8);
getViewport().setXAxisBoundsManual(true); getViewport().setXAxisBoundsManual(true);
@ -68,7 +67,7 @@ public class ActivityGraph extends GraphView {
DataPoint[] iobDataPoints = new DataPoint[iobArray.size()]; DataPoint[] iobDataPoints = new DataPoint[iobArray.size()];
iobDataPoints = iobArray.toArray(iobDataPoints); iobDataPoints = iobArray.toArray(iobDataPoints);
getSecondScale().addSeries(iobSeries = new LineGraphSeries<DataPoint>(iobDataPoints)); getSecondScale().addSeries(iobSeries = new LineGraphSeries<>(iobDataPoints));
iobSeries.setDrawBackground(true); iobSeries.setDrawBackground(true);
iobSeries.setColor(Color.MAGENTA); iobSeries.setColor(Color.MAGENTA);
iobSeries.setBackgroundColor(Color.argb(70, 255, 0, 255)); iobSeries.setBackgroundColor(Color.argb(70, 255, 0, 255));

View file

@ -49,7 +49,7 @@ public class InsulinFastactingFragment extends Fragment {
private void updateGUI() { private void updateGUI() {
insulinName.setText(insulinFastactingPlugin.getFriendlyName()); insulinName.setText(insulinFastactingPlugin.getFriendlyName());
insulinComment.setText(insulinFastactingPlugin.getComment()); insulinComment.setText(insulinFastactingPlugin.getComment());
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingPlugin.getDia()).toString() + "h"); insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(insulinFastactingPlugin.getDia()) + "h");
insulinGraph.show(insulinFastactingPlugin); insulinGraph.show(insulinFastactingPlugin);
} }

View file

@ -50,7 +50,7 @@ public class InsulinFastactingProlongedFragment extends Fragment {
private void updateGUI() { private void updateGUI() {
insulinName.setText(insulinFastactingProlongedPlugin.getFriendlyName()); insulinName.setText(insulinFastactingProlongedPlugin.getFriendlyName());
insulinComment.setText(insulinFastactingProlongedPlugin.getComment()); insulinComment.setText(insulinFastactingProlongedPlugin.getComment());
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinFastactingProlongedPlugin.getDia()).toString() + "h"); insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(insulinFastactingProlongedPlugin.getDia()) + "h");
insulinGraph.show(insulinFastactingProlongedPlugin); insulinGraph.show(insulinFastactingProlongedPlugin);
} }

View file

@ -51,7 +51,7 @@ public class InsulinOrefFreePeakFragment extends Fragment {
private void updateGUI() { private void updateGUI() {
insulinName.setText(insulinPlugin.getFriendlyName()); insulinName.setText(insulinPlugin.getFriendlyName());
insulinComment.setText(insulinPlugin.getComment()); insulinComment.setText(insulinPlugin.getComment());
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h"); insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(insulinPlugin.getDia()) + "h");
insulinGraph.show(insulinPlugin); insulinGraph.show(insulinPlugin);
} }

View file

@ -51,7 +51,7 @@ public class InsulinOrefRapidActingFragment extends Fragment {
private void updateGUI() { private void updateGUI() {
insulinName.setText(insulinPlugin.getFriendlyName()); insulinName.setText(insulinPlugin.getFriendlyName());
insulinComment.setText(insulinPlugin.getComment()); insulinComment.setText(insulinPlugin.getComment());
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h"); insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(insulinPlugin.getDia()) + "h");
insulinGraph.show(insulinPlugin); insulinGraph.show(insulinPlugin);
} }
} }

View file

@ -51,7 +51,7 @@ public class InsulinOrefUltraRapidActingFragment extends Fragment {
private void updateGUI() { private void updateGUI() {
insulinName.setText(insulinPlugin.getFriendlyName()); insulinName.setText(insulinPlugin.getFriendlyName());
insulinComment.setText(insulinPlugin.getComment()); insulinComment.setText(insulinPlugin.getComment());
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h"); insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + Double.toString(insulinPlugin.getDia()) + "h");
insulinGraph.show(insulinPlugin); insulinGraph.show(insulinPlugin);
} }

View file

@ -50,7 +50,7 @@ public class UploadQueue {
public void run() { public void run() {
log.debug("QUEUE adding: " + dbr.data); log.debug("QUEUE adding: " + dbr.data);
MainApp.getDbHelper().create(dbr); MainApp.getDbHelper().create(dbr);
NSClientInternalPlugin plugin = (NSClientInternalPlugin) MainApp.getSpecificPlugin(NSClientInternalPlugin.class); NSClientInternalPlugin plugin = MainApp.getSpecificPlugin(NSClientInternalPlugin.class);
if (plugin != null) { if (plugin != null) {
plugin.resend("newdata"); plugin.resend("newdata");
} }

View file

@ -6,6 +6,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.Date; import java.util.Date;
import java.util.Objects;
/* /*
{ {
@ -188,7 +189,7 @@ public class NSSettingsStatus {
return result; return result;
} }
} }
if (settingsO.has("alarmTimeagoWarnMins") && what == "alarmTimeagoWarnMins"){ if (settingsO.has("alarmTimeagoWarnMins") && Objects.equals(what, "alarmTimeagoWarnMins")){
Double result = settingsO.getDouble(what); Double result = settingsO.getDouble(what);
return result; return result;
} }

View file

@ -32,7 +32,7 @@ public class AckAlarmReceiver extends BroadcastReceiver {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
AckAlarmReceiver.class.getSimpleName()); AckAlarmReceiver.class.getSimpleName());
NSClientInternalPlugin nsClientInternalPlugin = (NSClientInternalPlugin) MainApp.getSpecificPlugin(NSClientInternalPlugin.class); NSClientInternalPlugin nsClientInternalPlugin = MainApp.getSpecificPlugin(NSClientInternalPlugin.class);
if (!nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) { if (!nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) {
return; return;
} }

View file

@ -32,7 +32,7 @@ public class DBAccessReceiver extends BroadcastReceiver {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
DBAccessReceiver.class.getSimpleName()); DBAccessReceiver.class.getSimpleName());
NSClientInternalPlugin nsClientInternalPlugin = (NSClientInternalPlugin) MainApp.getSpecificPlugin(NSClientInternalPlugin.class); NSClientInternalPlugin nsClientInternalPlugin = MainApp.getSpecificPlugin(NSClientInternalPlugin.class);
if (!nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) { if (!nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) {
return; return;
} }

View file

@ -188,7 +188,7 @@ public class NSClientService extends Service {
nsAPIhashCode = Hashing.sha1().hashString(nsAPISecret, Charsets.UTF_8).toString(); nsAPIhashCode = Hashing.sha1().hashString(nsAPISecret, Charsets.UTF_8).toString();
MainApp.bus().post(new EventNSClientStatus("Initializing")); MainApp.bus().post(new EventNSClientStatus("Initializing"));
if (((NSClientInternalPlugin)MainApp.getSpecificPlugin(NSClientInternalPlugin.class)).paused) { if (MainApp.getSpecificPlugin(NSClientInternalPlugin.class).paused) {
MainApp.bus().post(new EventNSClientNewLog("NSCLIENT", "paused")); MainApp.bus().post(new EventNSClientNewLog("NSCLIENT", "paused"));
MainApp.bus().post(new EventNSClientStatus("Paused")); MainApp.bus().post(new EventNSClientStatus("Paused"));
} else if (!nsEnabled) { } else if (!nsEnabled) {
@ -421,7 +421,7 @@ public class NSClientService extends Service {
MainApp.bus().post(new EventNSClientNewLog("DATA", "Data packet #" + dataCounter++ + (isDelta ? " delta" : " full"))); MainApp.bus().post(new EventNSClientNewLog("DATA", "Data packet #" + dataCounter++ + (isDelta ? " delta" : " full")));
if (data.has("profiles")) { if (data.has("profiles")) {
JSONArray profiles = (JSONArray) data.getJSONArray("profiles"); JSONArray profiles = data.getJSONArray("profiles");
if (profiles.length() > 0) { if (profiles.length() > 0) {
JSONObject profile = (JSONObject) profiles.get(profiles.length() - 1); JSONObject profile = (JSONObject) profiles.get(profiles.length() - 1);
profileStore = new ProfileStore(profile); profileStore = new ProfileStore(profile);

View file

@ -29,7 +29,7 @@ import info.nightscout.utils.SafeParse;
public class EditQuickWizardDialog extends DialogFragment implements View.OnClickListener { public class EditQuickWizardDialog extends DialogFragment implements View.OnClickListener {
QuickWizard.QuickWizardEntry entry = new QuickWizard().newEmptyItem(); QuickWizard.QuickWizardEntry entry = new QuickWizard().newEmptyItem();
QuickWizard quickWizard = ((OverviewPlugin) MainApp.getSpecificPlugin(OverviewPlugin.class)).quickWizard; QuickWizard quickWizard = MainApp.getSpecificPlugin(OverviewPlugin.class).quickWizard;
EditText buttonEdit; EditText buttonEdit;
EditText carbsEdit; EditText carbsEdit;

View file

@ -20,6 +20,7 @@ import com.crashlytics.android.answers.Answers;
import com.crashlytics.android.answers.CustomEvent; import com.crashlytics.android.answers.CustomEvent;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Objects;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
@ -86,7 +87,7 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene
confirmMessage += getString(R.string.bolus) + ": " + insulinAfterConstraints + "U"; confirmMessage += getString(R.string.bolus) + ": " + insulinAfterConstraints + "U";
confirmMessage += "\n" + getString(R.string.carbs) + ": " + carbsAfterConstraints + "g"; confirmMessage += "\n" + getString(R.string.carbs) + ": " + carbsAfterConstraints + "g";
if (insulinAfterConstraints - insulin != 0 || carbsAfterConstraints != carbs) if (insulinAfterConstraints - insulin != 0 || !Objects.equals(carbsAfterConstraints, carbs))
confirmMessage += "\n" + getString(R.string.constraintapllied); confirmMessage += "\n" + getString(R.string.constraintapllied);
final double finalInsulinAfterConstraints = insulinAfterConstraints; final double finalInsulinAfterConstraints = insulinAfterConstraints;

View file

@ -129,7 +129,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
@Override @Override
public void onResume() { public void onResume() {
super.onPause(); super.onResume();
MainApp.bus().register(this); MainApp.bus().register(this);
} }
@ -243,7 +243,8 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
editBg.setParams(0d, 0d, 500d, 0.1d, new DecimalFormat("0.0"), false, textWatcher); editBg.setParams(0d, 0d, 500d, 0.1d, new DecimalFormat("0.0"), false, textWatcher);
editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher); editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher);
editCorr.setParams(0d, -maxCorrection, maxCorrection, 0.05d, new DecimalFormat("0.00"), false, textWatcher); double bolusstep = MainApp.getConfigBuilder().getPumpDescription().bolusStep;
editCorr.setParams(0d, -maxCorrection, maxCorrection, bolusstep, new DecimalFormat("0.00"), false, textWatcher);
editCarbTime.setParams(0d, -60d, 60d, 5d, new DecimalFormat("0"), false); editCarbTime.setParams(0d, -60d, 60d, 5d, new DecimalFormat("0"), false);
initDialog(); initDialog();

View file

@ -56,7 +56,7 @@ public class NotificationStore {
} }
store.add(n); store.add(n);
WearPlugin wearPlugin = (WearPlugin) MainApp.getSpecificPlugin(WearPlugin.class); WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class);
if(wearPlugin!= null && wearPlugin.isEnabled()) { if(wearPlugin!= null && wearPlugin.isEnabled()) {
wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text); wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text);
} }

View file

@ -55,6 +55,7 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
@ -615,7 +616,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
finalLastRun.lastEnact = new Date(); finalLastRun.lastEnact = new Date();
finalLastRun.lastOpenModeAccept = new Date(); finalLastRun.lastOpenModeAccept = new Date();
NSUpload.uploadDeviceStatus(); NSUpload.uploadDeviceStatus();
ObjectivesPlugin objectivesPlugin = (ObjectivesPlugin) MainApp.getSpecificPlugin(ObjectivesPlugin.class); ObjectivesPlugin objectivesPlugin = MainApp.getSpecificPlugin(ObjectivesPlugin.class);
if (objectivesPlugin != null) { if (objectivesPlugin != null) {
ObjectivesPlugin.manualEnacts++; ObjectivesPlugin.manualEnacts++;
ObjectivesPlugin.saveProgress(); ObjectivesPlugin.saveProgress();
@ -912,6 +913,34 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
return; return;
} }
Double lowLine = SP.getDouble("low_mark", 0d);
Double highLine = SP.getDouble("high_mark", 0d);
//Start with updating the BG as it is unaffected by loop.
// **** BG value ****
if (lastBG != null) {
int color = MainApp.sResources.getColor(R.color.inrange);
if (lastBG.valueToUnits(units) < lowLine)
color = MainApp.sResources.getColor(R.color.low);
else if (lastBG.valueToUnits(units) > highLine)
color = MainApp.sResources.getColor(R.color.high);
bgView.setText(lastBG.valueToUnitsToString(units));
arrowView.setText(lastBG.directionToSymbol());
bgView.setTextColor(color);
arrowView.setTextColor(color);
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
if (glucoseStatus != null) {
deltaView.setText("Δ " + Profile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units);
if (avgdeltaView != null)
avgdeltaView.setText("øΔ15m: " + Profile.toUnitsString(glucoseStatus.short_avgdelta, glucoseStatus.short_avgdelta * Constants.MGDL_TO_MMOLL, units) +
" øΔ40m: " + Profile.toUnitsString(glucoseStatus.long_avgdelta, glucoseStatus.long_avgdelta * Constants.MGDL_TO_MMOLL, units));
} else {
deltaView.setText("Δ " + MainApp.sResources.getString(R.string.notavailable));
if (avgdeltaView != null)
avgdeltaView.setText("");
}
}
// open loop mode // open loop mode
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun;
if (Config.APS && MainApp.getConfigBuilder().getPumpDescription().isTempBasalCapable) { if (Config.APS && MainApp.getConfigBuilder().getPumpDescription().isTempBasalCapable) {
@ -952,11 +981,11 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
tempTargetView.setTextColor(Color.BLACK); tempTargetView.setTextColor(Color.BLACK);
tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground)); tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground));
tempTargetView.setVisibility(View.VISIBLE); tempTargetView.setVisibility(View.VISIBLE);
tempTargetView.setText(Profile.toTargetRangeString(tempTarget.low, tempTarget.high, units)); tempTargetView.setText(Profile.toTargetRangeString(tempTarget.low, tempTarget.high, Constants.MGDL, units));
} else { } else {
tempTargetView.setTextColor(Color.WHITE); tempTargetView.setTextColor(Color.WHITE);
tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetDisabledBackground)); tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetDisabledBackground));
tempTargetView.setText(Profile.toTargetRangeString(profile.getTargetLow(), profile.getTargetHigh(), units)); tempTargetView.setText(Profile.toTargetRangeString(profile.getTargetLow(), profile.getTargetHigh(), units, units));
tempTargetView.setVisibility(View.VISIBLE); tempTargetView.setVisibility(View.VISIBLE);
} }
if (Config.NSCLIENT && tempTarget == null) { if (Config.NSCLIENT && tempTarget == null) {
@ -1105,8 +1134,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
treatmentButton.setVisibility(View.GONE); treatmentButton.setVisibility(View.GONE);
} }
Double lowLine = SP.getDouble("low_mark", 0d);
Double highLine = SP.getDouble("high_mark", 0d);
if (lowLine < 1) { if (lowLine < 1) {
lowLine = Profile.fromMgdlToUnits(OverviewPlugin.bgTargetLow, units); lowLine = Profile.fromMgdlToUnits(OverviewPlugin.bgTargetLow, units);
} }
@ -1115,28 +1143,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
} }
// **** BG value **** // **** BG value ****
if (lastBG != null) { if (lastBG == null) { //left this here as it seems you want to exit at this point if it is null...
int color = MainApp.sResources.getColor(R.color.inrange);
if (lastBG.valueToUnits(units) < lowLine)
color = MainApp.sResources.getColor(R.color.low);
else if (lastBG.valueToUnits(units) > highLine)
color = MainApp.sResources.getColor(R.color.high);
bgView.setText(lastBG.valueToUnitsToString(units));
arrowView.setText(lastBG.directionToSymbol());
bgView.setTextColor(color);
arrowView.setTextColor(color);
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
if (glucoseStatus != null) {
deltaView.setText("Δ " + Profile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units);
if (avgdeltaView != null)
avgdeltaView.setText("øΔ15m: " + Profile.toUnitsString(glucoseStatus.short_avgdelta, glucoseStatus.short_avgdelta * Constants.MGDL_TO_MMOLL, units) +
" øΔ40m: " + Profile.toUnitsString(glucoseStatus.long_avgdelta, glucoseStatus.long_avgdelta * Constants.MGDL_TO_MMOLL, units));
} else {
deltaView.setText("Δ " + MainApp.sResources.getString(R.string.notavailable));
if (avgdeltaView != null)
avgdeltaView.setText("");
}
} else {
return; return;
} }
Integer flag = bgView.getPaintFlags(); Integer flag = bgView.getPaintFlags();
@ -1598,8 +1606,6 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
for (int tx = 0; tx < treatments.size(); tx++) { for (int tx = 0; tx < treatments.size(); tx++) {
Treatment t = treatments.get(tx); Treatment t = treatments.get(tx);
if (!t.isValid)
continue;
if (t.getX() < fromTime || t.getX() > endTime) continue; if (t.getX() < fromTime || t.getX() > endTime) continue;
t.setY(getNearestBg((long) t.getX(), bgReadingsArray)); t.setY(getNearestBg((long) t.getX(), bgReadingsArray));
filteredTreatments.add(t); filteredTreatments.add(t);
@ -1740,7 +1746,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
public void onBindViewHolder(NotificationsViewHolder holder, int position) { public void onBindViewHolder(NotificationsViewHolder holder, int position) {
Notification notification = notificationsList.get(position); Notification notification = notificationsList.get(position);
holder.dismiss.setTag(notification); holder.dismiss.setTag(notification);
if(notification.text == MainApp.sResources.getString(R.string.nsalarm_staledata)) if(Objects.equals(notification.text, MainApp.sResources.getString(R.string.nsalarm_staledata)))
holder.dismiss.setText("snooze"); holder.dismiss.setText("snooze");
holder.text.setText(notification.text); holder.text.setText(notification.text);
holder.time.setText(DateUtil.timeString(notification.date)); holder.time.setText(DateUtil.timeString(notification.date));

View file

@ -124,7 +124,7 @@ public class QuickWizardListActivity extends AppCompatActivity implements View.O
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
recyclerView.setLayoutManager(llm); recyclerView.setLayoutManager(llm);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(((OverviewPlugin) MainApp.getSpecificPlugin(OverviewPlugin.class)).quickWizard, getSupportFragmentManager()); RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainApp.getSpecificPlugin(OverviewPlugin.class).quickWizard, getSupportFragmentManager());
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
adButton = (Button) findViewById(R.id.overview_quickwizardactivity_add_button); adButton = (Button) findViewById(R.id.overview_quickwizardactivity_add_button);
@ -164,7 +164,7 @@ public class QuickWizardListActivity extends AppCompatActivity implements View.O
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
RecyclerViewAdapter adapter = new RecyclerViewAdapter(((OverviewPlugin) MainApp.getSpecificPlugin(OverviewPlugin.class)).quickWizard, getSupportFragmentManager()); RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainApp.getSpecificPlugin(OverviewPlugin.class).quickWizard, getSupportFragmentManager());
recyclerView.swapAdapter(adapter, false); recyclerView.swapAdapter(adapter, false);
} }
}); });

View file

@ -109,7 +109,7 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
PumpInterface pump = MainApp.getConfigBuilder(); PumpInterface pump = MainApp.getConfigBuilder();
if (SP.getBoolean("syncprofiletopump", false)) { if (SP.getBoolean("syncprofiletopump", false)) {
if (pump.setNewBasalProfile(MainApp.getConfigBuilder().getProfile()) == PumpInterface.SUCCESS) { if (pump.setNewBasalProfile(MainApp.getConfigBuilder().getProfile()) == PumpInterface.SUCCESS) {
SmsCommunicatorPlugin smsCommunicatorPlugin = (SmsCommunicatorPlugin) MainApp.getSpecificPlugin(SmsCommunicatorPlugin.class); SmsCommunicatorPlugin smsCommunicatorPlugin = MainApp.getSpecificPlugin(SmsCommunicatorPlugin.class);
if (smsCommunicatorPlugin != null && smsCommunicatorPlugin.isEnabled(PluginBase.GENERAL)) { if (smsCommunicatorPlugin != null && smsCommunicatorPlugin.isEnabled(PluginBase.GENERAL)) {
smsCommunicatorPlugin.sendNotificationToAllNumbers(MainApp.sResources.getString(R.string.profile_set_ok)); smsCommunicatorPlugin.sendNotificationToAllNumbers(MainApp.sResources.getString(R.string.profile_set_ok));
} }

View file

@ -104,7 +104,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C
pumpDescription.isRefillingCapable = true; pumpDescription.isRefillingCapable = true;
} }
ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
log.debug("Service is disconnected"); log.debug("Service is disconnected");
@ -298,7 +298,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C
ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder(); ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder();
detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin); detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin);
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
Treatment t = new Treatment(detailedBolusInfo.insulinInterface); Treatment t = new Treatment();
boolean connectionOK = false; boolean connectionOK = false;
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t);
PumpEnactResult result = new PumpEnactResult(); PumpEnactResult result = new PumpEnactResult();

View file

@ -318,7 +318,7 @@ public class DanaRExecutionService extends Service {
} }
Date now = new Date(); Date now = new Date();
if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !((DanaRPlugin)MainApp.getSpecificPlugin(DanaRPlugin.class)).isInitialized()) { if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !MainApp.getSpecificPlugin(DanaRPlugin.class).isInitialized()) {
mSerialIOThread.sendMessage(new MsgSettingShippingInfo()); mSerialIOThread.sendMessage(new MsgSettingShippingInfo());
mSerialIOThread.sendMessage(new MsgSettingActiveProfile()); mSerialIOThread.sendMessage(new MsgSettingActiveProfile());
mSerialIOThread.sendMessage(new MsgSettingMeal()); mSerialIOThread.sendMessage(new MsgSettingMeal());

View file

@ -72,8 +72,6 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf
public static PumpDescription pumpDescription = new PumpDescription(); public static PumpDescription pumpDescription = new PumpDescription();
String textStatus = "";
public DanaRKoreanPlugin() { public DanaRKoreanPlugin() {
useExtendedBoluses = SP.getBoolean("danar_useextended", false); useExtendedBoluses = SP.getBoolean("danar_useextended", false);
@ -107,7 +105,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf
pumpDescription.isRefillingCapable = true; pumpDescription.isRefillingCapable = true;
} }
ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
log.debug("Service is disconnected"); log.debug("Service is disconnected");
@ -301,7 +299,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, DanaRInterf
ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder(); ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder();
detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin); detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin);
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
Treatment t = new Treatment(detailedBolusInfo.insulinInterface); Treatment t = new Treatment();
boolean connectionOK = false; boolean connectionOK = false;
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0)
connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t); connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t);

View file

@ -315,7 +315,7 @@ public class DanaRKoreanExecutionService extends Service {
} }
Date now = new Date(); Date now = new Date();
if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !((DanaRKoreanPlugin)MainApp.getSpecificPlugin(DanaRKoreanPlugin.class)).isInitialized()) { if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !MainApp.getSpecificPlugin(DanaRKoreanPlugin.class).isInitialized()) {
mSerialIOThread.sendMessage(new MsgSettingShippingInfo()); mSerialIOThread.sendMessage(new MsgSettingShippingInfo());
mSerialIOThread.sendMessage(new MsgSettingMeal()); mSerialIOThread.sendMessage(new MsgSettingMeal());
mSerialIOThread.sendMessage(new MsgSettingBasal_k()); mSerialIOThread.sendMessage(new MsgSettingBasal_k());

View file

@ -73,8 +73,6 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface,
public static PumpDescription pumpDescription = new PumpDescription(); public static PumpDescription pumpDescription = new PumpDescription();
public DanaRv2Plugin() { public DanaRv2Plugin() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
Context context = MainApp.instance().getApplicationContext(); Context context = MainApp.instance().getApplicationContext();
Intent intent = new Intent(context, DanaRv2ExecutionService.class); Intent intent = new Intent(context, DanaRv2ExecutionService.class);
context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE); context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
@ -105,7 +103,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface,
pumpDescription.isRefillingCapable = true; pumpDescription.isRefillingCapable = true;
} }
ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
log.debug("Service is disconnected"); log.debug("Service is disconnected");
@ -288,7 +286,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, DanaRInterface,
detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin); detailedBolusInfo.insulin = configBuilderPlugin.applyBolusConstraints(detailedBolusInfo.insulin);
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
DetailedBolusInfoStorage.add(detailedBolusInfo); // will be picked up on reading history DetailedBolusInfoStorage.add(detailedBolusInfo); // will be picked up on reading history
Treatment t = new Treatment(detailedBolusInfo.insulinInterface); Treatment t = new Treatment();
boolean connectionOK = false; boolean connectionOK = false;
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0)
connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, System.currentTimeMillis() + detailedBolusInfo.carbTime * 60 * 1000 + 1000, t); // +1000 to make the record different connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, System.currentTimeMillis() + detailedBolusInfo.carbTime * 60 * 1000 + 1000, t); // +1000 to make the record different

View file

@ -289,7 +289,7 @@ public class DanaRv2ExecutionService extends Service {
} }
Date now = new Date(); Date now = new Date();
if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !((DanaRv2Plugin)MainApp.getSpecificPlugin(DanaRv2Plugin.class)).isInitialized()) { if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !MainApp.getSpecificPlugin(DanaRv2Plugin.class).isInitialized()) {
mSerialIOThread.sendMessage(new MsgSettingShippingInfo()); mSerialIOThread.sendMessage(new MsgSettingShippingInfo());
mSerialIOThread.sendMessage(new MsgSettingActiveProfile()); mSerialIOThread.sendMessage(new MsgSettingActiveProfile());
mSerialIOThread.sendMessage(new MsgSettingMeal()); mSerialIOThread.sendMessage(new MsgSettingMeal());

View file

@ -269,7 +269,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
switch (splited[1].toUpperCase()) { switch (splited[1].toUpperCase()) {
case "DISABLE": case "DISABLE":
case "STOP": case "STOP":
LoopPlugin loopPlugin = (LoopPlugin) MainApp.getSpecificPlugin(LoopPlugin.class); LoopPlugin loopPlugin = MainApp.getSpecificPlugin(LoopPlugin.class);
if (loopPlugin != null && loopPlugin.isEnabled(PluginBase.LOOP)) { if (loopPlugin != null && loopPlugin.isEnabled(PluginBase.LOOP)) {
loopPlugin.setFragmentEnabled(PluginBase.LOOP, false); loopPlugin.setFragmentEnabled(PluginBase.LOOP, false);
PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true); PumpEnactResult result = MainApp.getConfigBuilder().cancelTempBasal(true);
@ -283,7 +283,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
break; break;
case "ENABLE": case "ENABLE":
case "START": case "START":
loopPlugin = (LoopPlugin) MainApp.getSpecificPlugin(LoopPlugin.class); loopPlugin = MainApp.getSpecificPlugin(LoopPlugin.class);
if (loopPlugin != null && !loopPlugin.isEnabled(PluginBase.LOOP)) { if (loopPlugin != null && !loopPlugin.isEnabled(PluginBase.LOOP)) {
loopPlugin.setFragmentEnabled(PluginBase.LOOP, true); loopPlugin.setFragmentEnabled(PluginBase.LOOP, true);
reply = MainApp.sResources.getString(R.string.smscommunicator_loophasbeenenabled); reply = MainApp.sResources.getString(R.string.smscommunicator_loophasbeenenabled);
@ -294,7 +294,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
Answers.getInstance().logCustom(new CustomEvent("SMS_Loop_Start")); Answers.getInstance().logCustom(new CustomEvent("SMS_Loop_Start"));
break; break;
case "STATUS": case "STATUS":
loopPlugin = (LoopPlugin) MainApp.getSpecificPlugin(LoopPlugin.class); loopPlugin = MainApp.getSpecificPlugin(LoopPlugin.class);
if (loopPlugin != null) { if (loopPlugin != null) {
if (loopPlugin.isEnabled(PluginBase.LOOP)) { if (loopPlugin.isEnabled(PluginBase.LOOP)) {
if (loopPlugin.isSuspended()) if (loopPlugin.isSuspended())
@ -371,12 +371,12 @@ public class SmsCommunicatorPlugin implements PluginBase {
} }
break; break;
case "DANAR": case "DANAR":
DanaRPlugin danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); DanaRPlugin danaRPlugin = MainApp.getSpecificPlugin(DanaRPlugin.class);
if (danaRPlugin != null && danaRPlugin.isEnabled(PluginBase.PUMP)) { if (danaRPlugin != null && danaRPlugin.isEnabled(PluginBase.PUMP)) {
reply = danaRPlugin.shortStatus(true); reply = danaRPlugin.shortStatus(true);
sendSMS(new Sms(receivedSms.phoneNumber, reply, new Date())); sendSMS(new Sms(receivedSms.phoneNumber, reply, new Date()));
} }
DanaRKoreanPlugin danaRKoreanPlugin = (DanaRKoreanPlugin) MainApp.getSpecificPlugin(DanaRKoreanPlugin.class); DanaRKoreanPlugin danaRKoreanPlugin = MainApp.getSpecificPlugin(DanaRKoreanPlugin.class);
if (danaRKoreanPlugin != null && danaRKoreanPlugin.isEnabled(PluginBase.PUMP)) { if (danaRKoreanPlugin != null && danaRKoreanPlugin.isEnabled(PluginBase.PUMP)) {
reply = danaRKoreanPlugin.shortStatus(true); reply = danaRKoreanPlugin.shortStatus(true);
sendSMS(new Sms(receivedSms.phoneNumber, reply, new Date())); sendSMS(new Sms(receivedSms.phoneNumber, reply, new Date()));
@ -463,7 +463,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
bolusWaitingForConfirmation.processed = true; bolusWaitingForConfirmation.processed = true;
PumpInterface pumpInterface = MainApp.getConfigBuilder(); PumpInterface pumpInterface = MainApp.getConfigBuilder();
if (pumpInterface != null) { if (pumpInterface != null) {
danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); danaRPlugin = MainApp.getSpecificPlugin(DanaRPlugin.class);
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
detailedBolusInfo.insulin = bolusWaitingForConfirmation.bolusRequested; detailedBolusInfo.insulin = bolusWaitingForConfirmation.bolusRequested;
detailedBolusInfo.source = Source.USER; detailedBolusInfo.source = Source.USER;
@ -486,7 +486,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
tempBasalWaitingForConfirmation.processed = true; tempBasalWaitingForConfirmation.processed = true;
PumpInterface pumpInterface = MainApp.getConfigBuilder(); PumpInterface pumpInterface = MainApp.getConfigBuilder();
if (pumpInterface != null) { if (pumpInterface != null) {
danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); danaRPlugin = MainApp.getSpecificPlugin(DanaRPlugin.class);
PumpEnactResult result = pumpInterface.setTempBasalAbsolute(tempBasalWaitingForConfirmation.tempBasal, 30, false); PumpEnactResult result = pumpInterface.setTempBasalAbsolute(tempBasalWaitingForConfirmation.tempBasal, 30, false);
if (result.success) { if (result.success) {
reply = String.format(MainApp.sResources.getString(R.string.smscommunicator_tempbasalset), result.absolute, result.duration); reply = String.format(MainApp.sResources.getString(R.string.smscommunicator_tempbasalset), result.absolute, result.duration);
@ -505,7 +505,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
cancelTempBasalWaitingForConfirmation.processed = true; cancelTempBasalWaitingForConfirmation.processed = true;
PumpInterface pumpInterface = MainApp.getConfigBuilder(); PumpInterface pumpInterface = MainApp.getConfigBuilder();
if (pumpInterface != null) { if (pumpInterface != null) {
danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); danaRPlugin = MainApp.getSpecificPlugin(DanaRPlugin.class);
PumpEnactResult result = pumpInterface.cancelTempBasal(true); PumpEnactResult result = pumpInterface.cancelTempBasal(true);
if (result.success) { if (result.success) {
reply = MainApp.sResources.getString(R.string.smscommunicator_tempbasalcanceled); reply = MainApp.sResources.getString(R.string.smscommunicator_tempbasalcanceled);

View file

@ -185,7 +185,11 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
total.iob += tIOB.iobContrib; total.iob += tIOB.iobContrib;
total.activity += tIOB.activityContrib; total.activity += tIOB.activityContrib;
if (!t.isSMB) { if (!t.isSMB) {
Iob bIOB = t.iobCalc(time, dia / SP.getDouble("openapsama_bolussnooze_dia_divisor", 2.0)); // instead of dividing the DIA that only worked on the bilinear curves,
// multiply the time the treatment is seen active.
long timeSinceTreatment = time - t.date;
long snoozeTime = t.date + (long)(timeSinceTreatment * SP.getDouble("openapsama_bolussnooze_dia_divisor", 2.0));
Iob bIOB = t.iobCalc(snoozeTime, dia);
total.bolussnooze += bIOB.iobContrib; total.bolussnooze += bIOB.iobContrib;
} else { } else {
total.basaliob += t.insulin; total.basaliob += t.insulin;
@ -411,7 +415,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
@Override @Override
public boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo) { public boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo) {
Treatment treatment = new Treatment(detailedBolusInfo.insulinInterface); Treatment treatment = new Treatment();
treatment.date = detailedBolusInfo.date; treatment.date = detailedBolusInfo.date;
treatment.source = detailedBolusInfo.source; treatment.source = detailedBolusInfo.source;
treatment.pumpId = detailedBolusInfo.pumpId; treatment.pumpId = detailedBolusInfo.pumpId;
@ -425,7 +429,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
boolean newRecordCreated = MainApp.getDbHelper().createOrUpdate(treatment); boolean newRecordCreated = MainApp.getDbHelper().createOrUpdate(treatment);
//log.debug("Adding new Treatment record" + treatment.toString()); //log.debug("Adding new Treatment record" + treatment.toString());
if (detailedBolusInfo.carbTime != 0) { if (detailedBolusInfo.carbTime != 0) {
Treatment carbsTreatment = new Treatment(detailedBolusInfo.insulinInterface); Treatment carbsTreatment = new Treatment();
carbsTreatment.source = detailedBolusInfo.source; carbsTreatment.source = detailedBolusInfo.source;
carbsTreatment.pumpId = detailedBolusInfo.pumpId; // but this should never happen carbsTreatment.pumpId = detailedBolusInfo.pumpId; // but this should never happen
carbsTreatment.date = detailedBolusInfo.date + detailedBolusInfo.carbTime * 60 * 1000L + 1000L; // add 1 sec to make them different records carbsTreatment.date = detailedBolusInfo.date + detailedBolusInfo.carbTime * 60 * 1000L + 1000L; // add 1 sec to make them different records

View file

@ -242,7 +242,7 @@ public class ActionStringHandler {
} else if("opencpp".equals(act[0])){ } else if("opencpp".equals(act[0])){
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface(); Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class); CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
if(cpp == null || activeProfile==null || cpp != activeProfile){ if(cpp == null || activeProfile==null || cpp != activeProfile){
sendError("CPP not activated!"); sendError("CPP not activated!");
@ -256,7 +256,7 @@ public class ActionStringHandler {
} else if("cppset".equals(act[0])){ } else if("cppset".equals(act[0])){
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface(); Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class); CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
if(cpp == null || activeProfile==null || cpp != activeProfile){ if(cpp == null || activeProfile==null || cpp != activeProfile){
sendError("CPP not activated!"); sendError("CPP not activated!");
@ -271,9 +271,9 @@ public class ActionStringHandler {
} else if("tddstats".equals(act[0])){ } else if("tddstats".equals(act[0])){
Object activePump = MainApp.getConfigBuilder().getActivePump(); Object activePump = MainApp.getConfigBuilder().getActivePump();
PumpInterface dana = (PumpInterface) MainApp.getSpecificPlugin(DanaRPlugin.class); PumpInterface dana = MainApp.getSpecificPlugin(DanaRPlugin.class);
PumpInterface danaV2 = (PumpInterface) MainApp.getSpecificPlugin(DanaRv2Plugin.class); PumpInterface danaV2 = MainApp.getSpecificPlugin(DanaRv2Plugin.class);
PumpInterface danaKorean = (PumpInterface) MainApp.getSpecificPlugin(DanaRKoreanPlugin.class); PumpInterface danaKorean = MainApp.getSpecificPlugin(DanaRKoreanPlugin.class);
if((dana == null || dana != activePump) && if((dana == null || dana != activePump) &&
@ -336,7 +336,7 @@ public class ActionStringHandler {
DateFormat df = new SimpleDateFormat("dd.MM."); DateFormat df = new SimpleDateFormat("dd.MM.");
String message = ""; String message = "";
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class); CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
boolean isCPP = (cpp!= null && cpp.isEnabled(PluginBase.PROFILE)); boolean isCPP = (cpp!= null && cpp.isEnabled(PluginBase.PROFILE));
double refTDD = 100; double refTDD = 100;
if(isCPP) refTDD = cpp.baseBasalSum()*2; if(isCPP) refTDD = cpp.baseBasalSum()*2;
@ -472,7 +472,7 @@ public class ActionStringHandler {
//Check for Temp-Target: //Check for Temp-Target:
TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(System.currentTimeMillis()); TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(System.currentTimeMillis());
if (tempTarget != null) { if (tempTarget != null) {
ret += "Temp Target: " + Profile.toTargetRangeString(tempTarget.low, tempTarget.low, profile.getUnits()); ret += "Temp Target: " + Profile.toTargetRangeString(tempTarget.low, tempTarget.low, Constants.MGDL, profile.getUnits());
ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd()); ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd());
ret += "\n\n"; ret += "\n\n";
} }
@ -572,7 +572,7 @@ public class ActionStringHandler {
private static void setCPP(int percentage, int timeshift) { private static void setCPP(int percentage, int timeshift) {
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface(); Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class); CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
if(cpp == null || activeProfile==null || cpp != activeProfile){ if(cpp == null || activeProfile==null || cpp != activeProfile){
sendError("CPP not activated!"); sendError("CPP not activated!");

View file

@ -144,7 +144,7 @@
<string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string> <string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string>
<string name="nav_test_alert">Test Alarm</string> <string name="nav_test_alert">Test Alarm</string>
<string name="avgdelta">Avg. delta</string> <string name="avgdelta">Avg. delta</string>
<string name="bolusconstraintapplied">Bolus Einschränkung angewendet</string> <string name="bolusconstraintapplied">Bolus Beschränkung angewendet</string>
<string name="careportal_announcement">Ankündigung</string> <string name="careportal_announcement">Ankündigung</string>
<string name="careportal_bgcheck">BZ Check</string> <string name="careportal_bgcheck">BZ Check</string>
<string name="careportal_carbscorrection">Kohlehydrat Korrektur</string> <string name="careportal_carbscorrection">Kohlehydrat Korrektur</string>
@ -155,18 +155,18 @@
<string name="careportal_newnstreatment_enteredby_title">Eingegeben durch</string> <string name="careportal_newnstreatment_enteredby_title">Eingegeben durch</string>
<string name="careportal_newnstreatment_other">Anderes</string> <string name="careportal_newnstreatment_other">Anderes</string>
<string name="careportal_newnstreatment_split_label">Split</string> <string name="careportal_newnstreatment_split_label">Split</string>
<string name="configbuilder_constraints">Constraints</string> <string name="configbuilder_constraints">Beschränkungen</string>
<string name="configbuilder_general">Generell</string> <string name="configbuilder_general">Generell</string>
<string name="configbuilder_treatments">Treatments</string> <string name="configbuilder_treatments">Treatments</string>
<string name="constraintapllied">Constraint applied!</string> <string name="constraintapllied">Beschränkungen sind aktiv!</string>
<string name="constraints_violation">Constraints violation</string> <string name="constraints_violation">Beschränkungen wurden verletzt oder Limit erreicht</string>
<string name="cs_lang">Czech</string> <string name="cs_lang">Czech</string>
<string name="loop_setbypump_label">Gesetzt durch Pumpe</string> <string name="loop_setbypump_label">Gesetzt durch Pumpe</string>
<string name="loopdisabled">LOOP DISABLED BY CONSTRAINTS</string> <string name="loopdisabled">LOOP DEAKTIVIERT DURCH DIE BESCHRÄNKUNG</string>
<string name="loop_constraintsprocessed_label">After processed constraints</string> <string name="loop_constraintsprocessed_label">Nach Beschränkungen</string>
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="objectives_manualenacts">Manual enacts</string> <string name="objectives_manualenacts">Manual enacts</string>
<string name="carbsconstraintapplied">Carbs constraint applied</string> <string name="carbsconstraintapplied">Kohlenhydrate Beschränkung erreicht</string>
<string name="nav_resetdb">Reset Datenbanken</string> <string name="nav_resetdb">Reset Datenbanken</string>
<string name="objectives_minimalduration">Minimale Dauer</string> <string name="objectives_minimalduration">Minimale Dauer</string>
<string name="nav_refreshtreatments">Erneure Behandlungen von NS</string> <string name="nav_refreshtreatments">Erneure Behandlungen von NS</string>
@ -300,7 +300,7 @@
<string name="button3">Knopf 3</string> <string name="button3">Knopf 3</string>
<string name="configbuilder">Config Builder</string> <string name="configbuilder">Config Builder</string>
<string name="minago">vor %d min</string> <string name="minago">vor %d min</string>
<string name="actions_shortname">"AKT"</string> <string name="actions_shortname">AKT</string>
<string name="wear_shortname">WEAR</string> <string name="wear_shortname">WEAR</string>
<string name="virtualpump_shortname">VP</string> <string name="virtualpump_shortname">VP</string>
<string name="treatments_shortname">TREAT</string> <string name="treatments_shortname">TREAT</string>
@ -317,7 +317,7 @@
<string name="danarpump_shortname">DANA</string> <string name="danarpump_shortname">DANA</string>
<string name="configbuilder_shortname">"CONF"</string> <string name="configbuilder_shortname">"CONF"</string>
<string name="circadian_percentage_profile_shortname">"CPP"</string> <string name="circadian_percentage_profile_shortname">"CPP"</string>
<string name="careportal_shortname">"CP"</string> <string name="careportal_shortname">CP</string>
<string name="error_only_numeric_digits_allowed">Bitte verwenden Sie nur Ziffern.</string> <string name="error_only_numeric_digits_allowed">Bitte verwenden Sie nur Ziffern.</string>
<string name="error_field_must_not_be_empty">Pflichtfeld</string> <string name="error_field_must_not_be_empty">Pflichtfeld</string>
<string name="error_phone_not_valid">Telefonnummer ist nicht gültig.</string> <string name="error_phone_not_valid">Telefonnummer ist nicht gültig.</string>
@ -462,7 +462,7 @@
<string name="ns_localbroadcasts_title">Aktiviere lokalen Broadcast.</string> <string name="ns_localbroadcasts_title">Aktiviere lokalen Broadcast.</string>
<string name="ns_logappstartedevent">Logge App-Start in NS</string> <string name="ns_logappstartedevent">Logge App-Start in NS</string>
<string name="ns_noupload">Kein Upload zu NS</string> <string name="ns_noupload">Kein Upload zu NS</string>
<string name="ns_noupload_summary">Alle an NS gesendete Daten verworfen. AAPS ist verbunden, aber keine Änderungen in NS ist fertig</string> <string name="ns_noupload_summary">Alle an NS gesendete Daten werden verworfen. AAPS ist verbunden, aber es wird keine Änderungen in NS gemacht</string>
<string name="nsalarm_high">Hoch</string> <string name="nsalarm_high">Hoch</string>
<string name="nsalarm_low">Niedrig</string> <string name="nsalarm_low">Niedrig</string>
<string name="nsalarm_summary">Gesetzt zu %f</string> <string name="nsalarm_summary">Gesetzt zu %f</string>
@ -478,9 +478,9 @@
<string name="nsclientinternal_url_dialogmessage">Nightscout URL eingeben</string> <string name="nsclientinternal_url_dialogmessage">Nightscout URL eingeben</string>
<string name="nsclientinternal_url_title">Nightscout URL</string> <string name="nsclientinternal_url_title">Nightscout URL</string>
<string name="objectives_0_gate">Verifiziere, dass der BZ und Pumpen Insulin Daten in Nightscout erfolgreich hoch geladen wurden</string> <string name="objectives_0_gate">Verifiziere, dass der BZ und Pumpen Insulin Daten in Nightscout erfolgreich hoch geladen wurden</string>
<string name="objectives_0_objective">Konfiguriere Anzeige und das Monitoring und analysiere Basal und die Faktoren</string> <string name="objectives_0_objective">Konfiguriere die Anzeige und das Monitoring (NS) und analysiere die Basal-Rate und die Faktoren</string>
<string name="objectives_1_gate">Lasse den OpenLoop Modus für ein paar Tage laufen und setzte manuell temp Basal-Raten</string> <string name="objectives_1_gate">Lasse den OpenLoop Modus für ein paar Tage laufen und setzte manuell temp Basal-Raten</string>
<string name="objectives_1_objective">Starte ein OpenLoop</string> <string name="objectives_1_objective">Starte den OpenLoop Modus</string>
<string name="old_data">VERALTETE DATEN</string> <string name="old_data">VERALTETE DATEN</string>
<string name="ongoingnotificaction">Laufende Benachrichtigungen</string> <string name="ongoingnotificaction">Laufende Benachrichtigungen</string>
<string name="open_settings_on_wear">Öffne Einstellungen auf der Uhr</string> <string name="open_settings_on_wear">Öffne Einstellungen auf der Uhr</string>
@ -496,7 +496,7 @@
<string name="overview_newtempbasal_basalabsolute">Basal Wert [U/h]</string> <string name="overview_newtempbasal_basalabsolute">Basal Wert [U/h]</string>
<string name="profile">Profil</string> <string name="profile">Profil</string>
<string name="profile_set_failed">Setzten vom Basal Profil fehlgeschlagen</string> <string name="profile_set_failed">Setzten vom Basal Profil fehlgeschlagen</string>
<string name="profile_set_ok">Basal Profil in der Pumpe erfolgreich aktualisiert</string> <string name="profile_set_ok">Basal Profil in der Pumpe aktualisiert</string>
<string name="profileswitch">Profilwechsel</string> <string name="profileswitch">Profilwechsel</string>
<string name="pump">Pumpe</string> <string name="pump">Pumpe</string>
<string name="pumpNotInitialized">Pumpe nicht initialisiert!</string> <string name="pumpNotInitialized">Pumpe nicht initialisiert!</string>
@ -561,7 +561,7 @@
<string name="sensitivityweightedaverage">Durschnittliche Sensitivität</string> <string name="sensitivityweightedaverage">Durschnittliche Sensitivität</string>
<string name="settingextendedbolus">Einstellung Extended Bolus</string> <string name="settingextendedbolus">Einstellung Extended Bolus</string>
<string name="sms_minago">vor %dMin</string> <string name="sms_minago">vor %dMin</string>
<string formatted="false" name="smscommunicator_basalstopreplywithcode">"Um das temp Basal zu stoppen, antworte mit dem Code %s"</string> <string formatted="false" name="smscommunicator_basalstopreplywithcode">Um das temp Basal zu stoppen, antworte mit dem Code %s</string>
<string formatted="false" name="smscommunicator_bolusdelivered">Bolus %.2fU erfolgreich abgegeben</string> <string formatted="false" name="smscommunicator_bolusdelivered">Bolus %.2fU erfolgreich abgegeben</string>
<string name="smscommunicator_calibrationfailed">xDrip hat die Kalbrierung nicht erhalten</string> <string name="smscommunicator_calibrationfailed">xDrip hat die Kalbrierung nicht erhalten</string>
<string formatted="false" name="smscommunicator_calibrationreplywithcode">Um die Kalibrierung %.2f zu senden, antworte mit dem Code %s</string> <string formatted="false" name="smscommunicator_calibrationreplywithcode">Um die Kalibrierung %.2f zu senden, antworte mit dem Code %s</string>
@ -591,4 +591,33 @@
<string formatted="false" name="danar_model">Model: %02X Protokoll: %02X Code: %02X</string> <string formatted="false" name="danar_model">Model: %02X Protokoll: %02X Code: %02X</string>
<string name="configbuilder_sensitivity">Empfindlichkeitserkennung</string> <string name="configbuilder_sensitivity">Empfindlichkeitserkennung</string>
<string name="cob">COB</string> <string name="cob">COB</string>
<string name="enablesuperbolus_summary">Aktiviere die SuperBolus-Funktion im Wizard. Nicht aktivieren, wenn du nicht weißt, was es macht! ES KANN ZU EINER ÜBERDOSIERUNG AN INSULIN KOMMEN, WENN DU ES BLIND BENUTZT!</string>
<string name="objectives_2_objective">"Verstehen des OpenLoops und der Temp-Basal-Empfehlungen</string>
<string name="openapsama_useautosens">Verwende AMA Autosense</string>
<string formatted="false" name="smscommunicator_basalreplywithcode">Um Basal mit %.2fU/h zu starten, antworte mit dem Code %s</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="wear_overviewnotifications_summary">Zeige die Übersichtsbenachrichtigungen auch als Wear Bestätigungsmeldung auf der Uhr an.</string>
<string name="short_avgdelta">Kurzes Durschnitts-Delta</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="openapsama_autosens_adjusttargets_summary">Default Eintrag: true. Erlaubt Autosense den Ziel-BZ-Bereich in Verbindung mit ISF und Basal anzupassen.</string>
<string name="openapsama_autosens_period">Intervall für Autosense [h]</string>
<string name="openapsama_autosens_period_summary">Anzahl der Stunde von der Vergangenheit, die verwendet werden um die Sensitivität zu erkennen (Kohlenhydrate absorptuinszeit ist nicht enthalten)</string>
<string name="objectives_2_gate">Anhand von dieser Erfahrung, entscheide wie hoch max Basal sein sollte und setzte dies in der Pumpe und den Einstellungen</string>
<string name="objectives_3_gate">Lasse es im ClosedLoop Modus mit max IOB = 0 für ein paar Tage laufen ohne zu viele Unterzuckeren zu haben</string>
<string name="objectives_3_objective">Starte den ClosedLoop Modus mit Abschaltung bei niedrigen Werte</string>
<string name="objectives_4_gate">Verwende es ein paar Tage, und zumindest eine Nacht ohne Niedrig-Alarme (UZ), bevor du den BZ-Zielbereich senkst.</string>
<string name="objectives_4_objective">Fein-Einstellung des Closed-Loops, Erhöhen von max IOB über 0 und langsames Heruntersetzen des Zielbereichs.</string>
<string name="objectives_5_gate">Eine Woche erfolgreiches Looping am Tag mit regelmäßiger Kohlenhydrat-Eingabe</string>
<string name="objectives_5_objective">Passe Basal und Faktoren an, falls notwendig, und aktiviere dann die Autosense-Funktion</string>
<string name="objectives_6_objective">Aktiviere zusätzliche Funktionen tagsüber, wie z.B. den Mahlzeitenassistent</string>
<string name="nsalarm_urgentstaledata">Stark veraltete Daten</string>
<string name="nsalarm_urgent_staledatavalue_label">Stark veraltete Daten nach [min]</string>
<string name="nl_lang">Dutch</string>
<string name="insulin_peak_time">Peak Time [min]</string>
<string name="insulin_oref_peak">IOB Kurve Peak Time</string>
<string name="free_peak_oref">Free-Peak Oref</string>
<string formatted="false" name="dia_too_short">DIA von %s ist zu kurz - aaps nutzt stattdessen %s!</string>
<string name="danar_stats_warning_Message">Möglicherweise ungenau, wenn zum Befüllen ein Bolus verwendet wurde!</string>
<string name="danar_stats_ratio">Verhältnis</string>
</resources> </resources>

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="treatmentssafety_title">Treatments 안전설정</string> <string name="treatmentssafety_title">관리 안전설정</string>
<string name="treatmentssafety_maxbolus_title">최대 허용 식사주입인슐린 [U]</string> <string name="treatmentssafety_maxbolus_title">최대 허용 식사주입인슐린 [U]</string>
<string name="treatmentssafety_maxcarbs_title">최대 허용 탄수화물 [g]</string> <string name="treatmentssafety_maxcarbs_title">최대 허용 탄수화물 [g]</string>
<string name="nav_preferences">설정</string> <string name="nav_preferences">설정</string>
<string name="nav_refreshtreatments">NS에서 Treatments 새로고침</string> <string name="nav_refreshtreatments">NS에서 관리 새로고침</string>
<string name="nav_backup">백업</string> <string name="nav_backup">백업</string>
<string name="nav_test_alert">테스트 알람</string> <string name="nav_test_alert">테스트 알람</string>
<string name="nav_resetdb">데이터베이스 초기화</string> <string name="nav_resetdb">데이터베이스 초기화</string>
@ -58,7 +58,7 @@
<string name="openapsma_lastrun_label">최근 실행</string> <string name="openapsma_lastrun_label">최근 실행</string>
<string name="openapsma_inputparameters_label">입력 변수</string> <string name="openapsma_inputparameters_label">입력 변수</string>
<string name="openapsma_glucosestatus_label">혈당 상태</string> <string name="openapsma_glucosestatus_label">혈당 상태</string>
<string name="openapsma_currenttemp_label">Current temp</string> <string name="openapsma_currenttemp_label">현재 임시기초</string>
<string name="openapsma_iobdata_label">IOB 데이터</string> <string name="openapsma_iobdata_label">IOB 데이터</string>
<string name="openapsma_profile_label">프로파일</string> <string name="openapsma_profile_label">프로파일</string>
<string name="openapsma_mealdata_label">식사 데이터</string> <string name="openapsma_mealdata_label">식사 데이터</string>
@ -68,24 +68,25 @@
<string name="openapsma_nopump">No pump available</string> <string name="openapsma_nopump">No pump available</string>
<string name="nochangerequested">변경사항 없음</string> <string name="nochangerequested">변경사항 없음</string>
<string name="openapsma_request_label">요청</string> <string name="openapsma_request_label">요청</string>
<string name="rate">Rate</string> <string name="rate">주입량</string>
<string name="duration">기간</string> <string name="duration">기간</string>
<string name="reason">근거</string> <string name="reason">근거</string>
<string name="glucose">혈당</string> <string name="glucose">혈당</string>
<string name="delta">Delta</string> <string name="delta">Delta</string>
<string name="sms_delta">Delta:</string> <string name="sms_delta">Delta:</string>
<string name="avgdelta">Avg. delta</string> <string name="avgdelta">Avg. delta</string>
<string name="configbuilder">Config Builder</string> <string name="configbuilder">구성 관리자</string>
<string name="objectives">목표</string> <string name="objectives">목표</string>
<string name="openapsma">OpenAPS MA</string> <string name="openapsma">OpenAPS MA</string>
<string name="overview">Overview</string> <string name="overview">개요</string>
<string name="profileviewer">NS 프로파일</string> <string name="profileviewer">NS 프로파일</string>
<string name="simpleprofile">Simple 프로파일</string> <string name="simpleprofile">Simple 프로파일</string>
<string name="treatments">Treatments</string> <string name="tempbasal">임시기초</string>
<string name="treatments">관리</string>
<string name="virtualpump">가상펌프</string> <string name="virtualpump">가상펌프</string>
<string name="careportal">Careportal</string> <string name="careportal">케어포털</string>
<string name="configbuilder_pump">펌프</string> <string name="configbuilder_pump">펌프</string>
<string name="configbuilder_treatments">Treatments</string> <string name="configbuilder_treatments">관리</string>
<string name="configbuilder_tempbasals">임시기초주입</string> <string name="configbuilder_tempbasals">임시기초주입</string>
<string name="configbuilder_profile">프로파일</string> <string name="configbuilder_profile">프로파일</string>
<string name="configbuilder_aps">APS</string> <string name="configbuilder_aps">APS</string>
@ -96,8 +97,8 @@
<string name="loop">Loop</string> <string name="loop">Loop</string>
<string name="configbuilder_loop">Loop</string> <string name="configbuilder_loop">Loop</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">After processed constraints</string> <string name="loop_constraintsprocessed_label">제약 적용 후</string>
<string name="loop_setbypump_label">Set by pump</string> <string name="loop_setbypump_label">펌프로 설정</string>
<string name="openapsma_lastenact_label">최근 주입</string> <string name="openapsma_lastenact_label">최근 주입</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">취소</string> <string name="cancel">취소</string>
@ -106,7 +107,7 @@
<string name="openapsma_disabled">플러그인이 사용불가능 합니다</string> <string name="openapsma_disabled">플러그인이 사용불가능 합니다</string>
<string name="constraints_violation">제한 위반</string> <string name="constraints_violation">제한 위반</string>
<string name="treatmentdeliveryerror">식사주입 전송 에러</string> <string name="treatmentdeliveryerror">식사주입 전송 에러</string>
<string name="tempbasaldeliveryerror">Tempbasal delivery error</string> <string name="tempbasaldeliveryerror">임시기초 전송 에러</string>
<string name="overview_newtempbasal_basalpercent">기초주입 값 [%]</string> <string name="overview_newtempbasal_basalpercent">기초주입 값 [%]</string>
<string name="overview_newtempbasal_percent_label">% (100% = 현재)</string> <string name="overview_newtempbasal_percent_label">% (100% = 현재)</string>
<string name="setbasalquestion">새 임시기초주입 적용:</string> <string name="setbasalquestion">새 임시기초주입 적용:</string>
@ -128,9 +129,12 @@
<string name="apsmode_title">APS 모드</string> <string name="apsmode_title">APS 모드</string>
<string name="closedloop">Closed Loop</string> <string name="closedloop">Closed Loop</string>
<string name="openloop">Open Loop</string> <string name="openloop">Open Loop</string>
<string name="disabledloop">Loop Disabled</string> <string name="disabledloop">Loop 비활성화됨</string>
<string name="disableloop">Loop 비활성화하기</string>
<string name="enableloop">Loop 활성화하기</string>
<string name="openloop_newsuggestion">새로운 제안이 있습니다</string> <string name="openloop_newsuggestion">새로운 제안이 있습니다</string>
<string name="unsupportedclientver">지원하지 않는 NSClient 버전입니다</string> <string name="unsupportedclientver">지원하지 않는 NSClient 버전입니다</string>
<string name="unsupportednsversion">지원하지 않는 Nightscout 버전입니다</string>
<string name="nsclientnotinstalled">NSClient 가 설치되지 않았습니다. 기록이 삭제됩니다!</string> <string name="nsclientnotinstalled">NSClient 가 설치되지 않았습니다. 기록이 삭제됩니다!</string>
<string name="objectives_bgavailableinns">NS에서 혈당데이터가 확인 가능합니다.</string> <string name="objectives_bgavailableinns">NS에서 혈당데이터가 확인 가능합니다.</string>
<string name="objectives_pumpstatusavailableinns">NS에서 펌프상태가 확인 가능합니다.</string> <string name="objectives_pumpstatusavailableinns">NS에서 펌프상태가 확인 가능합니다.</string>
@ -141,40 +145,40 @@
<string name="treatments_wizard_basaliob_label">기초주입 IOB</string> <string name="treatments_wizard_basaliob_label">기초주입 IOB</string>
<string name="bolusconstraintapplied">식사주입 제한이 적용되었습니다</string> <string name="bolusconstraintapplied">식사주입 제한이 적용되었습니다</string>
<string name="carbsconstraintapplied">탄수화물 제한이 적용되었습니다</string> <string name="carbsconstraintapplied">탄수화물 제한이 적용되었습니다</string>
<string name="careportal_bgcheck">BG Check</string> <string name="careportal_bgcheck">혈당 체크</string>
<string name="careportal_announcement">Announcement</string> <string name="careportal_announcement">알림</string>
<string name="careportal_note">Note</string> <string name="careportal_note">노트</string>
<string name="careportal_question">Question</string> <string name="careportal_question">의문</string>
<string name="careportal_exercise">Exercise</string> <string name="careportal_exercise">운동</string>
<string name="careportal_pumpsitechange">Pump Site Change</string> <string name="careportal_pumpsitechange">펌프 위치 변경</string>
<string name="careportal_cgmsensorinsert">CGM Sensor Insert</string> <string name="careportal_cgmsensorinsert">CGM 센서 삽입</string>
<string name="careportal_cgmsensorstart">CGM Sensor Start</string> <string name="careportal_cgmsensorstart">CGM 센서 시작</string>
<string name="careportal_insulincartridgechange">Insulin Cartridge Change</string> <string name="careportal_insulincartridgechange">인슐린 카트리지 교체</string>
<string name="careportal_profileswitch">프로파일 변경</string> <string name="careportal_profileswitch">프로파일 변경</string>
<string name="careportal_snackbolus">Snack Bolus</string> <string name="careportal_snackbolus">간식 주입</string>
<string name="careportal_mealbolus">Meal Bolus</string> <string name="careportal_mealbolus">식사 주입</string>
<string name="careportal_correctionbolus">Correction Bolus</string> <string name="careportal_correctionbolus">교정 주입</string>
<string name="careportal_combobolus">Combo Bolus</string> <string name="careportal_combobolus">콤보 주입</string>
<string name="careportal_tempbasalstart">Temp Basal Start</string> <string name="careportal_tempbasalstart">임시 기초 시작</string>
<string name="careportal_tempbasalend">Temp Basal End</string> <string name="careportal_tempbasalend">임시 기초 종료</string>
<string name="careportal_carbscorrection">Carbs correction</string> <string name="careportal_carbscorrection">탄수화물 교정</string>
<string name="careportal_openapsoffline">OpenAPS Offline</string> <string name="careportal_openapsoffline">OpenAPS 오프라인</string>
<string name="careportal_newnstreatment_eventtype">Event type</string> <string name="careportal_newnstreatment_eventtype">이벤트 종류</string>
<string name="careportal_newnstreatment_other">Other</string> <string name="careportal_newnstreatment_other">기타</string>
<string name="careportal_newnstreatment_meter">Meter</string> <string name="careportal_newnstreatment_meter">측정기</string>
<string name="careportal_newnstreatment_sensor">Sensor</string> <string name="careportal_newnstreatment_sensor">센서</string>
<string name="careportal_newnstreatment_carbs_label">Carbs</string> <string name="careportal_newnstreatment_carbs_label">탄수화물</string>
<string name="careportal_newnstreatment_insulin_label">Insulin</string> <string name="careportal_newnstreatment_insulin_label">인슐린</string>
<string name="careportal_newnstreatment_carbtime_label">Carb time</string> <string name="careportal_newnstreatment_carbtime_label">탄수화물 시간</string>
<string name="careportal_newnstreatment_split_label">Split</string> <string name="careportal_newnstreatment_split_label">분할</string>
<string name="careportal_newnstreatment_duration_label">Duration</string> <string name="careportal_newnstreatment_duration_label">기간</string>
<string name="careportal_newnstreatment_percent_label">Percent</string> <string name="careportal_newnstreatment_percent_label">퍼센트</string>
<string name="careportal_newnstreatment_absolute_label">Absolute</string> <string name="careportal_newnstreatment_absolute_label">절대값</string>
<string name="careportal_newnstreatment_notes_label">Notes</string> <string name="careportal_newnstreatment_notes_label">노트</string>
<string name="careportal_newnstreatment_eventtime_label">Event time</string> <string name="careportal_newnstreatment_eventtime_label">이벤트 시간</string>
<string name="careportal_newnstreatment_profile_label">Profile</string> <string name="careportal_newnstreatment_profile_label">프로파일</string>
<string name="careportal_newnstreatment_enteredby_title">Entered By</string> <string name="careportal_newnstreatment_enteredby_title">Entered By</string>
<string name="careportal_newnstreatment_glucosetype">Glucose type</string> <string name="careportal_newnstreatment_glucosetype">혈당 종류</string>
<string name="noprofile">아직 NS에서 프로파일을 로드하지 못했습니다.</string> <string name="noprofile">아직 NS에서 프로파일을 로드하지 못했습니다.</string>
<string name="overview_tempbasal_button">임시기초주입</string> <string name="overview_tempbasal_button">임시기초주입</string>
<string name="overview_extendedbolus_button">확장식사주입</string> <string name="overview_extendedbolus_button">확장식사주입</string>
@ -191,13 +195,17 @@
<string name="filenotfound">파일을 찾을 수 없습니다</string> <string name="filenotfound">파일을 찾을 수 없습니다</string>
<string name="nav_export">설정 저장하기</string> <string name="nav_export">설정 저장하기</string>
<string name="nav_import">설정 불러오기</string> <string name="nav_import">설정 불러오기</string>
<string name="nl_lang">Dutch</string>
<string name="de_lang">German</string> <string name="de_lang">German</string>
<string name="es_lang">Spanish</string> <string name="es_lang">Spanish</string>
<string name="el_lang">Greek</string> <string name="el_lang">Greek</string>
<string name="it_lang">Italian</string>
<string name="ru_lang">Russian</string>
<string name="sv_lang">Swedish</string>
<string name="openapsma_maxbasal_title">임시기초주입 최대량 [U/hr]</string> <string name="openapsma_maxbasal_title">임시기초주입 최대량 [U/hr]</string>
<string name="openapsma_maxbasal_summary">이 값은 OpenAPS에서 Max Basal(임시기초주입 최대량)로 설정되는 값입니다</string> <string name="openapsma_maxbasal_summary">이 값은 OpenAPS에서 Max Basal(임시기초주입 최대량)로 설정되는 값입니다</string>
<string name="openapsma_maxiob_title">OpenAPS가 주입할수 있는 최대 기초주입 IOB [U]</string> <string name="openapsma_maxiob_title">OpenAPS가 주입할수 있는 최대 기초주입 IOB [U]</string>
<string name="openapsma_maxiob_summary">이 값은 OpenAPS에서 Max IOB라고 부르는 값입니다\n기본값은 0으로 설정되어 있습니다. 몇일 혹은 몇주 정도 사용 후에 적정한 정도에 따라 값을 조정할 수 있습니다.</string> <string name="openapsma_maxiob_summary">이 값은 OpenAPS에서 Max IOB라고 부르는 값입니다\n기본값은 0으로 설정되어 있습니다. 몇일 혹은 몇주 정도 사용 후 적절한 값으로 변경할 수 있습니다.</string>
<string name="bg_lang">Bulgarian</string> <string name="bg_lang">Bulgarian</string>
<string name="dismiss">닫기</string> <string name="dismiss">닫기</string>
<string name="language">언어</string> <string name="language">언어</string>
@ -208,16 +216,15 @@
<string name="syncprofiletopump_title">프로파일을 펌프에 동기화하기</string> <string name="syncprofiletopump_title">프로파일을 펌프에 동기화하기</string>
<string name="danar_pump_settings">다나R 펌프 설정</string> <string name="danar_pump_settings">다나R 펌프 설정</string>
<string name="nightscout">Nightscout</string> <string name="nightscout">Nightscout</string>
<string name="end_user_license_agreement">End User License Agreement</string> <string name="end_user_license_agreement">최종 사용자 라이선스 동의서</string>
<string name="end_user_license_agreement_text">MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</string> <string name="end_user_license_agreement_text">MUST NOT BE USED TO MAKE MEDICAL DECISIONS. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</string>
<string name="end_user_license_agreement_i_understand">I UNDERSTAND AND AGREE</string> <string name="end_user_license_agreement_i_understand">모두 이해하였고 동의합니다.</string>
<string name="save">저장</string> <string name="save">저장</string>
<string name="nobtadapter">블루투스 어댑터를 찾지 못했습니다</string> <string name="nobtadapter">블루투스 어댑터를 찾지 못했습니다</string>
<string name="devicenotfound">선택된 기기를 찾지 못했습니다</string> <string name="devicenotfound">선택된 기기를 찾지 못했습니다</string>
<string name="connectionerror">펌프 연결 에러</string> <string name="connectionerror">펌프 연결 에러</string>
<string name="virtualpump_lastconnection_label">최근 연결</string>
<string name="danar_iob_label">펌프 IOB</string> <string name="danar_iob_label">펌프 IOB</string>
<string name="danar_dailyunits">Daily units</string> <string name="danar_dailyunits">하루 인슐린양</string>
<string name="danar_lastbolus">최근 식사주입:</string> <string name="danar_lastbolus">최근 식사주입:</string>
<string name="hoursago">시간 전</string> <string name="hoursago">시간 전</string>
<string name="danar_invalidinput">사용할수 없는 입력 데이터</string> <string name="danar_invalidinput">사용할수 없는 입력 데이터</string>
@ -246,14 +253,14 @@
<string name="glucosetype_finger">Finger</string> <string name="glucosetype_finger">Finger</string>
<string name="glucosetype_sensor">Sensor</string> <string name="glucosetype_sensor">Sensor</string>
<string name="manual">Manual</string> <string name="manual">Manual</string>
<string name="careportal_temporarytarget">Temporary Target</string> <string name="careportal_temporarytarget">임시 목표</string>
<string name="careportal_temporarytargetcancel">Temporary Target Cancel</string> <string name="careportal_temporarytargetcancel">임시 목표 취소</string>
<string name="danarprofile">DanaR 프로파일 설정</string> <string name="danarprofile">DanaR 프로파일 설정</string>
<string name="danarprofile_dia">인슐린활동시간(DIA) [h]</string> <string name="danarprofile_dia">인슐린활동시간(DIA) [h]</string>
<string name="danarprofile_dia_summary">Duration of Insulin Activity</string> <string name="danarprofile_dia_summary">Duration of Insulin Activity</string>
<string name="failedupdatebasalprofile">기초주입 프로파일 갱신 실패</string> <string name="failedupdatebasalprofile">기초주입 프로파일 갱신 실패</string>
<string name="danar_history">History</string> <string name="danar_history">과거기록</string>
<string name="danar_historyreload">Reload</string> <string name="danar_historyreload">새로고침</string>
<string name="uploading">업로드중</string> <string name="uploading">업로드중</string>
<string name="danar_ebolus">E bolus</string> <string name="danar_ebolus">E bolus</string>
<string name="danar_dsbolus">DS bolus</string> <string name="danar_dsbolus">DS bolus</string>
@ -263,11 +270,11 @@
<string name="danar_basalhour">basal hour</string> <string name="danar_basalhour">basal hour</string>
<string name="danar_glucose">혈당</string> <string name="danar_glucose">혈당</string>
<string name="danar_carbohydrate">탄수화물</string> <string name="danar_carbohydrate">탄수화물</string>
<string name="danar_alarm">alarm</string> <string name="danar_alarm">알람</string>
<string name="danar_totaluploaded" formatted="false">Total %d records uploaded</string> <string name="danar_totaluploaded" formatted="false">Total %d records uploaded</string>
<string name="danar_sbolus">S bolus</string> <string name="danar_sbolus">S bolus</string>
<string name="danar_history_alarm">Alarms</string> <string name="danar_history_alarm">알람</string>
<string name="danar_history_basalhours">Basal Hours</string> <string name="danar_history_basalhours">기초주입 시간</string>
<string name="danar_history_bolus">식사주입</string> <string name="danar_history_bolus">식사주입</string>
<string name="danar_history_carbohydrates">탄수화물</string> <string name="danar_history_carbohydrates">탄수화물</string>
<string name="danar_history_dailyinsulin">일일 인슐린</string> <string name="danar_history_dailyinsulin">일일 인슐린</string>
@ -284,8 +291,8 @@
<string name="occlusion">막힘</string> <string name="occlusion">막힘</string>
<string name="overview_bolusprogress_stop">정지</string> <string name="overview_bolusprogress_stop">정지</string>
<string name="overview_bolusprogress_stoppressed">정지 누름</string> <string name="overview_bolusprogress_stoppressed">정지 누름</string>
<string name="waitingforpump">Waiting for pump</string> <string name="waitingforpump">펌프를 기다리는 중</string>
<string name="waitingforpumpclicktorefresh">펌프를 기다리고 있습니다. Click to refresh.</string> <string name="waitingforpumpclicktorefresh">펌프를 기다리고 있습니다. 새로고침 하려면 클릭하세요.</string>
<string name="overview_bolusprogress_goingtodeliver" formatted="false">%.2fU을 주입합니다</string> <string name="overview_bolusprogress_goingtodeliver" formatted="false">%.2fU을 주입합니다</string>
<string name="objectives_0_objective">나이트스카우트를 세팅하고, 기초주입과 비율을 분석한다.</string> <string name="objectives_0_objective">나이트스카우트를 세팅하고, 기초주입과 비율을 분석한다.</string>
<string name="objectives_0_gate">나이트스카우트에서 혈당 데이터가 잘 들어오는지, 펌프데이터가 업로드 되는지 확인한다.</string> <string name="objectives_0_gate">나이트스카우트에서 혈당 데이터가 잘 들어오는지, 펌프데이터가 업로드 되는지 확인한다.</string>
@ -309,15 +316,17 @@
<string name="openapsma_valuelimitedto" formatted="false">%.2f limited to %.2f</string> <string name="openapsma_valuelimitedto" formatted="false">%.2f limited to %.2f</string>
<string name="openapsma_valueoutofrange" formatted="false">값 %s 은 하드리밋(Hard Limit)를 벗어났습니다</string> <string name="openapsma_valueoutofrange" formatted="false">값 %s 은 하드리밋(Hard Limit)를 벗어났습니다</string>
<string name="smscommunicator_remotebasalnotallowed">원격 기초주입설정이 허가되지 않았습니다</string> <string name="smscommunicator_remotebasalnotallowed">원격 기초주입설정이 허가되지 않았습니다</string>
<string name="smscommunicator_remotecommandnotallowed">원격 명령이 허가되지 않았습니다</string>
<string name="smscommunicator_basalreplywithcode" formatted="false">기초주입 %.2fU/h 을 실행하려면 %s 를 입력하고 답장하세요</string> <string name="smscommunicator_basalreplywithcode" formatted="false">기초주입 %.2fU/h 을 실행하려면 %s 를 입력하고 답장하세요</string>
<string name="smscommunicator_suspendreplywithcode" formatted="false">%d분동안 Loop 일시중지하려면 %s 를 입력하고 답장하세요</string>
<string name="smscommunicator_tempbasalset" formatted="false">Temp basal %.2fU/h for %d min started successfully</string> <string name="smscommunicator_tempbasalset" formatted="false">Temp basal %.2fU/h for %d min started successfully</string>
<string name="smscommunicator_tempbasalfailed">Temp basal start failed</string> <string name="smscommunicator_tempbasalfailed">임시기초 시작을 실패하였습니다.</string>
<string name="smscommunicator_basalstopreplywithcode" formatted="false">임시기초주입을 중지하려면 %s 를 입력하고 답장하세요</string> <string name="smscommunicator_basalstopreplywithcode" formatted="false">임시기초주입을 중지하려면 %s 를 입력하고 답장하세요</string>
<string name="smscommunicator_tempbasalcanceled">Temp basal canceled</string> <string name="smscommunicator_tempbasalcanceled">임시기초가 취소되었습니다.</string>
<string name="smscommunicator_tempbasalcancelfailed">Canceling temp basal failed</string> <string name="smscommunicator_tempbasalcancelfailed">임시기초 취소를 실패하였습니다.</string>
<string name="smscommunicator_unknowncommand">알려지지 않은 명령이거나 잘못된 답장입니다</string> <string name="smscommunicator_unknowncommand">알려지지 않은 명령이거나 잘못된 답장입니다.</string>
<string name="quickwizard">마법사</string> <string name="quickwizard">빠른마법사</string>
<string name="quickwizardsettings">마법사 설정</string> <string name="quickwizardsettings">빠른마법사 설정</string>
<string name="overview_editquickwizard_buttontext">버튼명:</string> <string name="overview_editquickwizard_buttontext">버튼명:</string>
<string name="overview_editquickwizard_carbs">탄수화물:</string> <string name="overview_editquickwizard_carbs">탄수화물:</string>
<string name="overview_editquickwizard_valid">유효기간:</string> <string name="overview_editquickwizard_valid">유효기간:</string>
@ -327,10 +336,10 @@
<string name="mealbolus">Meal</string> <string name="mealbolus">Meal</string>
<string name="correctionbous">Corr</string> <string name="correctionbous">Corr</string>
<string name="ko_lang">한국어</string> <string name="ko_lang">한국어</string>
<string name="actions">액션</string> <string name="actions">실행</string>
<string name="androidaps_start">AndroidAPS 시작</string> <string name="androidaps_start">AndroidAPS 시작</string>
<string name="ns_upload_only">NS upload only (disabled sync)</string> <string name="ns_upload_only">NS에 업로드만 하기(동기화 불능)</string>
<string name="ns_upload_only_summary">NS upload only. 로컬소스(xDrip)가 선택되지 않으면 SGV에는 효력이 없습니다. NS프로파일이 사용중이라면 프로파일에는 효력이 없습니다.</string> <string name="ns_upload_only_summary">NS에 업로드만 하기. 로컬소스(xDrip)가 선택되지 않으면 SGV에는 효력이 없습니다. NS프로파일이 사용중이라면 프로파일에는 효력이 없습니다.</string>
<string name="pumpNotInitialized">펌프가 초기화 되지 않았습니다!</string> <string name="pumpNotInitialized">펌프가 초기화 되지 않았습니다!</string>
<string name="pumpNotInitializedProfileNotSet">펌프가 초기화와 프로파일 설정이 되지 않았습니다!</string> <string name="pumpNotInitializedProfileNotSet">펌프가 초기화와 프로파일 설정이 되지 않았습니다!</string>
<string name="primefill">공기/채움</string> <string name="primefill">공기/채움</string>
@ -347,14 +356,14 @@
<string name="mgdl">mg/dl</string> <string name="mgdl">mg/dl</string>
<string name="mmol">mmol/l</string> <string name="mmol">mmol/l</string>
<string name="dia">DIA:</string> <string name="dia">DIA:</string>
<string name="target_range">Target range:</string> <string name="target_range">목표 범위:</string>
<string name="edit_base_basal">Edit Base-Basal:</string> <string name="edit_base_basal">Edit Base-Basal:</string>
<string name="edit_base_isf">Edit Base-ISF:</string> <string name="edit_base_isf">Edit Base-ISF:</string>
<string name="edit_base_ic">Edit Base-IC:</string> <string name="edit_base_ic">Edit Base-IC:</string>
<string name="base_profile_label">Base Profile:</string> <string name="base_profile_label">Base Profile:</string>
<string name="circadian_percentage_profile">CircadianPercentageProfile</string> <string name="circadian_percentage_profile">CircadianPercentageProfile</string>
<string name="prefs_range_title">차트 표시 범위</string> <string name="prefs_range_title">차트 표시 범위</string>
<string name="prefs_range_summary">Overview/스마트워치 차트 표시용 고/저혈당 선</string> <string name="prefs_range_summary">개요/스마트워치 차트 표시용 고/저혈당 선</string>
<string name="low_mark">저혈당 선</string> <string name="low_mark">저혈당 선</string>
<string name="high_mark">고혈당 선</string> <string name="high_mark">고혈당 선</string>
<string name="wear">웨어</string> <string name="wear">웨어</string>
@ -366,7 +375,7 @@
<string name="batterydischarged">펌프배터리 방전</string> <string name="batterydischarged">펌프배터리 방전</string>
<string name="danarkoreanpump">다나R 한글</string> <string name="danarkoreanpump">다나R 한글</string>
<string name="wrongpumpdriverselected">펌프 드라이버가 잘못 선택되었습니다</string> <string name="wrongpumpdriverselected">펌프 드라이버가 잘못 선택되었습니다</string>
<string name="basal_rate">Basal rate:</string> <string name="basal_rate">기초주입량:</string>
<string name="profile_set_failed">기초주입 프로파일 설정이 실패하였습니다</string> <string name="profile_set_failed">기초주입 프로파일 설정이 실패하였습니다</string>
<string name="profile_set_ok">기초주입 프로파일이 펌프에 업데이트 되었습니다</string> <string name="profile_set_ok">기초주입 프로파일이 펌프에 업데이트 되었습니다</string>
<string name="danar_disableeasymode">펌프에서 EasyUI모드를 해제하세요</string> <string name="danar_disableeasymode">펌프에서 EasyUI모드를 해제하세요</string>
@ -377,36 +386,37 @@
<string name="sms_lastbg">Last BG:</string> <string name="sms_lastbg">Last BG:</string>
<string name="mdi">MDI</string> <string name="mdi">MDI</string>
<string name="MM640g">MM640g</string> <string name="MM640g">MM640g</string>
<string name="ongoingnotificaction">Ongoing Notification</string> <string name="ongoingnotificaction">연속 알림</string>
<string name="old_data">OLD DATA</string> <string name="old_data">OLD DATA</string>
<string name="minago">%dmin ago</string> <string name="minago">%d분전</string>
<string name="sms_minago">%dmin ago</string> <string name="sms_minago">%dmin ago</string>
<string name="localprofile">Local Profile</string> <string name="localprofile">Local Profile</string>
<string name="openapsama">OpenAPS AMA</string> <string name="openapsama">OpenAPS AMA</string>
<string name="short_avgdelta">Short avg. delta</string> <string name="short_avgdelta">Short avg. delta</string>
<string name="long_avgdelta">Long avg. delta</string> <string name="long_avgdelta">Long avg. delta</string>
<string name="array_of_elements">Array of %d elements.\nActual value:</string> <string name="array_of_elements">Array of %d elements.\nActual value:</string>
<string name="openapsma_autosensdata_label">Autosens data</string> <string name="openapsma_autosensdata_label">Autosens 정보</string>
<string name="openapsma_scriptdebugdata_label">Script debug</string> <string name="openapsma_scriptdebugdata_label">Script debug</string>
<string name="openapsama_useautosens">AMA autosens 기능 사용하기</string> <string name="openapsama_useautosens">AMA autosens 기능 사용하기</string>
<string name="refresheventsfromnightscout">NS에서 이벤트 새로고침</string>
<string name="eatingsoon">Eating Soon</string> <string name="eatingsoon">Eating Soon</string>
<string name="activity">Activity</string> <string name="activity">Activity</string>
<string name="removerecord">Remove record:</string> <string name="removerecord">Remove record:</string>
<string name="danar_stats">DanaR Stats</string> <string name="danar_stats">DanaR 통계</string>
<string name="danar_stats_cumulative_tdd">Cumulative TDD</string> <string name="danar_stats_cumulative_tdd">누적 일총량</string>
<string name="danar_stats_expweight">Exponentially Weighted TDD</string> <string name="danar_stats_expweight">지수가중 일총량</string>
<string name="danar_stats_basalrate">Basal</string> <string name="danar_stats_basalrate">기초주입</string>
<string name="danar_stats_bolus">Bolus</string> <string name="danar_stats_bolus">식사주입</string>
<string name="danar_stats_tdd">TDD</string> <string name="danar_stats_tdd">일총량</string>
<string name="danar_stats_date">Date</string> <string name="danar_stats_date">날짜</string>
<string name="danar_stats_ratio">Ratio</string> <string name="danar_stats_ratio">비율</string>
<string name="danar_stats_amount_days"># Days</string> <string name="danar_stats_amount_days">#</string>
<string name="danar_stats_weight">Weight</string> <string name="danar_stats_weight">가중</string>
<string name="danar_stats_warning_Message">Possibly inaccurate if using boluses for priming/filling!</string> <string name="danar_stats_warning_Message">Possibly inaccurate if using boluses for priming/filling!</string>
<string name="danar_stats_olddata_Message">Old Data Please Press "RELOAD"</string> <string name="danar_stats_olddata_Message">Old Data Please Press "RELOAD"</string>
<string name="danar_stats_tbb">Total Base Basal</string> <string name="danar_stats_tbb">총기초량</string>
<string name="danar_stats_tbb2">TBB * 2</string> <string name="danar_stats_tbb2">총기초량 * 2</string>
<string name="initializing">Initializing ...</string> <string name="initializing">초기화중 ...</string>
<string name="actions_shortname">ACT</string> <string name="actions_shortname">ACT</string>
<string name="configbuilder_shortname">CONF</string> <string name="configbuilder_shortname">CONF</string>
<string name="loop_shortname">LOOP</string> <string name="loop_shortname">LOOP</string>
@ -430,7 +440,6 @@
<string name="always_use_shortavg">Always use short average delta instead of simple delta</string> <string name="always_use_shortavg">Always use short average delta instead of simple delta</string>
<string name="always_use_shortavg_summary">Useful when data from unfiltered sources like xDrip gets noisy.</string> <string name="always_use_shortavg_summary">Useful when data from unfiltered sources like xDrip gets noisy.</string>
<string name="advancedsettings_title">고급 설정</string> <string name="advancedsettings_title">고급 설정</string>
<string name="virtualpump_firmware_label">Firmware:</string>
<string name="danar_model" formatted="false">Model: %02X Protocol: %02X Code: %02X</string> <string name="danar_model" formatted="false">Model: %02X Protocol: %02X Code: %02X</string>
<string name="profile">프로파일</string> <string name="profile">프로파일</string>
<string name="openapsama_max_daily_safety_multiplier_summary">Default value: 3\nThis is a key OpenAPS safety cap. What this does is limit your basals to be 3x (in this people) your biggest basal rate. You likely will not need to change this, but you should be aware thats what is discussed about “3x max daily; 4x current” for safety caps.</string> <string name="openapsama_max_daily_safety_multiplier_summary">Default value: 3\nThis is a key OpenAPS safety cap. What this does is limit your basals to be 3x (in this people) your biggest basal rate. You likely will not need to change this, but you should be aware thats what is discussed about “3x max daily; 4x current” for safety caps.</string>
@ -449,7 +458,7 @@
<string name="smscommunicator_invalidphonennumber">SMS폰번호가 유효하지 않습니다</string> <string name="smscommunicator_invalidphonennumber">SMS폰번호가 유효하지 않습니다</string>
<string name="copy_to_clipboard">Copy To Clipboard</string> <string name="copy_to_clipboard">Copy To Clipboard</string>
<string name="copied_to_clipboard">Copied to clipboard</string> <string name="copied_to_clipboard">Copied to clipboard</string>
<string name="nav_show_logcat">Show log</string> <string name="nav_show_logcat">로그 보기</string>
<string name="overview_calibration">보정</string> <string name="overview_calibration">보정</string>
<string name="overview_calibration_bg_label">혈당 보정</string> <string name="overview_calibration_bg_label">혈당 보정</string>
<string name="send_calibration" formatted="false">보정값 %.1f을 xDrip에 전송하시겠습니까?</string> <string name="send_calibration" formatted="false">보정값 %.1f을 xDrip에 전송하시겠습니까?</string>
@ -458,7 +467,7 @@
<string name="smscommunicator_remotecalibrationnotallowed">원격보정이 허용되지 않았습니다</string> <string name="smscommunicator_remotecalibrationnotallowed">원격보정이 허용되지 않았습니다</string>
<string name="smscommunicator_calibrationsent">보정 전송됨. xDrip에서 수신이 되도록 설정되어 있어야 합니다.</string> <string name="smscommunicator_calibrationsent">보정 전송됨. xDrip에서 수신이 되도록 설정되어 있어야 합니다.</string>
<string name="smscommunicator_calibrationfailed">xDrip에서 보정을 받지 못합니다.</string> <string name="smscommunicator_calibrationfailed">xDrip에서 보정을 받지 못합니다.</string>
<string name="dont_show_again">Don\'t show again</string> <string name="dont_show_again">다시 보지 않기</string>
<string name="pumpsuspendedclicktorefresh">펌프 일시중지. 상태를 새로고치려면 클릭하세요</string> <string name="pumpsuspendedclicktorefresh">펌프 일시중지. 상태를 새로고치려면 클릭하세요</string>
<string name="pumpsuspended">펌프 일시중지됨</string> <string name="pumpsuspended">펌프 일시중지됨</string>
<string name="gettingpumpstatus">펌프 상태 가져오는중</string> <string name="gettingpumpstatus">펌프 상태 가져오는중</string>
@ -496,17 +505,149 @@
<string name="status">Status:</string> <string name="status">Status:</string>
<string name="paused">Paused</string> <string name="paused">Paused</string>
<string name="clearlog">Clear log</string> <string name="clearlog">Clear log</string>
<string name="nowritepermission">NSCLIENT이 쓰기 권한이 없습니다. 잘못된 API secret?</string> <string name="nowritepermission">NSCLIENT이 쓰기 권한이 없습니다. 잘못된 API secret인지 확인해보세요</string>
<string name="wear_settings">웨어 설정</string> <string name="wear_settings">웨어 설정</string>
<string name="wear_detailedIOB_title">IOB 자세하게 보여주기</string> <string name="wear_detailedIOB_title">IOB 자세하게 보여주기</string>
<string name="wear_detailedIOB_summary">워치페이스에 IOB를 식사주입IOB와 기초주입IOB로 나누어서 보여줍니다.</string> <string name="wear_detailedIOB_summary">워치페이스에 IOB를 식사주입IOB와 기초주입IOB로 나누어서 보여줍니다.</string>
<string name="nosuccess">not successful - please check phone</string> <string name="nosuccess">not successful - please check phone</string>
<string name="notavailable">Not available</string> <string name="notavailable">알수없음</string>
<string name="patientage">나이</string> <string name="patientage">나이</string>
<string name="child">어린이</string> <string name="child">어린이</string>
<string name="teenage">청소년</string> <string name="teenage">청소년</string>
<string name="adult">성인</string> <string name="adult">성인</string>
<string name="patientage_summary">안전제한을 설정하기 위해 당뇨인의 나이를 선택하세요</string> <string name="patientage_summary">안전제한을 설정하기 위해 당뇨인의 나이를 선택하세요</string>
<string name="it_lang">Italian</string> <string name="Glimp">Glimp</string>
<string name="batteryoptimalizationerror">Device does not appear to support battery optimization whitelisting!</string>
<string name="pleaseallowpermission">권한을 허용하세요.</string>
<string name="needwhitelisting">%s needs battery optimalization whitelisting for proper performance</string>
<string name="loopsuspended">Loop 일시중지</string>
<string name="loopsuspendedfor" formatted="false">일시중지중 (%d분)</string>
<string name="loopsuperbolusfor" formatted="false">Superbolus (%d분)</string>
<string name="loopmenu">Loop 메뉴</string>
<string name="suspendloopfor1h">1시간동안 Loop 일시중지</string>
<string name="suspendloopfor2h">2시간동안 Loop 일시중지</string>
<string name="suspendloopfor3h">3시간동안 Loop 일시중지</string>
<string name="suspendloopfor10h">10시간동안 Loop 일시중지</string>
<string name="disconnectpumpfor30m">30분동안 펌프 일시중지</string>
<string name="disconnectpumpfor1h">1시간동안 펌프 일시중지</string>
<string name="disconnectpumpfor2h">2시간동안 펌프 일시중지</string>
<string name="disconnectpumpfor3h">3시간동안 펌프 일시중지</string>
<string name="disconnectpumpfor10h">10시간동안 펌프 일시중지</string>
<string name="resume">재시작</string>
<string name="smscommunicator_wrongduration">기간이 잘못되었습니다.</string>
<string name="smscommunicator_loopsuspended">Loop 일시중지됨</string>
<string name="smscommunicator_loopresumed">Loop 재시작됨</string>
<string name="treatments_wizard_bgtrend_label">15분 추이</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="superbolus">Superbolus</string>
<string name="ns_logappstartedevent">앱시작을 NS에 기록하기</string>
<string name="restartingapp">설정을 적용하기위해 앱을 종료합니다.</string>
<string name="danarv2pump">DanaRv2</string>
<string name="configbuilder_insulin">인슐린</string>
<string name="fastactinginsulin">Fast Acting Insulin</string>
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="insulin_shortname">INS</string>
<string name="fastactinginsulinprolonged">Fast Acting Insulin Prolonged</string>
<string name="enablesuperbolus">Enable superbolus in wizard</string>
<string name="enablesuperbolus_summary">Enable superbolus functionality in wizard. Do not enable until you learn what it really does. IT MAY CAUSE INSULIN OVERDOSE IF USED BLINDLY!</string>
<string name="iob">IOB</string>
<string name="cob">COB</string>
<string name="predictionshortlabel">PRE</string>
<string name="basalshortlabel">BAS</string>
<string name="virtualpump_firmware_label">펌웨어</string>
<string name="virtualpump_lastconnection_label">최근 연결</string>
<string name="danar_bluetooth_status">블루투스 상태</string>
<string name="nav_about">About</string>
<string name="smscommunicator_missingsmspermission">Missing SMS permission</string>
<string name="dev">DEV</string>
<string name="xdripstatus_settings">xDrip 상태(워치)</string>
<string name="xdripstatus">xDrip 상태표시라인(워치)</string>
<string name="xdripstatus_shortname">xds</string>
<string name="wear_showbgi_title">BGI 보기</string>
<string name="wear_showbgi_summary">BGI를 상태라인에 추가하기</string>
<string name="ns_noupload">NS에 업로드하지 않기</string>
<string name="ns_noupload_summary">NS로 보낼 모든 데이터가 버려집니다. AAPS는 NS에 연결되어 있지만 NS에는 변화가 없을것입니다.</string>
<string name="basal_step">기초주입 최소단위</string>
<string name="bolus_step">식사주입 최소단위</string>
<string name="extendedbolus">확장식사</string>
<string name="temptarget">임시목표</string>
<string name="overview_extendedbolus_cancel_button">확장 식사주입 취소</string>
<string name="careportal_sensorage_label">센서 나이</string>
<string name="careportal_canulaage_label">캐뉼라 나이</string>
<string name="careportal_insulinage_label">인슐린 나이</string>
<string name="hours">시간</string>
<string name="overview_newtempbasal_basaltype_label">기초주입 종류</string>
<string name="isfmissing">프로파일에서 ISF가 누락되었습니다. 가본값을 사용합니다.</string>
<string name="icmissing">프로파일에서 IC가 누락되었습니다. 가본값을 사용합니다.</string>
<string name="basalmissing">프로파일에서 기초주입량이 누락되었습니다. 가본값을 사용합니다.</string>
<string name="targetmissing">프로파일에서 목표범위가 누락되었습니다. 가본값을 사용합니다.</string>
<string name="invalidprofile">프로파일이 잘못되었습니다 !!!</string>
<string name="profileswitch">프로파일변경</string>
<string name="careportal_pbage_label">펌프 배터리 나이</string>
<string name="careportal_pumpbatterychange">펌프 배터리 교체</string>
<string name="ns_alarmoptions">알람 옵션</string>
<string name="nsalarm_urgenthigh">Urgent high</string>
<string name="nsalarm_high">High</string>
<string name="nsalarm_low">Low</string>
<string name="nsalarm_urgentlow">Urgent low</string>
<string name="nsalarm_summary" formatted="false">Currently set to %f</string>
<string name="nsalarm_staledata">Stale data</string>
<string name="nsalarm_urgentstaledata">Urgent stale data</string>
<string name="nsalarm_staledatavalue_label">Stale data threshold [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Urgent stale data threshold [min]</string>
<string name="openapsama_autosens_period">Interval for autosens [h]</string>
<string name="openapsama_autosens_period_summary">Amount of hours in the past for sensitivity detection (carbs absorption time is excluded)</string>
<string name="ratio_short">SEN</string>
<string name="do_not_track_profile_switch">Ignore profile switch events</string>
<string name="do_not_track_profile_switch_summary">All profile switch events are ignored and active profile is always used</string>
<string name="pump">Pump</string>
<string name="openaps">OpenAPS</string>
<string name="device">Device</string>
<string name="uploader">Uploader</string>
<string name="configbuilder_sensitivity">민감도 감지</string>
<string name="sensitivity_shortname">SENS</string>
<string name="sensitivityoref0">Sensitivity Oref0</string>
<string name="sensitivityaaps">Sensitivity AAPS</string>
<string name="absorptionsettings_title">흡수 설정</string>
<string name="absorption_maxtime_title">Meal max absorption time [h]</string>
<string name="absorption_maxtime_summary">Time in hours where is expected all carbs from meal will be absorbed</string>
<string name="danar_visualizeextendedaspercentage_title">확장식사주입을 %로 표시하기</string>
<string name="careportal_sensorage_label_short">SAGE</string>
<string name="careportal_insulinage_label_short">IAGE</string>
<string name="careportal_canulaage_label_short">CAGE</string>
<string name="careportal_pbage_label_short">PBAGE</string>
<string name="openaps_short">OAPS</string>
<string name="uploader_short">UPLD</string>
<string name="basal_short">BAS</string>
<string name="virtualpump_extendedbolus_label_short">EXT</string>
<string name="lock_screen">화면 잠금</string>
<string name="lock_screen_short">잠금</string>
<string name="sensitivity_warning">By turning on Autosense feature remember to enter all eated carbs. Otherwise carbs deviations will be identified wrong as sensitivity change !!</string>
<string name="sensitivityweightedaverage">Sensitivity WeightedAverage</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Cancel</string>
<string name="cpp_sync_setting_missing">needs to be activated to send values to the pump!</string>
<string name="cpp_notloadedplugins">Not all profiles loaded!</string>
<string name="cpp_valuesnotstored">Values not stored!</string>
<string name="wear_overviewnotifications">개요 알림</string>
<string name="wear_overviewnotifications_summary">개요 알림을 웨어확인메세지로 전달합니다.</string>
<string name="ns_localbroadcasts">(xDrip 같은) 다른 앱으로 브로드캐스트를 활성화합니다.</string>
<string name="ns_localbroadcasts_title">Local Broadcasts 활성화하기</string>
<string name="careportal_activity_label">활동 &amp; 조절</string>
<string name="careportal_carbsandbolus_label">탄수화물 &amp; 식사주입</string>
<string name="careportal_cgm_label">CGM &amp; OPENAPS</string>
<string name="careportal_pump_label">펌프</string>
<string name="overview_newtempbasal_basalabsolute">Basal value [U/h]</string>
<string name="careportal_newnstreatment_duration_min_label">Duration [min]</string>
<string name="insulin_oref_peak">IOB Curve Peak Time</string>
<string name="insulin_peak_time">Peak Time [min]</string>
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
<string name="dia_too_short" formatted="false">"DIA of %s too short - using %s instead!"</string>
<string name="activate_profile">ACTIVATE PROFILE</string>
<string name="date">Date</string>
<string name="invalid">INVALID</string>
<string name="app_name">AndroidAPS</string> <string name="app_name">AndroidAPS</string>
</resources> </resources>

View file

@ -73,7 +73,7 @@
<string name="careportal_pumpsitechange">Pump Kanyl Byte</string> <string name="careportal_pumpsitechange">Pump Kanyl Byte</string>
<string name="careportal_question">Fråga</string> <string name="careportal_question">Fråga</string>
<string name="careportal_shortname">CP</string> <string name="careportal_shortname">CP</string>
<string name="careportal_snackbolus">Bolus för Mellis</string> <string name="careportal_snackbolus">Snack Bolus</string>
<string name="careportal_tempbasalend">Temp Basal Slut</string> <string name="careportal_tempbasalend">Temp Basal Slut</string>
<string name="careportal_tempbasalstart">Temp Basal Start</string> <string name="careportal_tempbasalstart">Temp Basal Start</string>
<string name="careportal_temporarytarget">Temp Mål BG</string> <string name="careportal_temporarytarget">Temp Mål BG</string>
@ -142,7 +142,7 @@
<string name="danar_stats_date">Datum</string> <string name="danar_stats_date">Datum</string>
<string name="danar_stats_expweight">Exponentiellt viktad TDD</string> <string name="danar_stats_expweight">Exponentiellt viktad TDD</string>
<string name="danar_stats_olddata_Message">Gammal Data Vg tryck \"Ladda om\"</string> <string name="danar_stats_olddata_Message">Gammal Data Vg tryck \"Ladda om\"</string>
<string name="danar_stats_ratio">Ratio</string> <string name="danar_stats_ratio">Kvot</string>
<string name="danar_useextended_title">Använd förlängd bolus med >200%</string> <string name="danar_useextended_title">Använd förlängd bolus med >200%</string>
<string name="danar_valuenotsetproperly">Värde ej korrekt angivet</string> <string name="danar_valuenotsetproperly">Värde ej korrekt angivet</string>
<string name="danar_viewprofile">Se profil</string> <string name="danar_viewprofile">Se profil</string>
@ -169,7 +169,7 @@
<string name="disconnectpumpfor2h">Frånkoppla pump i 2 h</string> <string name="disconnectpumpfor2h">Frånkoppla pump i 2 h</string>
<string name="disconnectpumpfor30m">Frånkoppla pump i 30 min</string> <string name="disconnectpumpfor30m">Frånkoppla pump i 30 min</string>
<string name="disconnectpumpfor3h">Frånkoppla pump i 3 h</string> <string name="disconnectpumpfor3h">Frånkoppla pump i 3 h</string>
<string name="dismiss">AVBÖJ</string> <string name="dismiss">TA BORT</string>
<string name="do_not_track_profile_switch">Ignorera profilbyten</string> <string name="do_not_track_profile_switch">Ignorera profilbyten</string>
<string name="do_not_track_profile_switch_summary">Alla profilbyten ignoreras och aktiv profil används alltid</string> <string name="do_not_track_profile_switch_summary">Alla profilbyten ignoreras och aktiv profil används alltid</string>
<string name="dont_show_again">Visa inte detta igen</string> <string name="dont_show_again">Visa inte detta igen</string>
@ -329,7 +329,7 @@
<string name="units">Enheter:</string> <string name="units">Enheter:</string>
<string name="treatmentssafety_title">Säkerhet vid behandling</string> <string name="treatmentssafety_title">Säkerhet vid behandling</string>
<string name="treatmentssafety_maxcarbs_title">Max tillåtna KH (g)</string> <string name="treatmentssafety_maxcarbs_title">Max tillåtna KH (g)</string>
<string name="treatmentssafety_maxbolus_title">Max tillåten</string> <string name="treatmentssafety_maxbolus_title">Max tillåten bolus [E]</string>
<string name="treatments_wizard_unit_label">E</string> <string name="treatments_wizard_unit_label">E</string>
<string name="treatments_wizard_total_label">TOTAL</string> <string name="treatments_wizard_total_label">TOTAL</string>
<string name="treatments_wizard_correction_label">Korr</string> <string name="treatments_wizard_correction_label">Korr</string>
@ -581,5 +581,9 @@
<string name="sms_delta">Delta:</string> <string name="sms_delta">Delta:</string>
<string name="sms_iob">IOB:</string> <string name="sms_iob">IOB:</string>
<string name="sms_minago" formatted="false">%dmin sedan</string> <string name="sms_minago" formatted="false">%dmin sedan</string>
<string name="app_name">AndroidAPS</string> <string name="nsalarm_staledatavalue_label">Gammal data tröskelvärde</string>
<string name="nsalarm_urgent_staledatavalue_label">Bråttom gammal data tröskelvärde</string>
<string name="nsalarm_urgenthigh">Bråttom hög</string>
<string name="nsalarm_urgentlow">Bråttom låg</string>
<string name="nsalarm_urgentstaledata">Bråttom gammal data</string>
</resources> </resources>