Merge branch 'dev' into newconstraints
This commit is contained in:
commit
ca70cbdaec
35 changed files with 153 additions and 145 deletions
|
@ -192,7 +192,7 @@ public class DataService extends IntentService {
|
||||||
bgReading.date = bundle.getLong(Intents.EXTRA_TIMESTAMP);
|
bgReading.date = bundle.getLong(Intents.EXTRA_TIMESTAMP);
|
||||||
bgReading.raw = bundle.getDouble(Intents.EXTRA_RAW);
|
bgReading.raw = bundle.getDouble(Intents.EXTRA_RAW);
|
||||||
|
|
||||||
MainApp.getDbHelper().createIfNotExists(bgReading, "XDRIP", xDripEnabled);
|
MainApp.getDbHelper().createIfNotExists(bgReading, "XDRIP");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleNewDataFromGlimp(Intent intent) {
|
private void handleNewDataFromGlimp(Intent intent) {
|
||||||
|
@ -206,7 +206,7 @@ public class DataService extends IntentService {
|
||||||
bgReading.date = bundle.getLong("myTimestamp");
|
bgReading.date = bundle.getLong("myTimestamp");
|
||||||
bgReading.raw = 0;
|
bgReading.raw = 0;
|
||||||
|
|
||||||
MainApp.getDbHelper().createIfNotExists(bgReading, "GLIMP", glimpEnabled);
|
MainApp.getDbHelper().createIfNotExists(bgReading, "GLIMP");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleNewDataFromDexcomG5(Intent intent) {
|
private void handleNewDataFromDexcomG5(Intent intent) {
|
||||||
|
@ -229,7 +229,7 @@ public class DataService extends IntentService {
|
||||||
bgReading.direction = json.getString("m_trend");
|
bgReading.direction = json.getString("m_trend");
|
||||||
bgReading.date = json.getLong("m_time") * 1000L;
|
bgReading.date = json.getLong("m_time") * 1000L;
|
||||||
bgReading.raw = 0;
|
bgReading.raw = 0;
|
||||||
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5", dexcomG5Enabled);
|
boolean isNew = MainApp.getDbHelper().createIfNotExists(bgReading, "DexcomG5");
|
||||||
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
|
if (isNew && SP.getBoolean(R.string.key_dexcomg5_nsupload, false)) {
|
||||||
NSUpload.uploadBg(bgReading);
|
NSUpload.uploadBg(bgReading);
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ public class DataService extends IntentService {
|
||||||
bgReading.date = json_object.getLong("date");
|
bgReading.date = json_object.getLong("date");
|
||||||
bgReading.raw = json_object.getDouble("sgv");
|
bgReading.raw = json_object.getDouble("sgv");
|
||||||
|
|
||||||
MainApp.getDbHelper().createIfNotExists(bgReading, "MM640g", mm640gEnabled);
|
MainApp.getDbHelper().createIfNotExists(bgReading, "MM640g");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
log.debug("Unknown entries type: " + type);
|
log.debug("Unknown entries type: " + type);
|
||||||
|
@ -425,7 +425,7 @@ public class DataService extends IntentService {
|
||||||
JSONObject sgvJson = new JSONObject(sgvstring);
|
JSONObject sgvJson = new JSONObject(sgvstring);
|
||||||
NSSgv nsSgv = new NSSgv(sgvJson);
|
NSSgv nsSgv = new NSSgv(sgvJson);
|
||||||
BgReading bgReading = new BgReading(nsSgv);
|
BgReading bgReading = new BgReading(nsSgv);
|
||||||
MainApp.getDbHelper().createIfNotExists(bgReading, "NS", nsClientEnabled);
|
MainApp.getDbHelper().createIfNotExists(bgReading, "NS");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bundles.containsKey("sgvs")) {
|
if (bundles.containsKey("sgvs")) {
|
||||||
|
@ -435,7 +435,7 @@ public class DataService extends IntentService {
|
||||||
JSONObject sgvJson = jsonArray.getJSONObject(i);
|
JSONObject sgvJson = jsonArray.getJSONObject(i);
|
||||||
NSSgv nsSgv = new NSSgv(sgvJson);
|
NSSgv nsSgv = new NSSgv(sgvJson);
|
||||||
BgReading bgReading = new BgReading(nsSgv);
|
BgReading bgReading = new BgReading(nsSgv);
|
||||||
MainApp.getDbHelper().createIfNotExists(bgReading, "NS", nsClientEnabled);
|
MainApp.getDbHelper().createIfNotExists(bgReading, "NS");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -97,19 +97,23 @@ public class PumpEnactResult {
|
||||||
if (bolusDelivered > 0) {
|
if (bolusDelivered > 0) {
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.smb_shortname) + ": " + bolusDelivered + "U";
|
ret += "\n" + MainApp.sResources.getString(R.string.smb_shortname)
|
||||||
|
+ ": " + bolusDelivered + " " + MainApp.gs(R.string.insulin_unit_shortname);
|
||||||
} else if (isTempCancel) {
|
} else if (isTempCancel) {
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment + "\n" +
|
if (!comment.isEmpty())
|
||||||
MainApp.sResources.getString(R.string.canceltemp);
|
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
||||||
|
ret += MainApp.sResources.getString(R.string.canceltemp);
|
||||||
} else if (isPercent) {
|
} else if (isPercent) {
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
if (!comment.isEmpty())
|
||||||
|
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.duration) + ": " + duration + " min";
|
ret += "\n" + MainApp.sResources.getString(R.string.duration) + ": " + duration + " min";
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.percent) + ": " + percent + "%";
|
ret += "\n" + MainApp.sResources.getString(R.string.percent) + ": " + percent + "%";
|
||||||
} else {
|
} else {
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
ret += "\n" + MainApp.sResources.getString(R.string.enacted) + ": " + enacted;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
if (!comment.isEmpty())
|
||||||
|
ret += "\n" + MainApp.sResources.getString(R.string.comment) + ": " + comment;
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.duration) + ": " + duration + " min";
|
ret += "\n" + MainApp.sResources.getString(R.string.duration) + ": " + duration + " min";
|
||||||
ret += "\n" + MainApp.sResources.getString(R.string.absolute) + ": " + absolute + " U/h";
|
ret += "\n" + MainApp.sResources.getString(R.string.absolute) + ": " + absolute + " U/h";
|
||||||
}
|
}
|
||||||
|
@ -126,26 +130,26 @@ public class PumpEnactResult {
|
||||||
} else if (enacted) {
|
} else if (enacted) {
|
||||||
if (bolusDelivered > 0) {
|
if (bolusDelivered > 0) {
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
if (!comment.isEmpty())
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.smb_shortname) + "</b>: " + bolusDelivered + "U";
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
||||||
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.smb_shortname) + "</b>: " + bolusDelivered + " " + MainApp.gs(R.string.insulin_unit_shortname);
|
||||||
} else if (isTempCancel) {
|
} else if (isTempCancel) {
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment +
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment +
|
||||||
"<br>" + MainApp.sResources.getString(R.string.canceltemp);
|
"<br>" + MainApp.sResources.getString(R.string.canceltemp);
|
||||||
} else if (isPercent && percent != -1) {
|
} else if (isPercent && percent != -1) {
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
if (!comment.isEmpty())
|
||||||
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.duration) + "</b>: " + duration + " min";
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.duration) + "</b>: " + duration + " min";
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.percent) + "</b>: " + percent + "%";
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.percent) + "</b>: " + percent + "%";
|
||||||
} else if (absolute != -1) {
|
} else if (absolute != -1) {
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.enacted) + "</b>: " + enacted;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
if (!comment.isEmpty())
|
||||||
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.duration) + "</b>: " + duration + " min";
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.duration) + "</b>: " + duration + " min";
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.absolute) + "</b>: " + DecimalFormatter.to2Decimal(absolute) + " U/h";
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.absolute) + "</b>: " + DecimalFormatter.to2Decimal(absolute) + " U/h";
|
||||||
}
|
}
|
||||||
if (bolusDelivered > 0) {
|
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.bolus) + "</b>: " + DecimalFormatter.to2Decimal(bolusDelivered) + " U";
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
ret += "<br><b>" + MainApp.sResources.getString(R.string.comment) + "</b>: " + comment;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.support.annotation.Nullable;
|
||||||
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
|
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
|
||||||
import com.j256.ormlite.dao.CloseableIterator;
|
import com.j256.ormlite.dao.CloseableIterator;
|
||||||
import com.j256.ormlite.dao.Dao;
|
import com.j256.ormlite.dao.Dao;
|
||||||
|
import com.j256.ormlite.dao.DaoManager;
|
||||||
import com.j256.ormlite.stmt.PreparedQuery;
|
import com.j256.ormlite.stmt.PreparedQuery;
|
||||||
import com.j256.ormlite.stmt.QueryBuilder;
|
import com.j256.ormlite.stmt.QueryBuilder;
|
||||||
import com.j256.ormlite.stmt.Where;
|
import com.j256.ormlite.stmt.Where;
|
||||||
|
@ -240,7 +241,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
||||||
log.error("Unhandled exception", e);
|
log.error("Unhandled exception", e);
|
||||||
}
|
}
|
||||||
VirtualPumpPlugin.setFakingStatus(true);
|
VirtualPumpPlugin.setFakingStatus(true);
|
||||||
scheduleBgChange(null, false, false); // trigger refresh
|
scheduleBgChange(null); // trigger refresh
|
||||||
scheduleTemporaryBasalChange();
|
scheduleTemporaryBasalChange();
|
||||||
scheduleTreatmentChange(null);
|
scheduleTreatmentChange(null);
|
||||||
scheduleExtendedBolusChange();
|
scheduleExtendedBolusChange();
|
||||||
|
@ -366,14 +367,14 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
||||||
}
|
}
|
||||||
// ------------------- BgReading handling -----------------------
|
// ------------------- BgReading handling -----------------------
|
||||||
|
|
||||||
public boolean createIfNotExists(BgReading bgReading, String from, boolean isFromActiveBgSource) {
|
public boolean createIfNotExists(BgReading bgReading, String from) {
|
||||||
try {
|
try {
|
||||||
bgReading.date = roundDateToSec(bgReading.date);
|
bgReading.date = roundDateToSec(bgReading.date);
|
||||||
BgReading old = getDaoBgReadings().queryForId(bgReading.date);
|
BgReading old = getDaoBgReadings().queryForId(bgReading.date);
|
||||||
if (old == null) {
|
if (old == null) {
|
||||||
getDaoBgReadings().create(bgReading);
|
getDaoBgReadings().create(bgReading);
|
||||||
log.debug("BG: New record from: " + from + " " + bgReading.toString());
|
log.debug("BG: New record from: " + from + " " + bgReading.toString());
|
||||||
scheduleBgChange(bgReading, true, isFromActiveBgSource);
|
scheduleBgChange(bgReading);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!old.isEqual(bgReading)) {
|
if (!old.isEqual(bgReading)) {
|
||||||
|
@ -381,7 +382,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
||||||
old.copyFrom(bgReading);
|
old.copyFrom(bgReading);
|
||||||
getDaoBgReadings().update(old);
|
getDaoBgReadings().update(old);
|
||||||
log.debug("BG: Updating record from: " + from + " New data: " + old.toString());
|
log.debug("BG: Updating record from: " + from + " New data: " + old.toString());
|
||||||
scheduleBgChange(bgReading, false, isFromActiveBgSource);
|
scheduleBgChange(bgReading);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
@ -399,11 +400,11 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void scheduleBgChange(@Nullable final BgReading bgReading, boolean isNew, boolean isFromActiveBgSource) {
|
private static void scheduleBgChange(@Nullable final BgReading bgReading) {
|
||||||
class PostRunnable implements Runnable {
|
class PostRunnable implements Runnable {
|
||||||
public void run() {
|
public void run() {
|
||||||
log.debug("Firing EventNewBg");
|
log.debug("Firing EventNewBg");
|
||||||
MainApp.bus().post(new EventNewBG(bgReading, isNew, isFromActiveBgSource));
|
MainApp.bus().post(new EventNewBG(bgReading));
|
||||||
scheduledBgPost = null;
|
scheduledBgPost = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,17 +10,8 @@ import info.nightscout.androidaps.db.BgReading;
|
||||||
public class EventNewBG extends EventLoop {
|
public class EventNewBG extends EventLoop {
|
||||||
@Nullable
|
@Nullable
|
||||||
public final BgReading bgReading;
|
public final BgReading bgReading;
|
||||||
public final boolean isNew;
|
|
||||||
public final boolean isFromActiveBgSource;
|
|
||||||
|
|
||||||
/** Whether the BgReading is current (enough to use for treatment decisions). */
|
public EventNewBG(BgReading bgReading) {
|
||||||
public boolean isCurrent() {
|
|
||||||
return bgReading != null && bgReading.date + 9 * 60 * 1000 > System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventNewBG(@Nullable BgReading bgReading, boolean isNew, boolean isFromActiveBgSource) {
|
|
||||||
this.bgReading = bgReading;
|
this.bgReading = bgReading;
|
||||||
this.isNew = isNew;
|
|
||||||
this.isFromActiveBgSource = isFromActiveBgSource;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,13 +351,15 @@ public class ConfigBuilderPlugin implements PluginBase, TreatmentsInterface {
|
||||||
* expect absolute request and allow both absolute and percent response based on pump capabilities
|
* expect absolute request and allow both absolute and percent response based on pump capabilities
|
||||||
*/
|
*/
|
||||||
public void applyTBRRequest(APSResult request, Profile profile, Callback callback) {
|
public void applyTBRRequest(APSResult request, Profile profile, Callback callback) {
|
||||||
|
if (!request.tempBasalRequested) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PumpInterface pump = getActivePump();
|
PumpInterface pump = getActivePump();
|
||||||
|
|
||||||
request.rateConstraint = new Constraint<>(request.rate);
|
request.rateConstraint = new Constraint<>(request.rate);
|
||||||
request.rate = MainApp.getConstraintChecker().applyBasalConstraints(request.rateConstraint, profile).value();
|
request.rate = MainApp.getConstraintChecker().applyBasalConstraints(request.rateConstraint, profile).value();
|
||||||
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
|
|
||||||
if (!pump.isInitialized()) {
|
if (!pump.isInitialized()) {
|
||||||
log.debug("applyAPSRequest: " + MainApp.sResources.getString(R.string.pumpNotInitialized));
|
log.debug("applyAPSRequest: " + MainApp.sResources.getString(R.string.pumpNotInitialized));
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
|
@ -377,37 +379,55 @@ public class ConfigBuilderPlugin implements PluginBase, TreatmentsInterface {
|
||||||
if (Config.logCongigBuilderActions)
|
if (Config.logCongigBuilderActions)
|
||||||
log.debug("applyAPSRequest: " + request.toString());
|
log.debug("applyAPSRequest: " + request.toString());
|
||||||
|
|
||||||
if (request.tempBasalReqested) {
|
long now = System.currentTimeMillis();
|
||||||
TemporaryBasal activeTemp = getTempBasalFromHistory(now);
|
TemporaryBasal activeTemp = getTempBasalFromHistory(now);
|
||||||
if ((request.rate == 0 && request.duration == 0) || Math.abs(request.rate - pump.getBaseBasalRate()) < pump.getPumpDescription().basalStep) {
|
if ((request.rate == 0 && request.duration == 0) || Math.abs(request.rate - pump.getBaseBasalRate()) < pump.getPumpDescription().basalStep) {
|
||||||
if (activeTemp != null) {
|
if (activeTemp != null) {
|
||||||
if (Config.logCongigBuilderActions)
|
|
||||||
log.debug("applyAPSRequest: cancelTempBasal()");
|
|
||||||
getCommandQueue().cancelTempBasal(false, callback);
|
|
||||||
} else {
|
|
||||||
if (Config.logCongigBuilderActions)
|
|
||||||
log.debug("applyAPSRequest: Basal set correctly");
|
|
||||||
if (callback != null) {
|
|
||||||
callback.result(new PumpEnactResult().absolute(request.rate).duration(0).enacted(false).success(true).comment("Basal set correctly")).run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (activeTemp != null
|
|
||||||
&& activeTemp.getPlannedRemainingMinutes() > 5
|
|
||||||
&& Math.abs(request.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < pump.getPumpDescription().basalStep) {
|
|
||||||
if (Config.logCongigBuilderActions)
|
if (Config.logCongigBuilderActions)
|
||||||
log.debug("applyAPSRequest: Temp basal set correctly");
|
log.debug("applyAPSRequest: cancelTempBasal()");
|
||||||
if (callback != null) {
|
getCommandQueue().cancelTempBasal(false, callback);
|
||||||
callback.result(new PumpEnactResult().absolute(activeTemp.tempBasalConvertedToAbsolute(now, profile)).duration(activeTemp.getPlannedRemainingMinutes()).enacted(false).success(true).comment("Temp basal set correctly")).run();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (Config.logCongigBuilderActions)
|
if (Config.logCongigBuilderActions)
|
||||||
log.debug("applyAPSRequest: setTempBasalAbsolute()");
|
log.debug("applyAPSRequest: Basal set correctly");
|
||||||
getCommandQueue().tempBasalAbsolute(request.rate, request.duration, false, profile, callback);
|
if (callback != null) {
|
||||||
|
callback.result(new PumpEnactResult().absolute(request.rate).duration(0)
|
||||||
|
.enacted(false).success(true).comment(MainApp.gs(R.string.basal_set_correctly))).run();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if (activeTemp != null
|
||||||
|
&& activeTemp.getPlannedRemainingMinutes() > 5
|
||||||
|
&& request.duration - activeTemp.getPlannedRemainingMinutes() < 30
|
||||||
|
&& Math.abs(request.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < pump.getPumpDescription().basalStep) {
|
||||||
|
if (Config.logCongigBuilderActions)
|
||||||
|
log.debug("applyAPSRequest: Temp basal set correctly");
|
||||||
|
if (callback != null) {
|
||||||
|
callback.result(new PumpEnactResult().absolute(activeTemp.tempBasalConvertedToAbsolute(now, profile))
|
||||||
|
.enacted(false).success(true).duration(activeTemp.getPlannedRemainingMinutes())
|
||||||
|
.comment(MainApp.gs(R.string.let_temp_basal_run))).run();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (Config.logCongigBuilderActions)
|
||||||
|
log.debug("applyAPSRequest: setTempBasalAbsolute()");
|
||||||
|
getCommandQueue().tempBasalAbsolute(request.rate, request.duration, false, profile, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applySMBRequest(APSResult request, Callback callback) {
|
public void applySMBRequest(APSResult request, Callback callback) {
|
||||||
|
if (!request.bolusRequested) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
long lastBolusTime = getLastBolusTime();
|
||||||
|
if (lastBolusTime != 0 && lastBolusTime + 3 * 60 * 1000 > System.currentTimeMillis()) {
|
||||||
|
log.debug("SMB requested but still in 3 min interval");
|
||||||
|
if (callback != null) {
|
||||||
|
callback.result(new PumpEnactResult()
|
||||||
|
.comment(MainApp.gs(R.string.smb_frequency_exceeded))
|
||||||
|
.enacted(false).success(false)).run();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PumpInterface pump = getActivePump();
|
PumpInterface pump = getActivePump();
|
||||||
|
|
||||||
if (!pump.isInitialized()) {
|
if (!pump.isInitialized()) {
|
||||||
|
@ -429,20 +449,16 @@ public class ConfigBuilderPlugin implements PluginBase, TreatmentsInterface {
|
||||||
if (Config.logCongigBuilderActions)
|
if (Config.logCongigBuilderActions)
|
||||||
log.debug("applySMBRequest: " + request.toString());
|
log.debug("applySMBRequest: " + request.toString());
|
||||||
|
|
||||||
if (request.bolusRequested) {
|
// deliver SMB
|
||||||
long lastBolusTime = getLastBolusTime();
|
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
|
||||||
if (lastBolusTime != 0 && lastBolusTime + 3 * 60 * 1000 > System.currentTimeMillis()) {
|
detailedBolusInfo.eventType = CareportalEvent.CORRECTIONBOLUS;
|
||||||
log.debug("SMB requsted but still in 3 min interval");
|
detailedBolusInfo.insulin = request.smb;
|
||||||
} else {
|
detailedBolusInfo.isSMB = true;
|
||||||
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
|
detailedBolusInfo.source = Source.USER;
|
||||||
detailedBolusInfo.eventType = CareportalEvent.CORRECTIONBOLUS;
|
detailedBolusInfo.deliverAt = request.deliverAt;
|
||||||
detailedBolusInfo.insulin = request.smb;
|
if (Config.logCongigBuilderActions)
|
||||||
detailedBolusInfo.isSMB = true;
|
log.debug("applyAPSRequest: bolus()");
|
||||||
detailedBolusInfo.source = Source.USER;
|
getCommandQueue().bolus(detailedBolusInfo, callback);
|
||||||
detailedBolusInfo.deliverAt = request.deliverAt;
|
|
||||||
getCommandQueue().bolus(detailedBolusInfo, callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ****** Treatments interface *****
|
// ****** Treatments interface *****
|
||||||
|
|
|
@ -531,8 +531,6 @@ public class IobCobCalculatorPlugin implements PluginBase {
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onEventNewBG(EventNewBG ev) {
|
public void onEventNewBG(EventNewBG ev) {
|
||||||
if (!ev.isFromActiveBgSource)
|
|
||||||
return;
|
|
||||||
if (this != getPlugin()) {
|
if (this != getPlugin()) {
|
||||||
log.debug("Ignoring event for non default instance");
|
log.debug("Ignoring event for non default instance");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class APSResult {
|
||||||
public String reason;
|
public String reason;
|
||||||
public double rate;
|
public double rate;
|
||||||
public int duration;
|
public int duration;
|
||||||
public boolean tempBasalReqested = false;
|
public boolean tempBasalRequested = false;
|
||||||
public boolean bolusRequested = false;
|
public boolean bolusRequested = false;
|
||||||
public IobTotal iob;
|
public IobTotal iob;
|
||||||
public JSONObject json = new JSONObject();
|
public JSONObject json = new JSONObject();
|
||||||
|
@ -102,7 +102,7 @@ public class APSResult {
|
||||||
newResult.reason = reason;
|
newResult.reason = reason;
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
newResult.tempBasalReqested = tempBasalReqested;
|
newResult.tempBasalRequested = tempBasalRequested;
|
||||||
newResult.bolusRequested = bolusRequested;
|
newResult.bolusRequested = bolusRequested;
|
||||||
newResult.iob = iob;
|
newResult.iob = iob;
|
||||||
newResult.json = json;
|
newResult.json = json;
|
||||||
|
@ -226,6 +226,6 @@ public class APSResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isChangeRequested() {
|
public boolean isChangeRequested() {
|
||||||
return tempBasalReqested || bolusRequested;
|
return tempBasalRequested || bolusRequested;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,12 +159,8 @@ public class LoopPlugin implements PluginBase {
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventAutosensCalculationFinished ev) {
|
public void onStatusEvent(final EventAutosensCalculationFinished ev) {
|
||||||
if (!(ev.cause instanceof EventNewBG))
|
if (ev.cause instanceof EventNewBG) {
|
||||||
return;
|
invoke(ev.getClass().getSimpleName() + "(" + ev.cause.getClass().getSimpleName() + ")", true);
|
||||||
|
|
||||||
EventNewBG bgEv = (EventNewBG) ev.cause;
|
|
||||||
if (bgEv.isNew && bgEv.isFromActiveBgSource && bgEv.isCurrent()) {
|
|
||||||
invoke("New BG", true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +333,10 @@ public class LoopPlugin implements PluginBase {
|
||||||
if (result.isChangeRequested()) {
|
if (result.isChangeRequested()) {
|
||||||
final PumpEnactResult waiting = new PumpEnactResult();
|
final PumpEnactResult waiting = new PumpEnactResult();
|
||||||
waiting.queued = true;
|
waiting.queued = true;
|
||||||
lastRun.tbrSetByPump = waiting;
|
if (resultAfterConstraints.tempBasalRequested)
|
||||||
|
lastRun.tbrSetByPump = waiting;
|
||||||
|
if (resultAfterConstraints.bolusRequested)
|
||||||
|
lastRun.smbSetByPump = waiting;
|
||||||
MainApp.bus().post(new EventLoopUpdateGui());
|
MainApp.bus().post(new EventLoopUpdateGui());
|
||||||
FabricPrivacy.getInstance().logCustom(new CustomEvent("APSRequest"));
|
FabricPrivacy.getInstance().logCustom(new CustomEvent("APSRequest"));
|
||||||
MainApp.getConfigBuilder().applyTBRRequest(resultAfterConstraints, profile, new Callback() {
|
MainApp.getConfigBuilder().applyTBRRequest(resultAfterConstraints, profile, new Callback() {
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class DetermineBasalResultAMA extends APSResult {
|
||||||
json = j;
|
json = j;
|
||||||
if (result.containsKey("error")) {
|
if (result.containsKey("error")) {
|
||||||
reason = result.get("error").toString();
|
reason = result.get("error").toString();
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
rate = -1;
|
rate = -1;
|
||||||
duration = -1;
|
duration = -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -32,17 +32,17 @@ public class DetermineBasalResultAMA extends APSResult {
|
||||||
if (result.containsKey("rate")) {
|
if (result.containsKey("rate")) {
|
||||||
rate = (Double) result.get("rate");
|
rate = (Double) result.get("rate");
|
||||||
if (rate < 0d) rate = 0d;
|
if (rate < 0d) rate = 0d;
|
||||||
tempBasalReqested = true;
|
tempBasalRequested = true;
|
||||||
} else {
|
} else {
|
||||||
rate = -1;
|
rate = -1;
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
if (result.containsKey("duration")) {
|
if (result.containsKey("duration")) {
|
||||||
duration = ((Double) result.get("duration")).intValue();
|
duration = ((Double) result.get("duration")).intValue();
|
||||||
//changeRequested as above
|
//changeRequested as above
|
||||||
} else {
|
} else {
|
||||||
duration = -1;
|
duration = -1;
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bolusRequested = false;
|
bolusRequested = false;
|
||||||
|
@ -58,7 +58,7 @@ public class DetermineBasalResultAMA extends APSResult {
|
||||||
newResult.reason = reason;
|
newResult.reason = reason;
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
newResult.tempBasalReqested = tempBasalReqested;
|
newResult.tempBasalRequested = tempBasalRequested;
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
|
||||||
Profiler.log(log, "AMA calculation", start);
|
Profiler.log(log, "AMA calculation", start);
|
||||||
// Fix bug determine basal
|
// Fix bug determine basal
|
||||||
if (determineBasalResultAMA.rate == 0d && determineBasalResultAMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
if (determineBasalResultAMA.rate == 0d && determineBasalResultAMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
||||||
determineBasalResultAMA.tempBasalReqested = false;
|
determineBasalResultAMA.tempBasalRequested = false;
|
||||||
// limit requests on openloop mode
|
// limit requests on openloop mode
|
||||||
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
|
@ -254,9 +254,9 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
|
||||||
if (activeTemp != null && determineBasalResultAMA.rate == 0 && determineBasalResultAMA.duration == 0) {
|
if (activeTemp != null && determineBasalResultAMA.rate == 0 && determineBasalResultAMA.duration == 0) {
|
||||||
// going to cancel
|
// going to cancel
|
||||||
} else if (activeTemp != null && Math.abs(determineBasalResultAMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
} else if (activeTemp != null && Math.abs(determineBasalResultAMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
||||||
determineBasalResultAMA.tempBasalReqested = false;
|
determineBasalResultAMA.tempBasalRequested = false;
|
||||||
} else if (activeTemp == null && Math.abs(determineBasalResultAMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
} else if (activeTemp == null && Math.abs(determineBasalResultAMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
||||||
determineBasalResultAMA.tempBasalReqested = false;
|
determineBasalResultAMA.tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
determineBasalResultAMA.iob = iobArray[0];
|
determineBasalResultAMA.iob = iobArray[0];
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class DetermineBasalResultMA extends APSResult {
|
||||||
json = j;
|
json = j;
|
||||||
if (result.containsKey("error")) {
|
if (result.containsKey("error")) {
|
||||||
reason = (String) result.get("error");
|
reason = (String) result.get("error");
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
rate = -1;
|
rate = -1;
|
||||||
duration = -1;
|
duration = -1;
|
||||||
mealAssist = "";
|
mealAssist = "";
|
||||||
|
@ -31,17 +31,17 @@ public class DetermineBasalResultMA extends APSResult {
|
||||||
if (result.containsKey("rate")) {
|
if (result.containsKey("rate")) {
|
||||||
rate = (Double) result.get("rate");
|
rate = (Double) result.get("rate");
|
||||||
if (rate < 0d) rate = 0d;
|
if (rate < 0d) rate = 0d;
|
||||||
tempBasalReqested = true;
|
tempBasalRequested = true;
|
||||||
} else {
|
} else {
|
||||||
rate = -1;
|
rate = -1;
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
if (result.containsKey("duration")) {
|
if (result.containsKey("duration")) {
|
||||||
duration = ((Double) result.get("duration")).intValue();
|
duration = ((Double) result.get("duration")).intValue();
|
||||||
//changeRequested as above
|
//changeRequested as above
|
||||||
} else {
|
} else {
|
||||||
duration = -1;
|
duration = -1;
|
||||||
tempBasalReqested = false;
|
tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
if (result.containsKey("mealAssist")) {
|
if (result.containsKey("mealAssist")) {
|
||||||
mealAssist = result.get("mealAssist").toString();
|
mealAssist = result.get("mealAssist").toString();
|
||||||
|
@ -58,10 +58,10 @@ public class DetermineBasalResultMA extends APSResult {
|
||||||
newResult.reason = new String(reason);
|
newResult.reason = new String(reason);
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
newResult.tempBasalReqested = isChangeRequested();
|
newResult.tempBasalRequested = isChangeRequested();
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
newResult.tempBasalReqested = isChangeRequested();
|
newResult.tempBasalRequested = isChangeRequested();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
newResult.json = new JSONObject(json.toString());
|
newResult.json = new JSONObject(json.toString());
|
||||||
|
|
|
@ -234,16 +234,16 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
|
||||||
DetermineBasalResultMA determineBasalResultMA = determineBasalAdapterMAJS.invoke();
|
DetermineBasalResultMA determineBasalResultMA = determineBasalAdapterMAJS.invoke();
|
||||||
// Fix bug determinef basal
|
// Fix bug determinef basal
|
||||||
if (determineBasalResultMA.rate == 0d && determineBasalResultMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
if (determineBasalResultMA.rate == 0d && determineBasalResultMA.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
||||||
determineBasalResultMA.tempBasalReqested = false;
|
determineBasalResultMA.tempBasalRequested = false;
|
||||||
// limit requests on openloop mode
|
// limit requests on openloop mode
|
||||||
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
||||||
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
|
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
|
||||||
if (activeTemp != null && determineBasalResultMA.rate == 0 && determineBasalResultMA.duration == 0) {
|
if (activeTemp != null && determineBasalResultMA.rate == 0 && determineBasalResultMA.duration == 0) {
|
||||||
// going to cancel
|
// going to cancel
|
||||||
} else if (activeTemp != null && Math.abs(determineBasalResultMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
} else if (activeTemp != null && Math.abs(determineBasalResultMA.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
||||||
determineBasalResultMA.tempBasalReqested = false;
|
determineBasalResultMA.tempBasalRequested = false;
|
||||||
} else if (activeTemp == null && Math.abs(determineBasalResultMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
} else if (activeTemp == null && Math.abs(determineBasalResultMA.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
||||||
determineBasalResultMA.tempBasalReqested = false;
|
determineBasalResultMA.tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
determineBasalResultMA.iob = iobTotal;
|
determineBasalResultMA.iob = iobTotal;
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class DetermineBasalResultSMB extends APSResult {
|
||||||
if (result.has("carbsReq")) carbsReq = result.getDouble("carbsReq");
|
if (result.has("carbsReq")) carbsReq = result.getDouble("carbsReq");
|
||||||
|
|
||||||
if (result.has("rate") && result.has("duration")) {
|
if (result.has("rate") && result.has("duration")) {
|
||||||
tempBasalReqested = true;
|
tempBasalRequested = true;
|
||||||
rate = result.getDouble("rate");
|
rate = result.getDouble("rate");
|
||||||
if (rate < 0d) rate = 0d;
|
if (rate < 0d) rate = 0d;
|
||||||
duration = result.getInt("duration");
|
duration = result.getInt("duration");
|
||||||
|
@ -74,7 +74,7 @@ public class DetermineBasalResultSMB extends APSResult {
|
||||||
newResult.reason = reason;
|
newResult.reason = reason;
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
newResult.tempBasalReqested = tempBasalReqested;
|
newResult.tempBasalRequested = tempBasalRequested;
|
||||||
newResult.bolusRequested = bolusRequested;
|
newResult.bolusRequested = bolusRequested;
|
||||||
newResult.rate = rate;
|
newResult.rate = rate;
|
||||||
newResult.duration = duration;
|
newResult.duration = duration;
|
||||||
|
|
|
@ -251,16 +251,16 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface {
|
||||||
// TODO still needed with oref1?
|
// TODO still needed with oref1?
|
||||||
// Fix bug determine basal
|
// Fix bug determine basal
|
||||||
if (determineBasalResultSMB.rate == 0d && determineBasalResultSMB.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
if (determineBasalResultSMB.rate == 0d && determineBasalResultSMB.duration == 0 && !MainApp.getConfigBuilder().isTempBasalInProgress())
|
||||||
determineBasalResultSMB.tempBasalReqested = false;
|
determineBasalResultSMB.tempBasalRequested = false;
|
||||||
// limit requests on openloop mode
|
// limit requests on openloop mode
|
||||||
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
if (!MainApp.getConstraintChecker().isClosedLoopAllowed().value()) {
|
||||||
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
|
TemporaryBasal activeTemp = MainApp.getConfigBuilder().getTempBasalFromHistory(now);
|
||||||
if (activeTemp != null && determineBasalResultSMB.rate == 0 && determineBasalResultSMB.duration == 0) {
|
if (activeTemp != null && determineBasalResultSMB.rate == 0 && determineBasalResultSMB.duration == 0) {
|
||||||
// going to cancel
|
// going to cancel
|
||||||
} else if (activeTemp != null && Math.abs(determineBasalResultSMB.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
} else if (activeTemp != null && Math.abs(determineBasalResultSMB.rate - activeTemp.tempBasalConvertedToAbsolute(now, profile)) < 0.1) {
|
||||||
determineBasalResultSMB.tempBasalReqested = false;
|
determineBasalResultSMB.tempBasalRequested = false;
|
||||||
} else if (activeTemp == null && Math.abs(determineBasalResultSMB.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
} else if (activeTemp == null && Math.abs(determineBasalResultSMB.rate - ConfigBuilderPlugin.getActivePump().getBaseBasalRate()) < 0.1)
|
||||||
determineBasalResultSMB.tempBasalReqested = false;
|
determineBasalResultSMB.tempBasalRequested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
determineBasalResultSMB.iob = iobArray[0];
|
determineBasalResultSMB.iob = iobArray[0];
|
||||||
|
|
|
@ -142,16 +142,14 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventNewBG e) {
|
public void onStatusEvent(final EventNewBG e) {
|
||||||
if (e.isFromActiveBgSource && e.isNew && e.isCurrent()) {
|
Activity activity = getActivity();
|
||||||
Activity activity = getActivity();
|
if (activity != null)
|
||||||
if (activity != null)
|
activity.runOnUiThread(new Runnable() {
|
||||||
activity.runOnUiThread(new Runnable() {
|
@Override
|
||||||
@Override
|
public void run() {
|
||||||
public void run() {
|
calculateInsulin();
|
||||||
calculateInsulin();
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -255,8 +255,7 @@ public class PersistentNotificationPlugin implements PluginBase {
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventNewBG ev) {
|
public void onStatusEvent(final EventNewBG ev) {
|
||||||
if (ev.isFromActiveBgSource && ev.isNew && ev.isCurrent())
|
updateNotification();
|
||||||
updateNotification();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -233,7 +233,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis
|
||||||
// reservoir
|
// reservoir
|
||||||
int reservoirLevel = plugin.getPump().reservoirLevel;
|
int reservoirLevel = plugin.getPump().reservoirLevel;
|
||||||
if (reservoirLevel != -1) {
|
if (reservoirLevel != -1) {
|
||||||
reservoirView.setText(reservoirLevel + " " + MainApp.sResources.getString(R.string.treatments_wizard_unit_label));
|
reservoirView.setText(reservoirLevel + " " + MainApp.sResources.getString(R.string.insulin_unit_shortname));
|
||||||
} else if (ps.insulinState == PumpState.LOW) {
|
} else if (ps.insulinState == PumpState.LOW) {
|
||||||
reservoirView.setText(MainApp.gs(R.string.combo_reservoir_low));
|
reservoirView.setText(MainApp.gs(R.string.combo_reservoir_low));
|
||||||
} else if (ps.insulinState == PumpState.EMPTY) {
|
} else if (ps.insulinState == PumpState.EMPTY) {
|
||||||
|
@ -275,7 +275,7 @@ public class ComboFragment extends SubscriberFragment implements View.OnClickLis
|
||||||
if (bolus != null) {
|
if (bolus != null) {
|
||||||
long agoMsc = System.currentTimeMillis() - bolus.timestamp;
|
long agoMsc = System.currentTimeMillis() - bolus.timestamp;
|
||||||
double bolusMinAgo = agoMsc / 60d / 1000d;
|
double bolusMinAgo = agoMsc / 60d / 1000d;
|
||||||
String unit = MainApp.gs(R.string.treatments_wizard_unit_label);
|
String unit = MainApp.gs(R.string.insulin_unit_shortname);
|
||||||
String ago;
|
String ago;
|
||||||
if ((agoMsc < 60 * 1000)) {
|
if ((agoMsc < 60 * 1000)) {
|
||||||
ago = MainApp.gs(R.string.combo_pump_connected_now);
|
ago = MainApp.gs(R.string.combo_pump_connected_now);
|
||||||
|
|
|
@ -347,7 +347,7 @@ public class ComboPlugin implements PluginBase, PumpInterface, ConstraintsInterf
|
||||||
private BasalProfile convertProfileToComboProfile(Profile profile) {
|
private BasalProfile convertProfileToComboProfile(Profile profile) {
|
||||||
BasalProfile basalProfile = new BasalProfile();
|
BasalProfile basalProfile = new BasalProfile();
|
||||||
for (int i = 0; i < 24; i++) {
|
for (int i = 0; i < 24; i++) {
|
||||||
double rate = profile.getBasal(Integer.valueOf(i * 60 * 60));
|
double rate = profile.getBasalTimeFromMidnight(i * 60 * 60);
|
||||||
|
|
||||||
/*The Combo pump does hava a different granularity for basal rate:
|
/*The Combo pump does hava a different granularity for basal rate:
|
||||||
* 0.01 - if below 1U/h
|
* 0.01 - if below 1U/h
|
||||||
|
|
|
@ -182,8 +182,7 @@ public class WearPlugin implements PluginBase {
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventNewBG ev) {
|
public void onStatusEvent(final EventNewBG ev) {
|
||||||
if (ev.isFromActiveBgSource)
|
sendDataToWatch(true, true, true);
|
||||||
sendDataToWatch(true, true, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -235,8 +235,7 @@ public class StatuslinePlugin implements PluginBase {
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventNewBG ev) {
|
public void onStatusEvent(final EventNewBG ev) {
|
||||||
if (ev.isFromActiveBgSource && ev.isNew && ev.isCurrent())
|
sendStatus();
|
||||||
sendStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class HardLimits {
|
||||||
final static int ADULT = 2;
|
final static int ADULT = 2;
|
||||||
final static int RESISTANTADULT = 3;
|
final static int RESISTANTADULT = 3;
|
||||||
|
|
||||||
final static double[] MAXBOLUS = {5d, 10d, 17d, 21d};
|
final static double[] MAXBOLUS = {5d, 10d, 17d, 25d};
|
||||||
|
|
||||||
// Very Hard Limits Ranges
|
// Very Hard Limits Ranges
|
||||||
// First value is the Lowest and second value is the Highest a Limit can define
|
// First value is the Lowest and second value is the Highest a Limit can define
|
||||||
|
@ -40,7 +40,7 @@ public class HardLimits {
|
||||||
public static final double MAXISF = 720; // mgdl
|
public static final double MAXISF = 720; // mgdl
|
||||||
|
|
||||||
public static final double[] MAXIOB_AMA = {3, 5, 7, 12};
|
public static final double[] MAXIOB_AMA = {3, 5, 7, 12};
|
||||||
public static final double[] MAXIOB_SMB = {3, 7, 12, 22};
|
public static final double[] MAXIOB_SMB = {3, 7, 12, 25};
|
||||||
|
|
||||||
public static final double[] MAXBASAL = {2, 5, 10, 12};
|
public static final double[] MAXBASAL = {2, 5, 10, 12};
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
android:gravity="left"
|
android:gravity="left"
|
||||||
android:minWidth="45dp"
|
android:minWidth="45dp"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:text="@string/treatments_wizard_unit_label"
|
android:text="@string/insulin_unit_shortname"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall" />
|
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
<string name="treatments_wizard_bg_label">КЗ</string>
|
<string name="treatments_wizard_bg_label">КЗ</string>
|
||||||
<string name="treatments_wizard_carbs_label">ВХ</string>
|
<string name="treatments_wizard_carbs_label">ВХ</string>
|
||||||
<string name="treatments_wizard_correction_label">Корекция</string>
|
<string name="treatments_wizard_correction_label">Корекция</string>
|
||||||
<string name="treatments_wizard_unit_label">Ед</string>
|
<string name="insulin_unit_shortname">Ед</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">IOB от болуси</string>
|
<string name="treatments_wizard_bolusiob_label">IOB от болуси</string>
|
||||||
<string name="openapsma_run">Старт сега</string>
|
<string name="openapsma_run">Старт сега</string>
|
||||||
<string name="pump_basebasalrate_label">Базова базална стойност</string>
|
<string name="pump_basebasalrate_label">Базова базална стойност</string>
|
||||||
|
|
|
@ -139,7 +139,7 @@
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolusové IOB</string>
|
<string name="treatments_wizard_bolusiob_label">Bolusové IOB</string>
|
||||||
<string name="treatments_wizard_carbs_label">Sacharidy</string>
|
<string name="treatments_wizard_carbs_label">Sacharidy</string>
|
||||||
<string name="treatments_wizard_correction_label">Korekce</string>
|
<string name="treatments_wizard_correction_label">Korekce</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">Maximální povolený bolus [U]</string>
|
<string name="treatmentssafety_maxbolus_title">Maximální povolený bolus [U]</string>
|
||||||
<string name="treatmentssafety_maxcarbs_title">Maximální povolené sacharidy [g]</string>
|
<string name="treatmentssafety_maxcarbs_title">Maximální povolené sacharidy [g]</string>
|
||||||
<string name="treatmentssafety_title">Bezpečnost zadání ošetřeni</string>
|
<string name="treatmentssafety_title">Bezpečnost zadání ošetřeni</string>
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
<string name="treatments_iobactivitytotal_label_string">Aktives Gesamt-IOB:</string>
|
<string name="treatments_iobactivitytotal_label_string">Aktives Gesamt-IOB:</string>
|
||||||
<string name="treatments_iobtotal_label_string">Gesamt-IOB:</string>
|
<string name="treatments_iobtotal_label_string">Gesamt-IOB:</string>
|
||||||
<string name="treatments_wizard_basaliob_label">Basal-IOB</string>
|
<string name="treatments_wizard_basaliob_label">Basal-IOB</string>
|
||||||
<string name="treatments_wizard_unit_label">IE</string>
|
<string name="insulin_unit_shortname">IE</string>
|
||||||
<string name="virtualpump">Virtuelle Pumpe</string>
|
<string name="virtualpump">Virtuelle Pumpe</string>
|
||||||
<string name="pump_reservoir_label">Reservoir</string>
|
<string name="pump_reservoir_label">Reservoir</string>
|
||||||
<string name="xdrip">xDrip</string>
|
<string name="xdrip">xDrip</string>
|
||||||
|
@ -742,4 +742,6 @@
|
||||||
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Es wurde keine hohe TBR gesetzt, da nach der Berechnung Boluseinträge in der Pumpenhistorik gefunden wurden.</string>
|
<string name="combo_high_temp_rejected_due_to_pump_history_changes">Es wurde keine hohe TBR gesetzt, da nach der Berechnung Boluseinträge in der Pumpenhistorik gefunden wurden.</string>
|
||||||
<string name="combo_check_date">Der letzte Bolus liegt mehr als 24 Stunden zurück oder liegt in der Zukunft. Prüfe bitte das Datum auf der Pumpe.</string>
|
<string name="combo_check_date">Der letzte Bolus liegt mehr als 24 Stunden zurück oder liegt in der Zukunft. Prüfe bitte das Datum auf der Pumpe.</string>
|
||||||
<string name="combo_suspious_bolus_time">Zeit/Datum des abgegebenen Boluses auf der Pumpe erscheint falsch, IOB ist wahrscheinlich nicht korrekt. Bitte prüfe Zeit/Datum der Pumpe.</string>
|
<string name="combo_suspious_bolus_time">Zeit/Datum des abgegebenen Boluses auf der Pumpe erscheint falsch, IOB ist wahrscheinlich nicht korrekt. Bitte prüfe Zeit/Datum der Pumpe.</string>
|
||||||
|
<string name="combo_tbr_count">Anzahl TBRs</string>
|
||||||
|
<string name="combo_bolus_count">Anzahl Boluse</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<string name="treatments_wizard_tt_label">TT</string>
|
<string name="treatments_wizard_tt_label">TT</string>
|
||||||
<string name="treatments_wizard_carbs_label">Υδατάνθρακες</string>
|
<string name="treatments_wizard_carbs_label">Υδατάνθρακες</string>
|
||||||
<string name="treatments_wizard_correction_label">Διόρθωση</string>
|
<string name="treatments_wizard_correction_label">Διόρθωση</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
||||||
<string name="openapsma_run">Έναρξη τώρα</string>
|
<string name="openapsma_run">Έναρξη τώρα</string>
|
||||||
<string name="vitualpump_label">ΕΙΚΟΝΙΚΗ ΑΝΤΛΙΑ</string>
|
<string name="vitualpump_label">ΕΙΚΟΝΙΚΗ ΑΝΤΛΙΑ</string>
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<string name="treatments_wizard_bg_label">Glucosa</string>
|
<string name="treatments_wizard_bg_label">Glucosa</string>
|
||||||
<string name="treatments_wizard_carbs_label">Hidratos Carbono</string>
|
<string name="treatments_wizard_carbs_label">Hidratos Carbono</string>
|
||||||
<string name="treatments_wizard_correction_label">Corrección</string>
|
<string name="treatments_wizard_correction_label">Corrección</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolo IOB</string>
|
<string name="treatments_wizard_bolusiob_label">Bolo IOB</string>
|
||||||
<string name="openapsma_run">Ejecutar ahora</string>
|
<string name="openapsma_run">Ejecutar ahora</string>
|
||||||
<string name="vitualpump_label">BOMBA VIRTUAL</string>
|
<string name="vitualpump_label">BOMBA VIRTUAL</string>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<string name="treatments_wizard_tt_label">CT</string>
|
<string name="treatments_wizard_tt_label">CT</string>
|
||||||
<string name="treatments_wizard_carbs_label">Glucides</string>
|
<string name="treatments_wizard_carbs_label">Glucides</string>
|
||||||
<string name="treatments_wizard_correction_label">Corr</string>
|
<string name="treatments_wizard_correction_label">Corr</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolus IR</string>
|
<string name="treatments_wizard_bolusiob_label">Bolus IR</string>
|
||||||
<string name="openapsma_run">"Exécuter maintenant "</string>
|
<string name="openapsma_run">"Exécuter maintenant "</string>
|
||||||
<string name="vitualpump_label">POMPE VIRTUELLE</string>
|
<string name="vitualpump_label">POMPE VIRTUELLE</string>
|
||||||
|
|
|
@ -425,7 +425,7 @@
|
||||||
<string name="treatmentssafety_title">Sicurezza delle prestazioni</string>
|
<string name="treatmentssafety_title">Sicurezza delle prestazioni</string>
|
||||||
<string name="treatmentssafety_maxcarbs_title">Valore massimo carbo (g)</string>
|
<string name="treatmentssafety_maxcarbs_title">Valore massimo carbo (g)</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">Bolo massimo (U)</string>
|
<string name="treatmentssafety_maxbolus_title">Bolo massimo (U)</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_correction_label">Correzione</string>
|
<string name="treatments_wizard_correction_label">Correzione</string>
|
||||||
<string name="treatments_wizard_cob_label">COB</string>
|
<string name="treatments_wizard_cob_label">COB</string>
|
||||||
<string name="treatments_wizard_carbs_label">Carboidrati</string>
|
<string name="treatments_wizard_carbs_label">Carboidrati</string>
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
<string name="treatments_wizard_bg_label">혈당</string>
|
<string name="treatments_wizard_bg_label">혈당</string>
|
||||||
<string name="treatments_wizard_carbs_label">탄수화물</string>
|
<string name="treatments_wizard_carbs_label">탄수화물</string>
|
||||||
<string name="treatments_wizard_correction_label">교정</string>
|
<string name="treatments_wizard_correction_label">교정</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">식사주입 IOB</string>
|
<string name="treatments_wizard_bolusiob_label">식사주입 IOB</string>
|
||||||
<string name="openapsma_run">지금 실행</string>
|
<string name="openapsma_run">지금 실행</string>
|
||||||
<string name="vitualpump_label">가상 펌프</string>
|
<string name="vitualpump_label">가상 펌프</string>
|
||||||
|
|
|
@ -347,7 +347,7 @@
|
||||||
<string name="nsclientinternal_autoscroll">Autoscroll</string>
|
<string name="nsclientinternal_autoscroll">Autoscroll</string>
|
||||||
<string name="nsclientinternal_secret_dialogmessage">Geen NS API geheim op (min 12 kar.)</string>
|
<string name="nsclientinternal_secret_dialogmessage">Geen NS API geheim op (min 12 kar.)</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">Max toegestane bolus [E]</string>
|
<string name="treatmentssafety_maxbolus_title">Max toegestane bolus [E]</string>
|
||||||
<string name="treatments_wizard_unit_label">E</string>
|
<string name="insulin_unit_shortname">E</string>
|
||||||
<string name="treatments_wizard_correction_label">Correctie</string>
|
<string name="treatments_wizard_correction_label">Correctie</string>
|
||||||
<string name="treatments_wizard_cob_label">COB</string>
|
<string name="treatments_wizard_cob_label">COB</string>
|
||||||
<string name="treatments_wizard_carbs_label">Koolhydraten</string>
|
<string name="treatments_wizard_carbs_label">Koolhydraten</string>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<string name="treatments_wizard_bg_label">BG</string>
|
<string name="treatments_wizard_bg_label">BG</string>
|
||||||
<string name="treatments_wizard_carbs_label">Carbohidrați</string>
|
<string name="treatments_wizard_carbs_label">Carbohidrați</string>
|
||||||
<string name="treatments_wizard_correction_label">Corecție</string>
|
<string name="treatments_wizard_correction_label">Corecție</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
||||||
<string name="openapsma_run">Fă acum</string>
|
<string name="openapsma_run">Fă acum</string>
|
||||||
<string name="vitualpump_label">POMPĂ VIRTUALĂ</string>
|
<string name="vitualpump_label">POMPĂ VIRTUALĂ</string>
|
||||||
|
|
|
@ -482,7 +482,7 @@
|
||||||
<string name="treatments_wizard_carbs_label">углеводы</string>
|
<string name="treatments_wizard_carbs_label">углеводы</string>
|
||||||
<string name="treatments_wizard_cob_label">активн углеводы</string>
|
<string name="treatments_wizard_cob_label">активн углеводы</string>
|
||||||
<string name="treatments_wizard_correction_label">коррекция</string>
|
<string name="treatments_wizard_correction_label">коррекция</string>
|
||||||
<string name="treatments_wizard_unit_label">ед</string>
|
<string name="insulin_unit_shortname">ед</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">макс разрешенный болюс</string>
|
<string name="treatmentssafety_maxbolus_title">макс разрешенный болюс</string>
|
||||||
<string name="treatmentssafety_maxcarbs_title">макс разрешенные углеводы (г)</string>
|
<string name="treatmentssafety_maxcarbs_title">макс разрешенные углеводы (г)</string>
|
||||||
<string name="treatmentssafety_title">безопасность назначений</string>
|
<string name="treatmentssafety_title">безопасность назначений</string>
|
||||||
|
|
|
@ -303,7 +303,7 @@
|
||||||
<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 bolus [E]</string>
|
<string name="treatmentssafety_maxbolus_title">Max tillåten bolus [E]</string>
|
||||||
<string name="treatments_wizard_unit_label">E</string>
|
<string name="insulin_unit_shortname">E</string>
|
||||||
<string name="treatments_wizard_correction_label">Korr</string>
|
<string name="treatments_wizard_correction_label">Korr</string>
|
||||||
<string name="treatments_wizard_cob_label">COB</string>
|
<string name="treatments_wizard_cob_label">COB</string>
|
||||||
<string name="treatments_wizard_carbs_label">KH</string>
|
<string name="treatments_wizard_carbs_label">KH</string>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<string name="treatments_wizard_tt_label">TT</string>
|
<string name="treatments_wizard_tt_label">TT</string>
|
||||||
<string name="treatments_wizard_carbs_label">Carbs</string>
|
<string name="treatments_wizard_carbs_label">Carbs</string>
|
||||||
<string name="treatments_wizard_correction_label">Corr</string>
|
<string name="treatments_wizard_correction_label">Corr</string>
|
||||||
<string name="treatments_wizard_unit_label">U</string>
|
<string name="insulin_unit_shortname">U</string>
|
||||||
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
<string name="treatments_wizard_bolusiob_label">Bolus IOB</string>
|
||||||
<string name="openapsma_run">Run now</string>
|
<string name="openapsma_run">Run now</string>
|
||||||
<string name="vitualpump_label">VIRTUAL PUMP</string>
|
<string name="vitualpump_label">VIRTUAL PUMP</string>
|
||||||
|
@ -639,8 +639,8 @@
|
||||||
<string name="mdtp_cancel">Cancel</string>
|
<string name="mdtp_cancel">Cancel</string>
|
||||||
<string name="notloadedplugins">Not all profiles loaded!</string>
|
<string name="notloadedplugins">Not all profiles loaded!</string>
|
||||||
<string name="valuesnotstored">Values not stored!</string>
|
<string name="valuesnotstored">Values not stored!</string>
|
||||||
<string name="combopump">Accu-Chek Combo</string>
|
<string name="combopump" translatable="false">Accu-Chek Combo</string>
|
||||||
<string name="combopump_shortname">COMBO</string>
|
<string name="combopump_shortname" translatable="false">COMBO</string>
|
||||||
<string name="ns_localbroadcasts">Enable broadcasts to other apps (like xDrip).</string>
|
<string name="ns_localbroadcasts">Enable broadcasts to other apps (like xDrip).</string>
|
||||||
<string name="ns_localbroadcasts_title">Enable local Broadcasts.</string>
|
<string name="ns_localbroadcasts_title">Enable local Broadcasts.</string>
|
||||||
<string name="careportal_activity_label">ACTIVITY & FEEDBACK</string>
|
<string name="careportal_activity_label">ACTIVITY & FEEDBACK</string>
|
||||||
|
@ -887,7 +887,7 @@
|
||||||
<string name="enablesmbwithtemptarget_summary">Enable SMB when there is temp target active (eating soon, exercise)</string>
|
<string name="enablesmbwithtemptarget_summary">Enable SMB when there is temp target active (eating soon, exercise)</string>
|
||||||
<string name="enablesmbwithhightemptarget">Enable SMB with high temp targets</string>
|
<string name="enablesmbwithhightemptarget">Enable SMB with high temp targets</string>
|
||||||
<string name="enablesmbwithhightemptarget_summary">Enable SMB when there is high temp target active (exercise)</string>
|
<string name="enablesmbwithhightemptarget_summary">Enable SMB when there is high temp target active (exercise)</string>
|
||||||
<string name="let_temp_basal_run">Let current temp basal run</string>
|
<string name="let_temp_basal_run">Let temp basal run</string>
|
||||||
<string name="mute">Mute</string>
|
<string name="mute">Mute</string>
|
||||||
<string name="overview_insulin_label">Insulin</string>
|
<string name="overview_insulin_label">Insulin</string>
|
||||||
<string name="overview_carbs_label">Carbs</string>
|
<string name="overview_carbs_label">Carbs</string>
|
||||||
|
@ -976,5 +976,7 @@
|
||||||
<string name="maxbasalmultiplier">max basal multiplier</string>
|
<string name="maxbasalmultiplier">max basal multiplier</string>
|
||||||
<string name="maxdailybasalmultiplier">max daily basal multiplier</string>
|
<string name="maxdailybasalmultiplier">max daily basal multiplier</string>
|
||||||
<string name="key_openapsma_max_iob" translatable="false">openapsma_max_iob</string>
|
<string name="key_openapsma_max_iob" translatable="false">openapsma_max_iob</string>
|
||||||
|
<string name="smb_frequency_exceeded">A bolus was delivered within the last 3 minutes, skipping SMB</string>
|
||||||
|
<string name="basal_set_correctly">Basal set correctly</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue