Merge branch 'dev' into fix/carbs-notes

This commit is contained in:
Milos Kozak 2022-08-08 22:34:39 +02:00
commit 5e9b2f1cc4
517 changed files with 35404 additions and 3606 deletions

3
.gitignore vendored
View file

@ -19,3 +19,6 @@ app/.classpath
app/.settings/org.eclipse.buildship.core.prefs
wear/.classpath
wear/.settings/org.eclipse.buildship.core.prefs
app/nsclient/*
app/nsclient2/*
app/pumpcontrol/*

View file

@ -3,9 +3,11 @@
<words>
<w>aaps</w>
<w>abcdef</w>
<w>accu</w>
<w>acked</w>
<w>actionstring</w>
<w>aidex</w>
<w>alarmack</w>
<w>allowednumbers</w>
<w>androidaps</w>
<w>autosens</w>
@ -26,11 +28,15 @@
<w>carbsreq</w>
<w>careportal</w>
<w>cellnovo</w>
<w>chek</w>
<w>clearalarm</w>
<w>crashlytics</w>
<w>danar</w>
<w>danars</w>
<w>dataset</w>
<w>datasets</w>
<w>dbadd</w>
<w>dbupdate</w>
<w>devicestatus</w>
<w>devicestatuses</w>
<w>devslope</w>
@ -39,12 +45,14 @@
<w>diaconn</w>
<w>enteredby</w>
<w>enteredinsulin</w>
<w>eopatch</w>
<w>eveningoutpost</w>
<w>eversense</w>
<w>extendedbolus</w>
<w>fileprovider</w>
<w>firebase</w>
<w>glimp</w>
<w>glunovo</w>
<w>gson</w>
<w>hmac</w>
<w>iage</w>
@ -79,12 +87,14 @@
<w>pred</w>
<w>profileswitch</w>
<w>pumpbtcomm</w>
<w>pumpcontrol</w>
<w>quickwizard</w>
<w>readstatus</w>
<w>realduration</w>
<w>refresheventsfromnightscout</w>
<w>rileylink</w>
<w>roboelectric</w>
<w>rozman</w>
<w>sgvs</w>
<w>shortgramm</w>
<w>sitechange</w>
@ -108,7 +118,8 @@
<w>tirs</w>
<w>totp</w>
<w>tunedays</w>
<w>uart</w>
<w>uart</w>
<w>urgentalarm</w>
<w>wizzardpage</w>
<w>xdrip</w>
<w>xstream</w>

View file

@ -97,12 +97,6 @@ def allCommitted = { ->
return stringBuilder.toString().isEmpty()
}
tasks.matching { it instanceof Test }.all {
testLogging.events = ["failed", "skipped", "started"]
// testLogging.events = ["failed", "skipped", "started", "standard_out"] use to display stdout in travis
testLogging.exceptionFormat = "full"
}
android {
namespace 'info.nightscout.androidaps'
@ -111,7 +105,7 @@ android {
defaultConfig {
multiDexEnabled true
versionCode 1500
version "3.0.0.2-dev-n"
version "3.1.0.3-dev-a"
buildConfigField "String", "VERSION", '"' + version + '"'
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'

View file

@ -203,206 +203,97 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
// 80 mg/dL with low_temptarget_lowers_sensitivity would give 1.5x basal, but is limited to autosens_max (1.2x by default)
}
//*********************************************************************************
//** Start of Dynamic ISF code for predictions **
//*********************************************************************************
var profile_sens = round(profile.sens,1)
var sens = profile.sens;
console.error("---------------------------------------------------------");
console.error( " Dynamic ISF version Beta 1.6.5 ");
console.error("---------------------------------------------------------");
var now = new Date().getHours();
if (now < 1){
now = 1;}
else {
console.error("Time now is "+now+"; ");
}
//*********************************************************************************
//** Start of Dynamic ISF code for predictions **
//*********************************************************************************
var variable_sens = profile.variable_sens;
var TDD = profile.TDD;
var insulinDivisor = profile.insulinDivisor;
console.error("---------------------------------------------------------");
console.error( " Dynamic ISF version Beta 1.6.4 ");
console.error("---------------------------------------------------------");
//*********************************************************************************
//** End of Dynamic ISF code for predictions **
//*********************************************************************************
if (meal_data.TDDAIMI7){
var tdd7 = meal_data.TDDAIMI7;
}
else{
var tdd7 = ((basal * 12)*100)/21;
}
console.error("7-day average TDD is: " +tdd7+ "; ");
if (meal_data.TDDLast24){
var tdd_24 = meal_data.TDDLast24;
}
else {
var tdd_24 = (( basal * 24 ) * 2.8);
}
if (meal_data.TDDPUMP){
var tdd_pump = ( (meal_data.TDDPUMP / now ) * 24);
}
else {
var tdd_pump = (( basal * 24 ) * 2.8);
}
console.log("Rolling TDD for last 24 hours is: "+tdd_24+"; ");
/*var tdd_pump_now = meal_data.TDDPUMP;
var tdd_pump = ( tdd_pump_now / (now / 24));*/
//var TDD = (tdd7 * 0.4) + (tdd_pump * 0.6);
var tdd1 = meal_data.TDDAIMI1;
var tdd_4 = meal_data.TDDLast4;
var tdd8to4 = meal_data.TDD4to8;
var tdd_last8_wt = ( ( ( 1.4 * tdd_4) + ( 0.6 * tdd8to4) ) * 3 );
console.error("Rolling 8 hours weight average: "+tdd_last8_wt+"; ");
console.error("1-day average TDD is: "+tdd1+"; ");
console.error("7-day average TDD is: " +tdd7+ "; ");
//TDD = ( tdd_last8_wt * 0.6) + ( tdd7 * 0.4 );
var TDD = ( tdd_last8_wt * 0.33 ) + ( tdd7 * 0.34 ) + (tdd1 * 0.33);
console.log("TDD = " +TDD+ " using average of 7-day, 1-day and weighted 8hr average");
//var ins_val = 75;
var insulin = profile.insulinType;
console.log("Insulin Peak = "+profile.insulinPeak+"; ");
//console.log("Initial insulin value for ISF: "+ins_val+"; ");
//console.log("Current value for insulin: "+insulin+"; ");
var ins_val;
if (profile.insulinPeak > 65) { // lyumjev peak: 45
ins_val = 55;
} else if (profile.insulinPeak > 50 ){ // ultra rapid peak: 55
ins_val = 65;
if ( high_temptarget_raises_sensitivity && profile.temptargetSet && target_bg > normalTarget
|| profile.low_temptarget_lowers_sensitivity && profile.temptargetSet && target_bg < normalTarget ) {
// w/ target 100, temp target 110 = .89, 120 = 0.8, 140 = 0.67, 160 = .57, and 200 = .44
// e.g.: Sensitivity ratio set to 0.8 based on temp target of 120; Adjusting basal from 1.65 to 1.35; ISF from 58.9 to 73.6
//sensitivityRatio = 2/(2+(target_bg-normalTarget)/40);
var c = halfBasalTarget - normalTarget;
sensitivityRatio = c/(c+target_bg-normalTarget);
// limit sensitivityRatio to profile.autosens_max (1.2x by default)
sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max);
sensitivityRatio = round(sensitivityRatio,2);
console.log("Sensitivity ratio set to "+sensitivityRatio+" based on temp target of "+target_bg+"; ");
} else if (typeof autosens_data !== 'undefined' && autosens_data) {
sensitivityRatio = autosens_data.ratio;
console.log("Autosens ratio: "+sensitivityRatio+"; ");
}
if (sensitivityRatio) {
basal = profile.current_basal * sensitivityRatio;
basal = round_basal(basal, profile);
if (basal !== profile_current_basal) {
console.log("Adjusting basal from "+profile_current_basal+" to "+basal+"; ");
} else {
ins_val = 75; // rapid peak: 75
console.log("Basal unchanged: "+basal+"; ");
}
console.log("For "+profile.insulinType+" (insulin peak: "+profile.insulinPeak+") divisor is: "+ins_val+"; ");
}
console.log("Insulin value for ISF based on profile: "+ins_val+"; ");
var dynISFadjust = profile.DynISFAdjust;
dynISFadjust = ( dynISFadjust / 100 );
TDD = ( dynISFadjust * TDD );
var variable_sens = 1800 / ( TDD * (Math.log(( bg / ins_val ) + 1 ) ) );
variable_sens = round(variable_sens,1);
if (dynISFadjust > 1 ) {
console.log("TDD adjustment factor is: " +dynISFadjust+"; ");
console.log("TDD adjusted to "+TDD+" using adjustment factor of "+dynISFadjust+"; ");
console.log("Current sensitivity for predictions is " +variable_sens+" based on current bg");
}
else if (dynISFadjust < 1 ){
console.log("TDD adjustment factor is: " +dynISFadjust+"; ");
console.log("TDD adjusted to "+TDD+" using adjustment factor of "+dynISFadjust+"; ");
console.log("Current sensitivity for predictions is " +variable_sens+" based on current bg");
} else {
console.log("Current sensitivity for predictions is " +variable_sens+" based on current bg");
}
sens = variable_sens;
//*********************************************************************************
//** End of Dynamic ISF code for predictions **
//*********************************************************************************
if ( high_temptarget_raises_sensitivity && profile.temptargetSet && target_bg > normalTarget || profile.low_temptarget_lowers_sensitivity && profile.temptargetSet && target_bg < normalTarget ) {
// w/ target 100, temp target 110 = .89, 120 = 0.8, 140 = 0.67, 160 = .57, and 200 = .44
// e.g.: Sensitivity ratio set to 0.8 based on temp target of 120; Adjusting basal from 1.65 to 1.35; ISF from 58.9 to 73.6
//sensitivityRatio = 2/(2+(target_bg-normalTarget)/40);
var c = halfBasalTarget - normalTarget;
sensitivityRatio = c/(c+target_bg-normalTarget);
// limit sensitivityRatio to profile.autosens_max (1.2x by default)
sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max);
sensitivityRatio = round(sensitivityRatio,2);
console.log("Sensitivity ratio set to "+sensitivityRatio+" based on temp target of "+target_bg+"; ");
sens = sens / sensitivityRatio ;
sens = round(sens, 1);
console.log("ISF from "+variable_sens+" to "+sens+ "due to temp target; ");
}
else {
sensitivityRatio = ( meal_data.TDD24 / tdd7 );
}
if (sensitivityRatio > 1) {
sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max);
sensitivityRatio = round(sensitivityRatio,2);
console.log("Sensitivity ratio: "+sensitivityRatio+"; ");
}
else if( sensitivityRatio < 1) {
sensitivityRatio = Math.max(sensitivityRatio, profile.autosens_min);
sensitivityRatio = round(sensitivityRatio,2);
console.log("Sensitivity ratio: "+sensitivityRatio+"; ");
}
else {
console.log("Sensitivity ratio: "+sensitivityRatio+"; ");
}
if (sensitivityRatio && profile.openapsama_useautosens === true) {
basal = profile.current_basal * sensitivityRatio;
basal = round_basal(basal, profile);
if (basal !== profile_current_basal) {
console.log("Adjusting basal from "+profile_current_basal+" to "+basal+"; ");
// adjust min, max, and target BG for sensitivity, such that 50% increase in ISF raises target from 100 to 120
if (profile.temptargetSet) {
//console.log("Temp Target set, not adjusting with autosens; ");
} else if (typeof autosens_data !== 'undefined' && autosens_data) {
if ( profile.sensitivity_raises_target && autosens_data.ratio < 1 || profile.resistance_lowers_target && autosens_data.ratio > 1 ) {
// with a target of 100, default 0.7-1.2 autosens min/max range would allow a 93-117 target range
min_bg = round((min_bg - 60) / autosens_data.ratio) + 60;
max_bg = round((max_bg - 60) / autosens_data.ratio) + 60;
var new_target_bg = round((target_bg - 60) / autosens_data.ratio) + 60;
// don't allow target_bg below 80
new_target_bg = Math.max(80, new_target_bg);
if (target_bg === new_target_bg) {
console.log("target_bg unchanged: "+new_target_bg+"; ");
} else {
console.log("Autosens disabled. Basal unchanged: "+basal+"; ");
console.log("target_bg from "+target_bg+" to "+new_target_bg+"; ");
}
target_bg = new_target_bg;
}
}
// adjust min, max, and target BG for sensitivity, such that 50% increase in ISF raises target from 100 to 120
if (profile.temptargetSet) {
//console.log("Temp Target set, not adjusting with autosens; ");
} else {
if ( profile.sensitivity_raises_target && sensitivityRatio < 1 && profile.openapsama_useautosens === true || profile.resistance_lowers_target && sensitivityRatio > 1 && profile.openapsama_useautosens === true) {
// with a target of 100, default 0.7-1.2 autosens min/max range would allow a 93-117 target range
min_bg = round((min_bg - 60) / sensitivityRatio) + 60;
max_bg = round((max_bg - 60) / sensitivityRatio) + 60;
var new_target_bg = round((target_bg - 60) / sensitivityRatio) + 60;
// don't allow target_bg below 80
new_target_bg = Math.max(80, new_target_bg);
if (target_bg === new_target_bg) {
console.log("target_bg unchanged: "+new_target_bg+"; ");
} else {
console.log("target_bg from "+target_bg+" to "+new_target_bg+"; ");
}
target_bg = new_target_bg;
}
}
if (typeof iob_data === 'undefined' ) {
rT.error ='Error: iob_data undefined. ';
return rT;
}
var iobArray = iob_data;
if (typeof(iob_data.length) && iob_data.length > 1) {
iob_data = iobArray[0];
//console.error(JSON.stringify(iob_data[0]));
}
if (typeof iob_data === 'undefined' ) {
rT.error ='Error: iob_data undefined. ';
return rT;
}
if (typeof iob_data.activity === 'undefined' || typeof iob_data.iob === 'undefined' ) {
rT.error ='Error: iob_data missing some property. ';
return rT;
}
var iobArray = iob_data;
if (typeof(iob_data.length) && iob_data.length > 1) {
iob_data = iobArray[0];
//console.error(JSON.stringify(iob_data[0]));
}
var tick;
if (typeof iob_data.activity === 'undefined' || typeof iob_data.iob === 'undefined' ) {
rT.error ='Error: iob_data missing some property. ';
return rT;
}
if (glucose_status.delta > -0.5) {
tick = "+" + round(glucose_status.delta,0);
} else {
tick = round(glucose_status.delta,0);
}
//var minDelta = Math.min(glucose_status.delta, glucose_status.short_avgdelta, glucose_status.long_avgdelta);
var minDelta = Math.min(glucose_status.delta, glucose_status.short_avgdelta);
var minAvgDelta = Math.min(glucose_status.short_avgdelta, glucose_status.long_avgdelta);
var maxDelta = Math.max(glucose_status.delta, glucose_status.short_avgdelta, glucose_status.long_avgdelta);
var tick;
if (glucose_status.delta > -0.5) {
tick = "+" + round(glucose_status.delta,0);
} else {
tick = round(glucose_status.delta,0);
}
//var minDelta = Math.min(glucose_status.delta, glucose_status.short_avgdelta, glucose_status.long_avgdelta);
var minDelta = Math.min(glucose_status.delta, glucose_status.short_avgdelta);
var minAvgDelta = Math.min(glucose_status.short_avgdelta, glucose_status.long_avgdelta);
var maxDelta = Math.max(glucose_status.delta, glucose_status.short_avgdelta, glucose_status.long_avgdelta);
console.error("; CR:",profile.carb_ratio);
var sens = variable_sens
// compare currenttemp to iob_data.lastTemp and cancel temp if they don't match
var lastTempAge;
@ -413,7 +304,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
}
//console.error("currenttemp:",currenttemp,"lastTemp:",JSON.stringify(iob_data.lastTemp),"lastTempAge:",lastTempAge,"m");
var tempModulus = (lastTempAge + currenttemp.duration) % 30;
console.error("currenttemp:",currenttemp,"lastTempAge:",lastTempAge,"m","tempModulus:",tempModulus,"m");
console.error("currenttemp:",round(currenttemp.rate,2),"lastTempAge:",lastTempAge,"m","tempModulus:",tempModulus,"m");
rT.temp = 'absolute';
rT.deliverAt = deliverAt;
if ( microBolusAllowed && currenttemp && iob_data.lastTemp && currenttemp.rate !== iob_data.lastTemp.rate && lastTempAge > 10 && currenttemp.duration ) {
@ -822,37 +713,38 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
console.error("UAM Impact:",uci,"mg/dL per 5m; UAM Duration:",UAMduration,"hours");
console.log("EventualBG is" +eventualBG+" ;");
if (bg > target_bg && glucose_status.delta < 3 && glucose_status.delta > -3 && glucose_status.short_avgdelta > -3 && glucose_status.short_avgdelta < 3 && eventualBG > target_bg && eventualBG < bg ) {
var future_sens = ( 1800 / (Math.log((((eventualBG * 0.5) + (bg * 0.5))/ins_val)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * ((bg * 0.5) + (eventualBG * 0.5 ))));
console.log("Future state sensitivity is " +future_sens+" based on eventual and current bg due to flat glucose level above target");
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
}
else if( glucose_status.delta > 0 && eventualBG > target_bg ) {
var future_sens = ( 1800 / (Math.log((bg/ins_val)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * bg));
console.log("Future state sensitivity is " +future_sens+" using current bg due to small delta or variation");
rT.reason += "Dosing sensitivity: " +future_sens+" using current BG;";
}
else {
var future_sens = ( 1800 / (Math.log((eventualBG/ins_val)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * eventualBG));
console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta");
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
}
future_sens = round(future_sens,1);
console.log("EventualBG is" +eventualBG+" ;");
minIOBPredBG = Math.max(39,minIOBPredBG);
minCOBPredBG = Math.max(39,minCOBPredBG);
minUAMPredBG = Math.max(39,minUAMPredBG);
minPredBG = round(minIOBPredBG);
var fSensBG = Math.min(minPredBG,bg);
if (bg > target_bg && glucose_status.delta < 3 && glucose_status.delta > -3 && glucose_status.short_avgdelta > -3 && glucose_status.short_avgdelta < 3 && eventualBG > target_bg && eventualBG < bg ) {
var future_sens = ( 1800 / (Math.log((((fSensBG * 0.5) + (bg * 0.5))/insulinDivisor)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * ((bg * 0.5) + (eventualBG * 0.5 ))));
console.log("Future state sensitivity is " +future_sens+" based on eventual and current bg due to flat glucose level above target");
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
}
else if( glucose_status.delta > 0 && eventualBG > target_bg || eventualBG > bg) {
var future_sens = ( 1800 / (Math.log((bg/insulinDivisor)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * bg));
console.log("Future state sensitivity is " +future_sens+" using current bg due to small delta or variation");
rT.reason += "Dosing sensitivity: " +future_sens+" using current BG;";
}
else {
var future_sens = ( 1800 / (Math.log((fSensBG/insulinDivisor)+1)*TDD));
//var future_sens_old = ( 277700 / (TDD * eventualBG));
console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta");
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
}
future_sens = round(future_sens,1);
var fractionCarbsLeft = meal_data.mealCOB/meal_data.carbs;
// if we have COB and UAM is enabled, average both
if ( minUAMPredBG < 999 && minCOBPredBG < 999 ) {
@ -1075,25 +967,22 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
}
}
// calculate 30m low-temp required to get projected BG up to target
// multiply by 2 to low-temp faster for increased hypo safety
var insulinReq = 2 * Math.min(0, (eventualBG - target_bg) / future_sens);
insulinReq = round( insulinReq , 2);
// calculate naiveInsulinReq based on naive_eventualBG
var naiveInsulinReq = Math.min(0, (naive_eventualBG - target_bg) / sens);
naiveInsulinReq = round( naiveInsulinReq , 2);
if (minDelta < 0 && minDelta > expectedDelta) {
// if we're barely falling, newinsulinReq should be barely negative
var newinsulinReq = round(( insulinReq * (minDelta / expectedDelta) ), 2);
//console.error("Increasing insulinReq from " + insulinReq + " to " + newinsulinReq);
insulinReq = newinsulinReq;
}
// rate required to deliver insulinReq less insulin over 30m:
var rate = basal + (2 * insulinReq);
rate = round_basal(rate, profile);
// calculate 30m low-temp required to get projected BG up to target
// multiply by 2 to low-temp faster for increased hypo safety
var insulinReq = 2 * Math.min(0, (eventualBG - target_bg) / future_sens);
insulinReq = round( insulinReq , 2);
// calculate naiveInsulinReq based on naive_eventualBG
var naiveInsulinReq = Math.min(0, (naive_eventualBG - target_bg) / sens);
naiveInsulinReq = round( naiveInsulinReq , 2);
if (minDelta < 0 && minDelta > expectedDelta) {
// if we're barely falling, newinsulinReq should be barely negative
var newinsulinReq = round(( insulinReq * (minDelta / expectedDelta) ), 2);
//console.error("Increasing insulinReq from " + insulinReq + " to " + newinsulinReq);
insulinReq = newinsulinReq;
}
// rate required to deliver insulinReq less insulin over 30m:
var rate = basal + (2 * insulinReq);
rate = round_basal(rate, profile);
// if required temp < existing temp basal
var insulinScheduled = currenttemp.duration * (currenttemp.rate - basal) / 60;
@ -1181,14 +1070,14 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
}
} else { // otherwise, calculate 30m high-temp required to get projected BG down to target
// insulinReq is the additional insulin required to get minPredBG down to target_bg
//console.error(minPredBG,eventualBG);
insulinReq = round( (Math.min(minPredBG,eventualBG) - target_bg) / future_sens, 2);
// if that would put us over max_iob, then reduce accordingly
if (insulinReq > max_iob-iob_data.iob) {
rT.reason += "max_iob " + max_iob + ", ";
insulinReq = max_iob-iob_data.iob;
}
// insulinReq is the additional insulin required to get minPredBG down to target_bg
//console.error(minPredBG,eventualBG);
insulinReq = round( (Math.min(minPredBG,eventualBG) - target_bg) / future_sens, 2);
// if that would put us over max_iob, then reduce accordingly
if (insulinReq > max_iob-iob_data.iob) {
rT.reason += "max_iob " + max_iob + ", ";
insulinReq = max_iob-iob_data.iob;
}
// rate required to deliver insulinReq more insulin over 30m:
rate = basal + (2 * insulinReq);
@ -1314,4 +1203,4 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
};
module.exports = determine_basal;
module.exports = determine_basal;

View file

@ -80,7 +80,7 @@ class MainApp : DaggerApplication() {
@Inject lateinit var uel: UserEntryLogger
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper
@Inject lateinit var notificationStore: NotificationStore
@Inject lateinit var processLifecycleListener: ProcessLifecycleListener
@Inject lateinit var processLifecycleListener: Provider<ProcessLifecycleListener>
@Inject lateinit var profileSwitchPlugin: ThemeSwitcherPlugin
@Inject lateinit var localAlertUtils: LocalAlertUtils
@Inject lateinit var rh: Provider<ResourceHelper>
@ -94,7 +94,6 @@ class MainApp : DaggerApplication() {
RxDogTag.install()
setRxErrorHandler()
LocaleHelper.update(this)
ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleListener)
var gitRemote: String? = BuildConfig.REMOTE
var commitHash: String? = BuildConfig.HEAD
@ -151,6 +150,7 @@ class MainApp : DaggerApplication() {
localAlertUtils.preSnoozeAlarms()
doMigrations()
uel.log(UserEntry.Action.START_AAPS, UserEntry.Sources.Aaps)
ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleListener.get())
// schedule widget update
refreshWidget = Runnable {

View file

@ -12,7 +12,7 @@ import com.google.android.material.datepicker.MaterialDatePicker
import com.jjoe64.graphview.GraphView
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.activities.fragments.HistoryBrowserData
import info.nightscout.androidaps.databinding.ActivityHistorybrowseBinding
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.events.EventCustomCalculationFinished
@ -21,27 +21,18 @@ import info.nightscout.androidaps.events.EventScale
import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.extensions.toVisibilityKeepSpace
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph
import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.receivers.DataWorker
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.Translator
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.workflow.CalculationWorkflow
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import java.util.*
@ -50,23 +41,16 @@ import kotlin.math.min
class HistoryBrowseActivity : NoSplashAppCompatActivity() {
@Inject lateinit var historyBrowserData: HistoryBrowserData
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var sp: SP
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@Inject lateinit var activePlugin: ActivePlugin
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var repository: AppRepository
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var overviewMenus: OverviewMenus
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var config: Config
@Inject lateinit var loop: Loop
@Inject lateinit var nsDeviceStatus: NSDeviceStatus
@Inject lateinit var translator: Translator
@Inject lateinit var context: Context
@Inject lateinit var dataWorker: DataWorker
@Inject lateinit var calculationWorkflow: CalculationWorkflow
private val disposable = CompositeDisposable()
@ -78,9 +62,6 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
private var rangeToDisplay = 24 // for graph
// private var start: Long = 0
private lateinit var iobCobCalculator: IobCobCalculatorPlugin
private lateinit var overviewData: OverviewData
private lateinit var binding: ActivityHistorybrowseBinding
private var destroyed = false
@ -89,42 +70,12 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
binding = ActivityHistorybrowseBinding.inflate(layoutInflater)
setContentView(binding.root)
// We don't want to use injected singletons but own instance working on top of different data
overviewData =
OverviewData(
aapsLogger,
rh,
dateUtil,
sp,
activePlugin,
defaultValueHelper,
profileFunction,
repository,
fabricPrivacy
)
iobCobCalculator =
IobCobCalculatorPlugin(
injector,
aapsLogger,
aapsSchedulers,
rxBus,
sp,
rh,
profileFunction,
activePlugin,
fabricPrivacy,
dateUtil,
repository,
overviewData,
calculationWorkflow
)
binding.left.setOnClickListener {
adjustTimeRange(overviewData.fromTime - T.hours(rangeToDisplay.toLong()).msecs())
adjustTimeRange(historyBrowserData.overviewData.fromTime - T.hours(rangeToDisplay.toLong()).msecs())
loadAll("onClickLeft")
}
binding.right.setOnClickListener {
adjustTimeRange(overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs())
adjustTimeRange(historyBrowserData.overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs())
loadAll("onClickRight")
}
binding.end.setOnClickListener {
@ -138,7 +89,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
}
binding.zoom.setOnLongClickListener {
Calendar.getInstance().also { calendar ->
calendar.timeInMillis = overviewData.fromTime
calendar.timeInMillis = historyBrowserData.overviewData.fromTime
calendar[Calendar.MILLISECOND] = 0
calendar[Calendar.SECOND] = 0
calendar[Calendar.MINUTE] = 0
@ -151,13 +102,13 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
binding.date.setOnClickListener {
MaterialDatePicker.Builder.datePicker()
.setSelection(dateUtil.timeStampToUtcDateMillis(overviewData.fromTime))
.setSelection(dateUtil.timeStampToUtcDateMillis(historyBrowserData.overviewData.fromTime))
.setTheme(R.style.DatePicker)
.build()
.apply {
addOnPositiveButtonClickListener { selection ->
setTime(dateUtil.mergeUtcDateToTimestamp(overviewData.fromTime, selection))
binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
setTime(dateUtil.mergeUtcDateToTimestamp(historyBrowserData.overviewData.fromTime, selection))
binding.date.text = dateUtil.dateAndTimeString(historyBrowserData.overviewData.fromTime)
loadAll("onClickDate")
}
}
@ -180,8 +131,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
prepareGraphsIfNeeded(overviewMenus.setting.size)
savedInstanceState?.let { bundle ->
rangeToDisplay = bundle.getInt("rangeToDisplay", 0)
overviewData.fromTime = bundle.getLong("start", 0)
overviewData.toTime = bundle.getLong("end", 0)
historyBrowserData.overviewData.fromTime = bundle.getLong("start", 0)
historyBrowserData.overviewData.toTime = bundle.getLong("end", 0)
}
}
@ -220,11 +171,11 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
.observeOn(aapsSchedulers.main)
.subscribe({
rangeToDisplay = it.hours
setTime(overviewData.fromTime)
setTime(historyBrowserData.overviewData.fromTime)
loadAll("rangeChange")
}, fabricPrivacy::logException)
if (overviewData.fromTime == 0L) {
updateCalcProgress(100)
if (historyBrowserData.overviewData.fromTime == 0L) {
// set start of current day
setTime(dateUtil.now())
loadAll("onResume")
@ -236,8 +187,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("rangeToDisplay", rangeToDisplay)
outState.putLong("start", overviewData.fromTime)
outState.putLong("end", overviewData.toTime)
outState.putLong("start", historyBrowserData.overviewData.fromTime)
outState.putLong("end", historyBrowserData.overviewData.toTime)
}
private fun prepareGraphsIfNeeded(numOfGraphs: Int) {
@ -293,18 +244,18 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
}
private fun adjustTimeRange(start: Long) {
overviewData.fromTime = start
overviewData.toTime = overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs()
overviewData.endTime = overviewData.toTime
historyBrowserData.overviewData.fromTime = start
historyBrowserData.overviewData.toTime = historyBrowserData.overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs()
historyBrowserData.overviewData.endTime = historyBrowserData.overviewData.toTime
}
private fun runCalculation(from: String) {
calculationWorkflow.runCalculation(
CalculationWorkflow.HISTORY_CALCULATION,
iobCobCalculator,
overviewData,
historyBrowserData.iobCobCalculator,
historyBrowserData.overviewData,
from,
overviewData.toTime,
historyBrowserData.overviewData.toTime,
bgDataReload = true,
limitDataToOldestAvailable = false,
cause = EventCustomCalculationFinished(),
@ -325,7 +276,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
}
private fun updateDate() {
binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
binding.date.text = dateUtil.dateAndTimeString(historyBrowserData.overviewData.fromTime)
binding.zoom.text = rangeToDisplay.toString()
}
@ -337,9 +288,9 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
updateDate()
val pump = activePlugin.activePump
val graphData = GraphData(injector, binding.bgGraph, overviewData)
val graphData = GraphData(injector, binding.bgGraph, historyBrowserData.overviewData)
val menuChartSettings = overviewMenus.setting
graphData.addInRangeArea(overviewData.fromTime, overviewData.endTime, defaultValueHelper.determineLowLine(), defaultValueHelper.determineHighLine())
graphData.addInRangeArea(historyBrowserData.overviewData.fromTime, historyBrowserData.overviewData.endTime, defaultValueHelper.determineLowLine(), defaultValueHelper.determineHighLine())
graphData.addBgReadings(menuChartSettings[0][OverviewMenus.CharType.PRE.ordinal], context)
if (buildHelper.isDev()) graphData.addBucketedData()
graphData.addTreatments(context)
@ -355,7 +306,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
// set manual x bounds to have nice steps
graphData.setNumVerticalLabels()
graphData.formatAxis(overviewData.fromTime, overviewData.endTime)
graphData.formatAxis(historyBrowserData.overviewData.fromTime, historyBrowserData.overviewData.endTime)
graphData.performUpdate()
@ -365,7 +316,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
val now = System.currentTimeMillis()
for (g in 0 until min(secondaryGraphs.size, menuChartSettings.size + 1)) {
val secondGraphData = GraphData(injector, secondaryGraphs[g], overviewData)
val secondGraphData = GraphData(injector, secondaryGraphs[g], historyBrowserData.overviewData)
var useABSForScale = false
var useIobForScale = false
var useCobForScale = false
@ -393,7 +344,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] && buildHelper.isDev()) secondGraphData.addDeviationSlope(useDSForScale, 1.0)
// set manual x bounds to have nice steps
secondGraphData.formatAxis(overviewData.fromTime, overviewData.endTime)
secondGraphData.formatAxis(historyBrowserData.overviewData.fromTime, historyBrowserData.overviewData.endTime)
secondGraphData.addNowLine(now)
secondaryGraphsData.add(secondGraphData)
}

View file

@ -49,6 +49,7 @@ import info.nightscout.androidaps.utils.alertDialogs.OKDialog.show
import info.nightscout.androidaps.utils.protection.PasswordCheck
import info.nightscout.androidaps.utils.protection.ProtectionCheck.ProtectionType.*
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.openAPSSMBDynamicISF.OpenAPSSMBDynamicISFPlugin
import info.nightscout.shared.SafeParse
import info.nightscout.shared.sharedPreferences.SP
import javax.inject.Inject
@ -79,6 +80,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
@Inject lateinit var nsClientPlugin: NSClientPlugin
@Inject lateinit var openAPSAMAPlugin: OpenAPSAMAPlugin
@Inject lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin
@Inject lateinit var openAPSSMBDynamicISFPlugin: OpenAPSSMBDynamicISFPlugin
@Inject lateinit var safetyPlugin: SafetyPlugin
@Inject lateinit var sensitivityAAPSPlugin: SensitivityAAPSPlugin
@Inject lateinit var sensitivityOref1Plugin: SensitivityOref1Plugin
@ -171,6 +173,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
addPreferencesFromResourceIfEnabled(loopPlugin, rootKey, config.APS)
addPreferencesFromResourceIfEnabled(openAPSAMAPlugin, rootKey, config.APS)
addPreferencesFromResourceIfEnabled(openAPSSMBPlugin, rootKey, config.APS)
addPreferencesFromResourceIfEnabled(openAPSSMBDynamicISFPlugin, rootKey, config.APS)
addPreferencesFromResourceIfEnabled(sensitivityAAPSPlugin, rootKey)
addPreferencesFromResourceIfEnabled(sensitivityWeightedAveragePlugin, rootKey)
addPreferencesFromResourceIfEnabled(sensitivityOref1Plugin, rootKey)
@ -350,7 +353,7 @@ class MyPreferenceFragment : PreferenceFragmentCompat(), OnSharedPreferenceChang
}
}
if (pref is EditTextPreference) {
if (pref.getKey().contains("password") || pref.getKey().contains("pin") || pref.getKey().contains("secret")) {
if (pref.getKey().contains("password") || pref.getKey().contains("pin") || pref.getKey().contains("secret") || pref.getKey().contains("token")) {
pref.setSummary("******")
} else if (pref.text != null) {
pref.dialogMessage = pref.dialogMessage

View file

@ -2,9 +2,9 @@ package info.nightscout.androidaps.activities
import android.content.Context
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.widget.SearchView
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import info.nightscout.androidaps.R
@ -15,6 +15,7 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
private var preferenceId = 0
private var myPreferenceFragment: MyPreferenceFragment? = null
private var searchView: SearchView? = null
private lateinit var binding: ActivityPreferencesBinding
@ -24,15 +25,6 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
binding = ActivityPreferencesBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.prefFilter.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
filterPreferences()
}
override fun afterTextChanged(s: Editable) {}
})
title = rh.gs(R.string.nav_preferences)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
@ -40,12 +32,29 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
preferenceId = intent.getIntExtra("id", -1)
myPreferenceFragment?.arguments = Bundle().also {
it.putInt("id", preferenceId)
it.putString("filter", binding.prefFilter.text.toString())
}
if (savedInstanceState == null)
supportFragmentManager.beginTransaction().replace(R.id.frame_layout, myPreferenceFragment!!).commit()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_preferences, menu)
val searchItem = menu.findItem(R.id.menu_search)
searchView = searchItem.actionView as SearchView
searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
myPreferenceFragment?.setFilter(newText)
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
})
return super.onCreateOptionsMenu(menu)
}
override fun onPreferenceStartScreen(caller: PreferenceFragmentCompat, pref: PreferenceScreen): Boolean {
val fragment = MyPreferenceFragment()
fragment.arguments = Bundle().also {
@ -60,10 +69,6 @@ class PreferencesActivity : NoSplashAppCompatActivity(), PreferenceFragmentCompa
super.attachBaseContext(LocaleHelper.wrap(newBase))
}
private fun filterPreferences() {
myPreferenceFragment?.setFilter(binding.prefFilter.text.toString())
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {

View file

@ -1,13 +1,13 @@
package info.nightscout.androidaps.activities
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.Menu
import android.widget.PopupMenu
import android.widget.ArrayAdapter
import android.widget.TextView
import com.google.android.material.tabs.TabLayout
import com.google.common.collect.Lists
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.data.PureProfile
@ -18,7 +18,6 @@ import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged
import info.nightscout.androidaps.utils.DateUtil
@ -72,61 +71,49 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
binding = ActivityProfilehelperBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.menu1.setOnClickListener {
switchTab(0, typeSelected[0])
}
binding.menu2.setOnClickListener {
switchTab(1, typeSelected[1])
}
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
switchTab(tab.position, typeSelected[tab.position])
}
binding.profileType.setOnClickListener {
PopupMenu(this, binding.profileType).apply {
menuInflater.inflate(R.menu.menu_profilehelper, menu)
setOnMenuItemClickListener { item ->
binding.profileType.setText(item.title)
when (item.itemId) {
R.id.menu_default -> switchTab(tabSelected, ProfileType.MOTOL_DEFAULT)
R.id.menu_default_dpv -> switchTab(tabSelected, ProfileType.DPV_DEFAULT)
R.id.menu_current -> switchTab(tabSelected, ProfileType.CURRENT)
R.id.menu_available -> switchTab(tabSelected, ProfileType.AVAILABLE_PROFILE)
R.id.menu_profileswitch -> switchTab(tabSelected, ProfileType.PROFILE_SWITCH)
}
true
}
show()
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
val profileTypeList = Lists.newArrayList(
rh.gs(R.string.motoldefaultprofile),
rh.gs(R.string.dpvdefaultprofile),
rh.gs(R.string.currentprofile),
rh.gs(R.string.availableprofile),
rh.gs(R.string.careportal_profileswitch)
)
binding.profileType.setAdapter(ArrayAdapter(this, R.layout.spinner_centered, profileTypeList))
binding.profileType.setOnItemClickListener { _, _, _, _ ->
when (binding.profileType.text.toString()) {
rh.gs(R.string.motoldefaultprofile) -> switchTab(tabSelected, ProfileType.MOTOL_DEFAULT)
rh.gs(R.string.dpvdefaultprofile) -> switchTab(tabSelected, ProfileType.DPV_DEFAULT)
rh.gs(R.string.currentprofile) -> switchTab(tabSelected, ProfileType.CURRENT)
rh.gs(R.string.availableprofile) -> switchTab(tabSelected, ProfileType.AVAILABLE_PROFILE)
rh.gs(R.string.careportal_profileswitch) -> switchTab(tabSelected, ProfileType.PROFILE_SWITCH)
}
}
// Active profile
profileList = activePlugin.activeProfileSource.profile?.getProfileList() ?: ArrayList()
binding.availableProfileList.setOnClickListener {
PopupMenu(this, binding.availableProfileList).apply {
var order = 0
for (name in profileList) menu.add(Menu.NONE, order, order++, name)
setOnMenuItemClickListener { item ->
binding.availableProfileList.setText(item.title)
profileUsed[tabSelected] = item.itemId
true
}
show()
}
binding.availableProfileList.setAdapter(ArrayAdapter(this, R.layout.spinner_centered, profileList))
binding.availableProfileList.setOnItemClickListener { _, _, index, _ ->
profileUsed[tabSelected] = index
}
// Profile switch
profileSwitch = repository.getEffectiveProfileSwitchDataFromTime(dateUtil.now() - T.months(2).msecs(), true).blockingGet()
binding.profileswitchList.setOnClickListener {
PopupMenu(this, binding.profileswitchList).apply {
var order = 0
for (name in profileSwitch) menu.add(Menu.NONE, order, order++, name.originalCustomizedName)
setOnMenuItemClickListener { item ->
binding.profileswitchList.setText(item.title)
profileSwitchUsed[tabSelected] = item.itemId
true
}
show()
}
val profileswitchListNames = profileSwitch.map { it.originalCustomizedName }
binding.profileswitchList.setAdapter(ArrayAdapter(this, R.layout.spinner_centered, profileswitchListNames))
binding.profileswitchList.setOnItemClickListener { _, _, index, _ ->
profileSwitchUsed[tabSelected] = index
}
// Default profile
@ -250,7 +237,7 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
private fun getProfile(age: Double, tdd: Double, weight: Double, basalPct: Double, tab: Int): PureProfile? =
try { // profile must not exist
try { // Profile must not exist
when (typeSelected[tab]) {
ProfileType.MOTOL_DEFAULT -> defaultProfile.profile(age, tdd, weight, profileFunction.getUnits())
ProfileType.DPV_DEFAULT -> defaultProfileDPV.profile(age, tdd, basalPct, profileFunction.getUnits())
@ -279,15 +266,13 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
}
private fun switchTab(tab: Int, newContent: ProfileType, storeOld: Boolean = true) {
setBackgroundColorOnSelected(tab)
// Store values for selected tab. listBox values are stored on selection change
if (storeOld) storeValues()
tabSelected = tab
typeSelected[tabSelected] = newContent
binding.profileTypeTitle.defaultHintTextColor = ColorStateList.valueOf(rh.gac( this, if (tab == 0) R.attr.helperProfileColor else R.attr.examinedProfileColor))
// show new content
// Show new content
binding.profileType.setText(
when (typeSelected[tabSelected]) {
ProfileType.MOTOL_DEFAULT -> rh.gs(R.string.motoldefaultprofile)
@ -295,28 +280,27 @@ class ProfileHelperActivity : NoSplashAppCompatActivity() {
ProfileType.CURRENT -> rh.gs(R.string.currentprofile)
ProfileType.AVAILABLE_PROFILE -> rh.gs(R.string.availableprofile)
ProfileType.PROFILE_SWITCH -> rh.gs(R.string.careportal_profileswitch)
}
},
false
)
binding.defaultProfile.visibility = (newContent == ProfileType.MOTOL_DEFAULT || newContent == ProfileType.DPV_DEFAULT).toVisibility()
binding.currentProfile.visibility = (newContent == ProfileType.CURRENT).toVisibility()
binding.availableProfile.visibility = (newContent == ProfileType.AVAILABLE_PROFILE).toVisibility()
binding.profileSwitch.visibility = (newContent == ProfileType.PROFILE_SWITCH).toVisibility()
// restore selected values
// Restore selected values
binding.age.value = ageUsed[tabSelected]
binding.weight.value = weightUsed[tabSelected]
binding.tdd.value = tddUsed[tabSelected]
binding.basalPctFromTdd.value = pctUsed[tabSelected]
binding.basalPctFromTddRow.visibility = (newContent == ProfileType.DPV_DEFAULT).toVisibility()
if (profileList.isNotEmpty())
binding.availableProfileList.setText(profileList[profileUsed[tabSelected]].toString())
if (profileSwitch.isNotEmpty())
binding.profileswitchList.setText(profileSwitch[profileSwitchUsed[tabSelected]].originalCustomizedName)
if (profileList.isNotEmpty()) {
binding.availableProfileList.setText(profileList[profileUsed[tabSelected]].toString(), false)
}
if (profileSwitch.isNotEmpty()) {
binding.profileswitchList.setText(profileSwitch[profileSwitchUsed[tabSelected]].originalCustomizedName, false)
}
}
private fun setBackgroundColorOnSelected(tab: Int) {
binding.menu1.setBackgroundColor(rh.gac(this, if (tab == 1) R.attr.defaultBackground else R.attr.helperProfileColor))
binding.menu2.setBackgroundColor(rh.gac(this, if (tab == 0) R.attr.defaultBackground else R.attr.examinedProfileColor))
}
}

View file

@ -0,0 +1,72 @@
package info.nightscout.androidaps.activities.fragments
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.OverviewData
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.workflow.CalculationWorkflow
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.sharedPreferences.SP
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class HistoryBrowserData @Inject constructor(
injector: HasAndroidInjector,
aapsSchedulers: AapsSchedulers,
rxBus: RxBus,
aapsLogger: AAPSLogger,
rh: ResourceHelper,
dateUtil: DateUtil,
sp: SP,
activePlugin: ActivePlugin,
defaultValueHelper: DefaultValueHelper,
profileFunction: ProfileFunction,
repository: AppRepository,
fabricPrivacy: FabricPrivacy,
calculationWorkflow: CalculationWorkflow
) {
var iobCobCalculator: IobCobCalculatorPlugin
var overviewData: OverviewData
init {
// We don't want to use injected singletons but own instance working on top of different data
overviewData =
OverviewData(
aapsLogger,
rh,
dateUtil,
sp,
activePlugin,
defaultValueHelper,
profileFunction,
repository,
fabricPrivacy
)
iobCobCalculator =
IobCobCalculatorPlugin(
injector,
aapsLogger,
aapsSchedulers,
rxBus,
sp,
rh,
profileFunction,
activePlugin,
fabricPrivacy,
dateUtil,
repository,
overviewData,
calculationWorkflow
)
}
}

View file

@ -56,9 +56,9 @@ class CarbsDialog : DialogFragmentWithDate() {
companion object {
private const val FAV1_DEFAULT = 5
private const val FAV2_DEFAULT = 10
private const val FAV3_DEFAULT = 20
const val FAV1_DEFAULT = 5
const val FAV2_DEFAULT = 10
const val FAV3_DEFAULT = 20
}
private var queryingProtection = false
@ -143,7 +143,7 @@ class CarbsDialog : DialogFragmentWithDate() {
)
val plus1text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_1, FAV1_DEFAULT))
binding.plus1.text = plus1text
binding.plus1.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus1text
binding.plus1.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus1text
binding.plus1.setOnClickListener {
binding.carbs.value = max(
0.0, binding.carbs.value
@ -155,7 +155,7 @@ class CarbsDialog : DialogFragmentWithDate() {
val plus2text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_2, FAV2_DEFAULT))
binding.plus2.text = plus2text
binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus2text
binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus2text
binding.plus2.setOnClickListener {
binding.carbs.value = max(
0.0, binding.carbs.value
@ -166,7 +166,7 @@ class CarbsDialog : DialogFragmentWithDate() {
}
val plus3text = toSignedString(sp.getInt(R.string.key_carbs_button_increment_3, FAV3_DEFAULT))
binding.plus3.text = plus3text
binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus3text
binding.plus2.contentDescription = rh.gs(R.string.treatments_wizard_carbs_label) + " " + plus3text
binding.plus3.setOnClickListener {
binding.carbs.value = max(
0.0, binding.carbs.value
@ -179,7 +179,7 @@ class CarbsDialog : DialogFragmentWithDate() {
setOnValueChangedListener { eventTime: Long ->
run {
val timeOffset = ((eventTime - eventTimeOriginal) / (1000 * 60)).toDouble()
binding.time.value = timeOffset
if (_binding != null) binding.time.value = timeOffset
}
}
@ -250,7 +250,8 @@ class CarbsDialog : DialogFragmentWithDate() {
val hypoSelected = binding.hypoTt.isChecked
if (hypoSelected)
actions.add(
rh.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(hypoTT) + " " + unitLabel + " (" + rh.gs(R.string.format_mins, hypoTTDuration) + ")").formatColor( context,
rh.gs(R.string.temptargetshort) + ": " + (DecimalFormatter.to1Decimal(hypoTT) + " " + unitLabel + " (" + rh.gs(R.string.format_mins, hypoTTDuration) + ")").formatColor(
context,
rh,
R.attr.tempTargetConfirmation
)
@ -258,7 +259,7 @@ class CarbsDialog : DialogFragmentWithDate() {
val timeOffset = binding.time.value.toInt()
if (useAlarm && carbs > 0 && timeOffset > 0)
actions.add(rh.gs(R.string.alarminxmin, timeOffset).formatColor(context , rh, R.attr.infoColor))
actions.add(rh.gs(R.string.alarminxmin, timeOffset).formatColor(context, rh, R.attr.infoColor))
val duration = binding.duration.value.toInt()
if (duration > 0)
actions.add(rh.gs(R.string.duration) + ": " + duration + rh.gs(R.string.shorthour))
@ -385,7 +386,7 @@ class CarbsDialog : DialogFragmentWithDate() {
override fun onResume() {
super.onResume()
if(!queryingProtection) {
if (!queryingProtection) {
queryingProtection = true
activity?.let { activity ->
val cancelFail = {

View file

@ -58,9 +58,9 @@ class InsulinDialog : DialogFragmentWithDate() {
companion object {
private const val PLUS1_DEFAULT = 0.5
private const val PLUS2_DEFAULT = 1.0
private const val PLUS3_DEFAULT = 2.0
const val PLUS1_DEFAULT = 0.5
const val PLUS2_DEFAULT = 1.0
const val PLUS3_DEFAULT = 2.0
}
private var queryingProtection = false

View file

@ -345,6 +345,7 @@ class WizardDialog : DaggerDialogFragment() {
val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
runOnUiThread {
_binding ?: return@runOnUiThread
if (carbsPassedIntoWizard != 0.0) {
binding.carbsInput.value = carbsPassedIntoWizard
}

View file

@ -22,6 +22,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.stats.TddCalculator
import info.nightscout.shared.SafeParse
import info.nightscout.shared.logging.AAPSLogger
@ -36,6 +37,7 @@ import java.io.IOException
import java.lang.reflect.InvocationTargetException
import java.nio.charset.StandardCharsets
import javax.inject.Inject
import kotlin.math.ln
class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scriptReader: ScriptReader, private val injector: HasAndroidInjector) : DetermineBasalAdapterInterface {
@ -194,10 +196,6 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri
this.profile.put("current_basal_safety_multiplier", sp.getDouble(R.string.key_openapsama_current_basal_safety_multiplier, 4.0))
this.profile.put("lgsThreshold", Profile.toMgdl(sp.getDouble(R.string.key_lgs_threshold, 65.0)))
val insulin = activePlugin.activeInsulin
val insulinType = insulin.friendlyName
val insulinPeak = insulin.peak
//mProfile.put("high_temptarget_raises_sensitivity", SP.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity));
this.profile.put("high_temptarget_raises_sensitivity", sp.getBoolean(R.string.key_high_temptarget_raises_sensitivity, SMBDefaults.high_temptarget_raises_sensitivity))
//mProfile.put("low_temptarget_lowers_sensitivity", SP.getBoolean(R.string.key_low_temptarget_lowers_sensitivity, SMBDefaults.low_temptarget_lowers_sensitivity));
@ -227,9 +225,6 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri
this.profile.put("enableSMB_after_carbs", smbEnabled && sp.getBoolean(R.string.key_enableSMB_after_carbs, false) && advancedFiltering)
this.profile.put("maxSMBBasalMinutes", sp.getInt(R.string.key_smbmaxminutes, SMBDefaults.maxSMBBasalMinutes))
this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes))
this.profile.put("DynISFAdjust", SafeParse.stringToDouble(sp.getString(R.string.key_DynISFAdjust, "100")))
this.profile.put("insulinType", insulinType)
this.profile.put("insulinPeak", insulinPeak)
this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes))
//set the min SMB amount to be the amount set by the pump.
this.profile.put("bolus_increment", pumpBolusStep)
@ -237,8 +232,7 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri
this.profile.put("current_basal", basalRate)
this.profile.put("temptargetSet", tempTargetSet)
this.profile.put("autosens_max", SafeParse.stringToDouble(sp.getString(R.string.key_openapsama_autosens_max, "1.2")))
this.profile.put("autosens_min", SafeParse.stringToDouble(sp.getString(R.string.key_openapsama_autosens_min, "0.8")))
this.profile.put("openapsama_useautosens", sp.getBoolean(R.string.key_openapsama_useautosens, false))
this.profile.put("autosens_min", SafeParse.stringToDouble(sp.getString(R.string.key_openapsama_autosens_min, "0.7")))
//set the min SMB amount to be the amount set by the pump.
if (profileFunction.getUnits() == GlucoseUnit.MMOL) {
this.profile.put("out_units", "mmol/L")
@ -270,19 +264,53 @@ class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scri
this.mealData.put("lastBolusTime", mealData.lastBolusTime)
this.mealData.put("lastCarbTime", mealData.lastCarbTime)
this.mealData.put("TDDAIMI1", tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount)
this.mealData.put("TDDAIMI7", tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount)
this.mealData.put("TDDLast4", tddCalculator.calculateDaily(-4, 0).totalAmount)
this.mealData.put("TDD4to8", tddCalculator.calculateDaily(-8, -4).totalAmount)
this.mealData.put("TDD24", tddCalculator.calculateDaily(-24, 0).totalAmount)
val tdd1D = tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount
val tdd7D = tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount
val tddLast24H = tddCalculator.calculateDaily(-24, 0).totalAmount
val tddLast4H = tddCalculator.calculateDaily(-4, 0).totalAmount
val tddLast8to4H = tddCalculator.calculateDaily(-8, -4).totalAmount
val tddWeightedFromLast8H = ((1.4 * tddLast4H) + (0.6 * tddLast8to4H)) * 3
// console.error("Rolling 8 hours weight average: " + tdd_last8_wt + "; ");
// console.error("1-day average TDD is: " + tdd1 + "; ");
// console.error("7-day average TDD is: " + tdd7 + "; ");
var tdd =
if (tdd1D != null && tdd7D != null) (tddWeightedFromLast8H * 0.33) + (tdd7D * 0.34) + (tdd1D * 0.33)
else tddWeightedFromLast8H
// console.log("TDD = " + TDD + " using average of 7-day, 1-day and weighted 8hr average");
if (constraintChecker.isAutosensModeEnabled().value()) {
autosensData.put("ratio", autosensDataRatio)
} else {
autosensData.put("ratio", 1.0)
// console.log("Insulin Peak = " + insulin.peak + "; ");
val insulin = activePlugin.activeInsulin
val insulinDivisor = when {
insulin.peak > 65 -> 55 // lyumjev peak: 45
insulin.peak > 50 -> 65 // ultra rapid peak: 55
else -> 75 // rapid peak: 75
}
// console.log("For " + insulin.friendlyName + " (insulin peak: " + insulin.peak + ") insulin divisor is: " + ins_val + "; ");
val dynISFadjust = SafeParse.stringToDouble(sp.getString(R.string.key_DynISFAdjust, "100")) / 100.0
tdd *= dynISFadjust
var variableSensitivity = 1800 / (tdd * (ln((glucoseStatus.glucose / insulinDivisor) + 1)))
variableSensitivity = Round.roundTo(variableSensitivity, 0.1)
if (dynISFadjust != 1.0) {
// console.log("TDD adjusted to " + TDD + " using adjustment factor of " + dynISFadjust + "; ");
}
// console.log("Current sensitivity for predictions is " + variable_sens + " based on current bg");
this.profile.put("variable_sens", variableSensitivity)
this.profile.put("insulinDivisor", insulinDivisor)
this.profile.put("TDD", tdd)
if (sp.getBoolean(R.string.key_adjust_sensitivity, false) && tdd7D != null)
autosensData.put("ratio", tddLast24H / tdd7D)
else
autosensData.put("ratio", 1.0)
this.microBolusAllowed = microBolusAllowed
smbAlwaysAllowed = advancedFiltering
currentTime = now

View file

@ -68,6 +68,7 @@ class OpenAPSSMBDynamicISFPlugin @Inject constructor(
.shortName(R.string.dynisf_shortname)
.preferencesId(R.xml.pref_openapssmbdynamicisf)
.setDefault(false)
.showInList(buildHelper.isEngineeringMode() && buildHelper.isDev())
}
override fun specialEnableCondition(): Boolean = buildHelper.isEngineeringMode() && buildHelper.isDev()

View file

@ -178,6 +178,21 @@ class Objective2(injector: HasAndroidInjector) : Objective(injector, "exam", R.s
.option(Option(R.string.iob_negiob, true))
.option(Option(R.string.iob_posiob, true))
)
tasks.add(ExamTask(this, R.string.cob_label, R.string.cob_question, "cob1")
.option(Option(R.string.cob_longer, true))
.option(Option(R.string.cob_shorter, false))
.option(Option(R.string.cob_no_effect, false))
)
tasks.add(ExamTask(this, R.string.cob_label, R.string.cob2_question, "cob2")
.option(Option(R.string.cob2_longer, false))
.option(Option(R.string.cob2_shorter, true))
.option(Option(R.string.cob2_no_effect, false))
)
tasks.add(ExamTask(this, R.string.cob_label, R.string.cob3_question, "cob3")
.option(Option(R.string.cob3_longer, false))
.option(Option(R.string.cob3_shorter, false))
.option(Option(R.string.cob3_no_effect, true))
)
tasks.add(ExamTask(this, R.string.breadgrams_label, R.string.blank, "breadgrams")
.option(Option(R.string.breadgrams_grams, true))
.option(Option(R.string.breadgrams_exchange, false))

View file

@ -312,7 +312,7 @@ class ActionsFragment : DaggerFragment() {
for (customAction in customActions) {
if (!customAction.isEnabled) continue
val btn = SingleClickButton(currentContext, null, android.R.attr.buttonStyle)
val btn = SingleClickButton(currentContext, null, R.attr.customBtnStyle)
btn.text = rh.gs(customAction.name)
val layoutParams = LinearLayout.LayoutParams(

View file

@ -18,37 +18,37 @@ import dagger.android.HasAndroidInjector
import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.LocalInsulin
import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.ValueWithUnit
import info.nightscout.androidaps.databinding.AutotuneFragmentBinding
import info.nightscout.androidaps.dialogs.ProfileViewerDialog
import info.nightscout.androidaps.extensions.runOnUiThread
import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.autotune.data.ATProfile
import info.nightscout.androidaps.plugins.general.autotune.events.EventAutotuneUpdateGui
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged
import info.nightscout.androidaps.data.LocalInsulin
import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.ValueWithUnit
import info.nightscout.androidaps.extensions.runOnUiThread
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.MidnightTime
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.alertDialogs.OKDialog.showConfirmation
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.SafeParse
import info.nightscout.shared.sharedPreferences.SP
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import org.json.JSONObject
//import org.slf4j.LoggerFactory
import java.text.DecimalFormat
import java.util.*
import javax.inject.Inject
class AutotuneFragment : DaggerFragment() {
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var autotunePlugin: AutotunePlugin
@Inject lateinit var autotuneFS: AutotuneFS
@ -61,13 +61,16 @@ class AutotuneFragment : DaggerFragment() {
@Inject lateinit var rh: ResourceHelper
@Inject lateinit var rxBus: RxBus
@Inject lateinit var injector: HasAndroidInjector
@Inject lateinit var aapsSchedulers: AapsSchedulers
private var disposable: CompositeDisposable = CompositeDisposable()
//private val log = LoggerFactory.getLogger(AutotunePlugin::class.java)
private var _binding: AutotuneFragmentBinding? = null
private lateinit var profileStore: ProfileStore
private var profileName = ""
private lateinit var profile: ATProfile
private var profile: ATProfile? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
@ -88,15 +91,15 @@ class AutotuneFragment : DaggerFragment() {
profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil)
profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString()
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector)
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector)
}
binding.tuneDays.setParams(
savedInstanceState?.getDouble("tunedays")
?: defaultValue, 1.0, 30.0, 1.0, DecimalFormat("0"), false, null, textWatcher)
?: defaultValue, 1.0, 30.0, 1.0, DecimalFormat("0"), false, null, textWatcher
)
binding.autotuneRun.setOnClickListener {
val daysBack = SafeParse.stringToInt(binding.tuneDays.text)
autotunePlugin.calculationRunning = true
autotunePlugin.lastNbDays = daysBack.toString()
log("Run Autotune $profileName, $daysBack days")
Thread {
@ -105,14 +108,14 @@ class AutotuneFragment : DaggerFragment() {
updateGui()
}
binding.profileList.onItemClickListener = AdapterView.OnItemClickListener { _, _, _, _ ->
if (!autotunePlugin.calculationRunning)
{
if (!autotunePlugin.calculationRunning) {
profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString()
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector)
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector)
}
autotunePlugin.selectedProfile = profileName
resetParam()
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
}
updateGui()
}
@ -120,10 +123,10 @@ class AutotuneFragment : DaggerFragment() {
binding.autotuneCopylocal.setOnClickListener {
val localName = rh.gs(R.string.autotune_tunedprofile_name) + " " + dateUtil.dateAndTimeString(autotunePlugin.lastRun)
val circadian = sp.getBoolean(R.string.key_autotune_circadian_ic_isf, false)
autotunePlugin.tunedProfile?.let { tunedProfile ->
autotunePlugin.tunedProfile?.let { tunedProfile ->
showConfirmation(requireContext(),
rh.gs(R.string.autotune_copy_localprofile_button),
rh.gs(R.string.autotune_copy_local_profile_message) + "\n" + localName + " " + dateUtil.dateAndTimeString(autotunePlugin.lastRun),
rh.gs(R.string.autotune_copy_local_profile_message) + "\n" + localName,
Runnable {
localProfilePlugin.addProfile(localProfilePlugin.copyFrom(tunedProfile.getProfile(circadian), localName))
rxBus.send(EventLocalProfileChanged())
@ -204,13 +207,13 @@ class AutotuneFragment : DaggerFragment() {
binding.autotuneCompare.setOnClickListener {
val pumpProfile = autotunePlugin.pumpProfile
val circadian = sp.getBoolean(R.string.key_autotune_circadian_ic_isf, false)
val tunedprofile = if (circadian) autotunePlugin.tunedProfile?.circadianProfile else autotunePlugin.tunedProfile?.profile
val tunedProfile = if (circadian) autotunePlugin.tunedProfile?.circadianProfile else autotunePlugin.tunedProfile?.profile
ProfileViewerDialog().also { pvd ->
pvd.arguments = Bundle().also {
it.putLong("time", dateUtil.now())
it.putInt("mode", ProfileViewerDialog.Mode.PROFILE_COMPARE.ordinal)
it.putString("customProfile", pumpProfile.profile.toPureNsJson(dateUtil).toString())
it.putString("customProfile2", tunedprofile?.toPureNsJson(dateUtil).toString())
it.putString("customProfile2", tunedProfile?.toPureNsJson(dateUtil).toString())
it.putString("customProfileUnits", profileFunction.getUnits().asText)
it.putString("customProfileName", pumpProfile.profilename + "\n" + rh.gs(R.string.autotune_tunedprofile_name))
}
@ -270,11 +273,10 @@ class AutotuneFragment : DaggerFragment() {
super.onResume()
disposable += rxBus
.toObservable(EventAutotuneUpdateGui::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
updateGui()
}, { fabricPrivacy.logException(it) })
.observeOn(aapsSchedulers.main)
.subscribe({ updateGui() }, fabricPrivacy::logException)
checkNewDay()
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
updateGui()
}
@ -287,11 +289,10 @@ class AutotuneFragment : DaggerFragment() {
@Synchronized
private fun updateGui() {
_binding ?: return
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil)
profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString()
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector)
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector)
}
val profileList: ArrayList<CharSequence> = profileStore.getProfileList()
profileList.add(0, rh.gs(R.string.active))
@ -315,17 +316,18 @@ class AutotuneFragment : DaggerFragment() {
autotunePlugin.calculationRunning -> {
binding.tuneWarning.text = rh.gs(R.string.autotune_warning_during_run)
}
autotunePlugin.lastRunSuccess -> {
binding.autotuneCopylocal.visibility = View.VISIBLE
binding.autotuneUpdateProfile.visibility = autotunePlugin.updateButtonVisibility
binding.autotuneRevertProfile.visibility = if (autotunePlugin.updateButtonVisibility == View.VISIBLE) View.GONE else View.VISIBLE
binding.autotuneProfileswitch.visibility = View.VISIBLE
binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run)
binding.autotuneCopylocal.visibility = View.VISIBLE
binding.autotuneUpdateProfile.visibility = autotunePlugin.updateButtonVisibility
binding.autotuneRevertProfile.visibility = if (autotunePlugin.updateButtonVisibility == View.VISIBLE) View.GONE else View.VISIBLE
binding.autotuneProfileswitch.visibility = View.VISIBLE
binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run)
binding.autotuneCompare.visibility = View.VISIBLE
}
else -> {
if (profile.isValid)
binding.autotuneRun.visibility = View.VISIBLE
binding.autotuneRun.visibility = (profile?.isValid == true).toVisibility()
binding.autotuneCheckInputProfile.visibility = View.VISIBLE
}
}
@ -335,10 +337,9 @@ class AutotuneFragment : DaggerFragment() {
private fun checkNewDay() {
val runToday = autotunePlugin.lastRun > MidnightTime.calc(dateUtil.now() - autotunePlugin.autotuneStartHour * 3600 * 1000L) + autotunePlugin.autotuneStartHour * 3600 * 1000L
if (runToday && autotunePlugin.result != "")
{
if (runToday && autotunePlugin.result != "") {
binding.tuneWarning.text = rh.gs(R.string.autotune_warning_after_run)
} else if (!runToday || autotunePlugin.result.isEmpty()) { //if new day reinit result, default days, warning and button's visibility
} else if (!runToday || autotunePlugin.result.isEmpty()) { //if new day re-init result, default days, warning and button's visibility
resetParam(!runToday)
}
}
@ -348,17 +349,18 @@ class AutotuneFragment : DaggerFragment() {
var nl = ""
if (profileFunction.getProfile() == null) {
warning = rh.gs(R.string.profileswitch_ismissing)
return warning
return warning
}
profileFunction.getProfile()?.let { currentProfile ->
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?:currentProfile, LocalInsulin(""), injector)
if (!profile.isValid) return rh.gs(R.string.autotune_profile_invalid)
if (profile.icSize > 1) {
warning += nl + rh.gs(R.string.autotune_ic_warning, profile.icSize, profile.ic)
nl = "\n"
}
if (profile.isfSize > 1) {
warning += nl + rh.gs(R.string.autotune_isf_warning, profile.isfSize, Profile.fromMgdlToUnits(profile.isf, profileFunction.getUnits()), profileFunction.getUnits().asText)
profile = ATProfile(profileStore.getSpecificProfile(profileName)?.let { ProfileSealed.Pure(it) } ?: currentProfile, LocalInsulin(""), injector).also { profile ->
if (!profile.isValid) return rh.gs(R.string.autotune_profile_invalid)
if (profile.icSize > 1) {
warning += nl + rh.gs(R.string.autotune_ic_warning, profile.icSize, profile.ic)
nl = "\n"
}
if (profile.isfSize > 1) {
warning += nl + rh.gs(R.string.autotune_isf_warning, profile.isfSize, Profile.fromMgdlToUnits(profile.isf, profileFunction.getUnits()), profileFunction.getUnits().asText)
}
}
}
return warning
@ -376,18 +378,23 @@ class AutotuneFragment : DaggerFragment() {
}
private val textWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable) { updateGui() }
override fun afterTextChanged(s: Editable) {
updateGui()
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
if (binding.tuneDays.text.isNotEmpty()) {
try {
if (autotunePlugin.calculationRunning)
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
if (binding.tuneDays.value != autotunePlugin.lastNbDays.toDouble()) {
if (binding.tuneDays.text != autotunePlugin.lastNbDays) {
autotunePlugin.lastNbDays = binding.tuneDays.text
resetParam(false)
}
} catch (e:Exception) { }
} catch (e: Exception) {
fabricPrivacy.logException(e)
}
}
}
}
@ -469,7 +476,7 @@ class AutotuneFragment : DaggerFragment() {
}
}
private fun toTableRowHeader(basal:Boolean = false): TableRow =
private fun toTableRowHeader(basal: Boolean = false): TableRow =
TableRow(context).also { header ->
val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT).apply { weight = 1f }
header.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT).apply { gravity = Gravity.CENTER_HORIZONTAL }
@ -500,7 +507,7 @@ class AutotuneFragment : DaggerFragment() {
})
}
private fun toTableRowValue(hour: String, inputValue: Double, tunedValue: Double, format:String = "%.3f", missing: String = ""): TableRow =
private fun toTableRowValue(hour: String, inputValue: Double, tunedValue: Double, format: String = "%.3f", missing: String = ""): TableRow =
TableRow(context).also { row ->
val percentValue = Round.roundTo(tunedValue / inputValue * 100 - 100, 1.0).toInt().toString() + "%"
val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT).apply { weight = 1f }

View file

@ -2,34 +2,34 @@ package info.nightscout.androidaps.plugins.general.autotune
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.*
import info.nightscout.androidaps.data.IobTotal
import info.nightscout.androidaps.data.LocalInsulin
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.database.entities.*
import info.nightscout.androidaps.extensions.durationInMinutes
import info.nightscout.androidaps.extensions.iobCalc
import info.nightscout.androidaps.extensions.toJson
import info.nightscout.androidaps.extensions.toTemporaryBasal
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.general.autotune.data.ATProfile
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.T
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import org.json.JSONArray
import org.json.JSONObject
import org.slf4j.LoggerFactory
import java.util.*
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.ceil
import kotlin.math.roundToInt
@Singleton
class AutotuneIob @Inject constructor(
open class AutotuneIob @Inject constructor(
private val aapsLogger: AAPSLogger,
private val repository: AppRepository,
private val profileFunction: ProfileFunction,
@ -39,12 +39,12 @@ class AutotuneIob @Inject constructor(
private val autotuneFS: AutotuneFS
) {
private val nsTreatments = ArrayList<NsTreatment>()
private var nsTreatments = ArrayList<NsTreatment>()
private var dia: Double = Constants.defaultDIA
var boluses: MutableList<Bolus> = ArrayList()
var boluses: ArrayList<Bolus> = ArrayList()
var meals = ArrayList<Carbs>()
lateinit var glucose: List<GlucoseValue> // newest at index 0
private lateinit var tempBasals: MutableList<TemporaryBasal>
private lateinit var tempBasals: ArrayList<TemporaryBasal>
var startBG: Long = 0
var endBG: Long = 0
private fun range(): Long = (60 * 60 * 1000L * dia + T.hours(2).msecs()).toLong()
@ -59,24 +59,38 @@ class AutotuneIob @Inject constructor(
initializeTreatmentData(from - range(), to)
initializeTempBasalData(from - range(), to, tunedProfile)
initializeExtendedBolusData(from - range(), to, tunedProfile)
Collections.sort(tempBasals) { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() }
// Without Neutral TBR, Autotune Web will ignore iob for periods without TBR running
addNeutralTempBasal(from - range(), to, tunedProfile)
Collections.sort(nsTreatments) { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() }
Collections.sort(boluses) { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() }
log.debug("D/AutotunePlugin: Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size)
sortTempBasal()
addNeutralTempBasal(from - range(), to, tunedProfile) // Without Neutral TBR, Autotune Web will ignore iob for periods without TBR running
sortNsTreatments()
sortBoluses()
aapsLogger.debug(LTag.AUTOTUNE, "Nb Treatments: " + nsTreatments.size + " Nb meals: " + meals.size)
}
@Synchronized
private fun sortTempBasal() {
tempBasals = ArrayList(tempBasals.toList().sortedWith { o1: TemporaryBasal, o2: TemporaryBasal -> (o2.timestamp - o1.timestamp).toInt() })
}
@Synchronized
private fun sortNsTreatments() {
nsTreatments = ArrayList(nsTreatments.toList().sortedWith { o1: NsTreatment, o2: NsTreatment -> (o2.date - o1.date).toInt() })
}
@Synchronized
private fun sortBoluses() {
boluses = ArrayList(boluses.toList().sortedWith { o1: Bolus, o2: Bolus -> (o2.timestamp - o1.timestamp).toInt() })
}
private fun initializeBgreadings(from: Long, to: Long) {
glucose = repository.compatGetBgReadingsDataFromTime(from, to, false).blockingGet();
glucose = repository.compatGetBgReadingsDataFromTime(from, to, false).blockingGet()
}
//nsTreatment is used only for export data, meals is used in AutotunePrep
private fun initializeTreatmentData(from: Long, to: Long) {
val oldestBgDate = if (glucose.size > 0) glucose[glucose.size - 1].timestamp else from
log.debug("AutotunePlugin Check BG date: BG Size: " + glucose.size + " OldestBG: " + dateUtil.dateAndTimeAndSecondsString(oldestBgDate) + " to: " + dateUtil.dateAndTimeAndSecondsString(to))
val oldestBgDate = if (glucose.isNotEmpty()) glucose[glucose.size - 1].timestamp else from
aapsLogger.debug(LTag.AUTOTUNE, "Check BG date: BG Size: " + glucose.size + " OldestBG: " + dateUtil.dateAndTimeAndSecondsString(oldestBgDate) + " to: " + dateUtil.dateAndTimeAndSecondsString(to))
val tmpCarbs = repository.getCarbsDataFromTimeToTimeExpanded(from, to, false).blockingGet()
log.debug("AutotunePlugin Nb treatments after query: " + tmpCarbs.size)
aapsLogger.debug(LTag.AUTOTUNE, "Nb treatments after query: " + tmpCarbs.size)
meals.clear()
boluses.clear()
var nbCarbs = 0
@ -146,6 +160,7 @@ class AutotuneIob @Inject constructor(
// addNeutralTempBasal will add a fake neutral TBR (100%) to have correct basal rate in exported file for periods without TBR running
// to be able to compare results between oref0 algo and aaps
@Synchronized
private fun addNeutralTempBasal(from: Long, to: Long, tunedProfile: ATProfile) {
var previousStart = to
for (i in tempBasals.indices) {
@ -180,6 +195,7 @@ class AutotuneIob @Inject constructor(
// toSplittedTimestampTB will split all TBR across hours in different TBR with correct absolute value to be sure to have correct basal rate
// even if profile rate is not the same
@Synchronized
private fun toSplittedTimestampTB(tb: TemporaryBasal, tunedProfile: ATProfile) {
var splittedTimestamp = tb.timestamp
val cutInMilliSec = T.mins(60).msecs() //30 min to compare with oref0, 60 min to improve accuracy
@ -217,7 +233,7 @@ class AutotuneIob @Inject constructor(
tempBasals.add(newtb)
nsTreatments.add(NsTreatment(newtb))
splittedTimestamp += durationFilled
splittedDuration = splittedDuration - durationFilled
splittedDuration -= durationFilled
val profile = profileFunction.getProfile(newtb.timestamp) ?:continue
boluses.addAll(convertToBoluses(newtb, profile, tunedProfile.profile)) // required for correct iob calculation with oref0 algo
}
@ -225,7 +241,7 @@ class AutotuneIob @Inject constructor(
}
}
fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal {
open fun getIOB(time: Long, localInsulin: LocalInsulin): IobTotal {
val bolusIob = getCalculationToTimeTreatments(time, localInsulin).round()
return bolusIob
}
@ -295,7 +311,7 @@ class AutotuneIob @Inject constructor(
return result
}
@Synchronized
fun glucoseToJSON(): String {
val glucoseJson = JSONArray()
for (bgreading in glucose)
@ -303,6 +319,7 @@ class AutotuneIob @Inject constructor(
return glucoseJson.toString(2)
}
@Synchronized
fun bolusesToJSON(): String {
val bolusesJson = JSONArray()
for (bolus in boluses)
@ -310,6 +327,7 @@ class AutotuneIob @Inject constructor(
return bolusesJson.toString(2)
}
@Synchronized
fun nsHistoryToJSON(): String {
val json = JSONArray()
for (t in nsTreatments) {
@ -363,9 +381,11 @@ class AutotuneIob @Inject constructor(
}
}
TherapyEvent.Type.COMBO_BOLUS ->
extendedBolus?.let {
val profile = profileFunction.getProfile(it.timestamp)
it.toJson(true, profile!!, dateUtil)
extendedBolus?.let { ebr ->
val profile = profileFunction.getProfile(ebr.timestamp)
profile?.let {
ebr.toJson(true, it, dateUtil)
}
}
TherapyEvent.Type.CORRECTION_BOLUS -> bolusTreatment?.toJson(true, dateUtil)
TherapyEvent.Type.CARBS_CORRECTION -> carbsTreatment?.toJson(true, dateUtil)
@ -377,8 +397,4 @@ class AutotuneIob @Inject constructor(
private fun log(message: String) {
autotuneFS.atLog("[iob] $message")
}
companion object {
private val log = LoggerFactory.getLogger(AutotunePlugin::class.java)
}
}

View file

@ -22,6 +22,7 @@ import info.nightscout.androidaps.utils.MidnightTime
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import org.json.JSONException
import org.json.JSONObject
@ -60,12 +61,13 @@ class AutotunePlugin @Inject constructor(
.pluginName(R.string.autotune)
.shortName(R.string.autotune_shortname)
.preferencesId(R.xml.pref_autotune)
.showInList(buildHelper.isEngineeringMode() && buildHelper.isDev())
.description(R.string.autotune_description),
aapsLogger, resourceHelper, injector
), Autotune {
@Volatile override var lastRunSuccess: Boolean = false
@Volatile var result: String = ""
@Volatile var calculationRunning: Boolean = false
@Volatile override var calculationRunning: Boolean = false
@Volatile var lastRun: Long = 0
@Volatile var selectedProfile = ""
@Volatile var lastNbDays: String = ""
@ -76,21 +78,34 @@ class AutotunePlugin @Inject constructor(
private lateinit var profile: Profile
val autotuneStartHour: Int = 4
override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String): String {
override fun aapsAutotune(daysBack: Int, autoSwitch: Boolean, profileToTune: String) {
lastRunSuccess = false
if (calculationRunning) {
aapsLogger.debug(LTag.AUTOMATION, "Autotune run detected, Autotune Run Cancelled")
return
}
calculationRunning = true
tunedProfile = null
updateButtonVisibility = View.GONE
lastRunSuccess = false
var logResult = ""
result = ""
if (profileFunction.getProfile() == null) {
result = rh.gs(R.string.profileswitch_ismissing)
return result
rxBus.send(EventAutotuneUpdateGui())
calculationRunning = false
return
}
val detailedLog = sp.getBoolean(R.string.key_autotune_additional_log, false)
calculationRunning = true
lastNbDays = "" + daysBack
lastRun = dateUtil.now()
val profileStore = activePlugin.activeProfileSource.profile ?: return rh.gs(R.string.profileswitch_ismissing)
val profileStore = activePlugin.activeProfileSource.profile
if (profileStore == null) {
result = rh.gs(R.string.profileswitch_ismissing)
rxBus.send(EventAutotuneUpdateGui())
calculationRunning = false
return
}
selectedProfile = if (profileToTune.isEmpty()) profileFunction.getProfileName() else profileToTune
profileFunction.getProfile()?.let { currentProfile ->
profile = profileStore.getSpecificProfile(profileToTune)?.let { ProfileSealed.Pure(it) } ?: currentProfile
@ -144,11 +159,11 @@ class AutotunePlugin @Inject constructor(
if (tunedProfile == null) {
result = rh.gs(R.string.autotune_error)
log("TunedProfile is null on day ${i + 1}")
calculationRunning = false
rxBus.send(EventAutotuneUpdateGui())
autotuneFS.exportResult(result)
autotuneFS.exportLogAndZip(lastRun)
return result
rxBus.send(EventAutotuneUpdateGui())
calculationRunning = false
return
}
}
result = rh.gs(R.string.autotune_result, dateUtil.dateAndTimeString(lastRun))
@ -193,13 +208,16 @@ class AutotunePlugin @Inject constructor(
}
tunedProfile?.let {
lastRunSuccess = true
saveLastRun()
lastRunSuccess = true
rxBus.send(EventAutotuneUpdateGui())
calculationRunning = false
return result
return
}
return rh.gs(R.string.autotune_error)
result = rh.gs(R.string.autotune_error)
rxBus.send(EventAutotuneUpdateGui())
calculationRunning = false
return
}
private fun showResults(tunedProfile: ATProfile?, pumpProfile: ATProfile): String {

View file

@ -10,6 +10,8 @@ import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.MidnightTime
import info.nightscout.androidaps.utils.Round
import info.nightscout.androidaps.utils.T
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
import java.util.*
import javax.inject.Inject
@ -17,6 +19,7 @@ import javax.inject.Singleton
@Singleton
class AutotunePrep @Inject constructor(
private val aapsLogger: AAPSLogger,
private val sp: SP,
private val dateUtil: DateUtil,
private val autotuneFS: AutotuneFS,
@ -146,6 +149,7 @@ class AutotunePrep @Inject constructor(
}
}
if (glucose.size == 0 || glucoseData.size == 0 ) {
//aapsLogger.debug(LTag.AUTOTUNE, "No BG value received")
if (verbose)
log("No BG value received")
return null
@ -159,11 +163,13 @@ class AutotunePrep @Inject constructor(
//val boluses = 0
//val maxCarbs = 0
if (treatments.size == 0) {
//aapsLogger.debug(LTag.AUTOTUNE, "No Carbs entries")
if (verbose)
log("No Carbs entries")
//return null
}
if (autotuneIob.boluses.size == 0) {
//aapsLogger.debug(LTag.AUTOTUNE, "No treatment received")
if (verbose)
log("No treatment received")
return null
@ -253,6 +259,7 @@ class AutotunePrep @Inject constructor(
}
avgDelta = (bg - bucketedData[i + 4].value) / 4
} else {
//aapsLogger.debug(LTag.AUTOTUNE, "Could not find glucose data")
if (verbose)
log("Could not find glucose data")
}
@ -302,7 +309,7 @@ class AutotunePrep @Inject constructor(
// Then, calculate carb absorption for that 5m interval using the deviation.
if (mealCOB > 0) {
val ci = Math.max(deviation, sp.getDouble("openapsama_min_5m_carbimpact", 3.0))
val ci = Math.max(deviation, sp.getDouble(R.string.key_openapsama_min_5m_carbimpact, 3.0))
val absorbed = ci * tunedprofile.ic / sens
// Store the COB, and use it as the starting point for the next data point.
mealCOB = Math.max(0.0, mealCOB - absorbed)
@ -320,8 +327,9 @@ class AutotunePrep @Inject constructor(
crInitialIOB = iob.iob
crInitialBG = glucoseDatum.value
crInitialCarbTime = glucoseDatum.date
//aapsLogger.debug(LTag.AUTOTUNE, "CRInitialIOB: $crInitialIOB CRInitialBG: $crInitialBG CRInitialCarbTime: ${dateUtil.toISOString(crInitialCarbTime)}")
if (verbose)
log("CRInitialIOB: " + crInitialIOB + " CRInitialBG: " + crInitialBG + " CRInitialCarbTime: " + dateUtil.toISOString(crInitialCarbTime))
log("CRInitialIOB: $crInitialIOB CRInitialBG: $crInitialBG CRInitialCarbTime: ${dateUtil.toISOString(crInitialCarbTime)}")
}
// keep calculatingCR as long as we have COB or enough IOB
if (mealCOB > 0 && i > 1) {
@ -333,8 +341,9 @@ class AutotunePrep @Inject constructor(
val crEndIOB = iob.iob
val crEndBG = glucoseDatum.value
val crEndTime = glucoseDatum.date
//aapsLogger.debug(LTag.AUTOTUNE, "CREndIOB: $crEndIOB CREndBG: $crEndBG CREndTime: ${dateUtil.toISOString(crEndTime)}")
if (verbose)
log("CREndIOB: " + crEndIOB + " CREndBG: " + crEndBG + " CREndTime: " + dateUtil.toISOString(crEndTime))
log("CREndIOB: $crEndIOB CREndBG: $crEndBG CREndTime: ${dateUtil.toISOString(crEndTime)}")
val crDatum = CRDatum(dateUtil)
crDatum.crInitialBG = crInitialBG
crDatum.crInitialIOB = crInitialIOB
@ -349,6 +358,7 @@ class AutotunePrep @Inject constructor(
//log.debug(CREndTime - CRInitialCarbTime, CRElapsedMinutes);
if (CRElapsedMinutes < 60 || i == 1 && mealCOB > 0) {
//aapsLogger.debug(LTag.AUTOTUNE, "Ignoring $CRElapsedMinutes m CR period.")
if (verbose)
log("Ignoring $CRElapsedMinutes m CR period.")
} else {
@ -378,8 +388,9 @@ class AutotunePrep @Inject constructor(
//log.debug(type);
if (type != "csf") {
glucoseDatum.mealAbsorption = "start"
//aapsLogger.debug(LTag.AUTOTUNE, "${glucoseDatum.mealAbsorption} carb absorption")
if (verbose)
log(glucoseDatum.mealAbsorption + " carb absorption")
log("${glucoseDatum.mealAbsorption} carb absorption")
}
type = "csf"
glucoseDatum.mealCarbs = mealCarbs.toInt()
@ -389,8 +400,9 @@ class AutotunePrep @Inject constructor(
// check previous "type" value, and if it was csf, set a mealAbsorption end flag
if (type == "csf") {
csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption = "end"
//aapsLogger.debug(LTag.AUTOTUNE, "${csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption} carb absorption")
if (verbose)
log(csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption + " carb absorption")
log("${csfGlucoseData[csfGlucoseData.size - 1].mealAbsorption} carb absorption")
}
if (iob.iob > 2 * currentBasal || deviation > 6 || uam) {
uam = if (deviation > 0) {
@ -400,6 +412,7 @@ class AutotunePrep @Inject constructor(
}
if (type != "uam") {
glucoseDatum.uamAbsorption = "start"
//aapsLogger.debug(LTag.AUTOTUNE, "${glucoseDatum.uamAbsorption} unannnounced meal absorption")
if (verbose)
log(glucoseDatum.uamAbsorption + " unannnounced meal absorption")
}
@ -407,6 +420,7 @@ class AutotunePrep @Inject constructor(
uamGlucoseData.add(glucoseDatum)
} else {
if (type == "uam") {
//aapsLogger.debug(LTag.AUTOTUNE, "end unannounced meal absorption")
if (verbose)
log("end unannounced meal absorption")
}
@ -433,8 +447,10 @@ class AutotunePrep @Inject constructor(
}
}
// debug line to print out all the things
//aapsLogger.debug(LTag.AUTOTUNE, "${(if (absorbing) 1 else 0)} mealCOB: ${Round.roundTo(mealCOB, 0.1)} mealCarbs: ${Math.round(mealCarbs)} basalBGI: ${Round.roundTo(basalBGI, 0.1)} BGI: ${Round.roundTo(BGI, 0.1)} IOB: ${iob.iob} Activity: ${iob.activity} at ${dateUtil.timeStringWithSeconds(BGTime)} dev: $deviation avgDelta: $avgDelta $type")
if (verbose)
log((if (absorbing) 1 else 0).toString() + " mealCOB: " + Round.roundTo(mealCOB, 0.1) + " mealCarbs: " + Math.round(mealCarbs) + " basalBGI: " + Round.roundTo(basalBGI, 0.1) + " BGI: " + Round.roundTo(BGI, 0.1) + " IOB: " + iob.iob+ " Activity: " + iob.activity + " at " + dateUtil.timeStringWithSeconds(BGTime) + " dev: " + deviation + " avgDelta: " + avgDelta + " " + type)
log("${(if (absorbing) 1 else 0)} mealCOB: ${Round.roundTo(mealCOB, 0.1)} mealCarbs: ${Math.round(mealCarbs)} basalBGI: ${Round.roundTo(basalBGI, 0.1)} BGI: ${Round
.roundTo(BGI, 0.1)} IOB: ${iob.iob} Activity: ${iob.activity} at ${dateUtil.timeStringWithSeconds(BGTime)} dev: $deviation avgDelta: $avgDelta $type")
}
//****************************************************************************************************************************************
@ -449,16 +465,20 @@ class AutotunePrep @Inject constructor(
val UAMLength = uamGlucoseData.size
var basalLength = basalGlucoseData.size
if (sp.getBoolean(R.string.key_autotune_categorize_uam_as_basal, false)) {
//aapsLogger.debug(LTag.AUTOTUNE, "Categorizing all UAM data as basal.")
if (verbose)
log("Categorizing all UAM data as basal.")
basalGlucoseData.addAll(uamGlucoseData)
} else if (CSFLength > 12) {
//aapsLogger.debug(LTag.AUTOTUNE, "Found at least 1h of carb: assuming meals were announced, and categorizing UAM data as basal.")
if (verbose)
log("Found at least 1h of carb: assuming meals were announced, and categorizing UAM data as basal.")
basalGlucoseData.addAll(uamGlucoseData)
} else {
if (2 * basalLength < UAMLength) {
//log.debug(basalGlucoseData, UAMGlucoseData);
//aapsLogger.debug(LTag.AUTOTUNE, "Warning: too many deviations categorized as UnAnnounced Meals")
//aapsLogger.debug(LTag.AUTOTUNE, "Adding $UAMLength UAM deviations to $basalLength basal ones")
if (verbose) {
log("Warning: too many deviations categorized as UnAnnounced Meals")
log("Adding $UAMLength UAM deviations to $basalLength basal ones")
@ -473,10 +493,12 @@ class AutotunePrep @Inject constructor(
}
//log.debug(newBasalGlucose);
basalGlucoseData = newBasalGlucose
//aapsLogger.debug(LTag.AUTOTUNE, "and selecting the lowest 50%, leaving ${basalGlucoseData.size} basal+UAM ones")
if (verbose)
log("and selecting the lowest 50%, leaving " + basalGlucoseData.size + " basal+UAM ones")
log("and selecting the lowest 50%, leaving ${basalGlucoseData.size} basal+UAM ones")
}
if (2 * ISFLength < UAMLength) {
//aapsLogger.debug(LTag.AUTOTUNE, "Adding $UAMLength UAM deviations to $ISFLength ISF ones")
if (verbose)
log("Adding $UAMLength UAM deviations to $ISFLength ISF ones")
isfGlucoseData.addAll(uamGlucoseData)
@ -488,14 +510,17 @@ class AutotunePrep @Inject constructor(
}
//console.error(newISFGlucose);
isfGlucoseData = newISFGlucose
//aapsLogger.debug(LTag.AUTOTUNE, "and selecting the lowest 50%, leaving ${isfGlucoseData.size} ISF+UAM ones")
if (verbose)
log("and selecting the lowest 50%, leaving " + isfGlucoseData.size + " ISF+UAM ones")
log("and selecting the lowest 50%, leaving ${isfGlucoseData.size} ISF+UAM ones")
//log.error(ISFGlucoseData.length, UAMLength);
}
}
basalLength = basalGlucoseData.size
ISFLength = isfGlucoseData.size
if (4 * basalLength + ISFLength < CSFLength && ISFLength < 10) {
//aapsLogger.debug(LTag.AUTOTUNE, "Warning: too many deviations categorized as meals")
//aapsLogger.debug(LTag.AUTOTUNE, "Adding $CSFLength CSF deviations to $ISFLength ISF ones")
if (verbose) {
log("Warning: too many deviations categorized as meals")
//log.debug("Adding",CSFLength,"CSF deviations to",basalLength,"basal ones");
@ -507,8 +532,9 @@ class AutotunePrep @Inject constructor(
}
// categorize.js Lines 437-444
//aapsLogger.debug(LTag.AUTOTUNE, "CRData: ${crData.size} CSFGlucoseData: ${csfGlucoseData.size} ISFGlucoseData: ${isfGlucoseData.size} BasalGlucoseData: ${basalGlucoseData.size}")
if (verbose)
log("CRData: " + crData.size + " CSFGlucoseData: " + csfGlucoseData.size + " ISFGlucoseData: " + isfGlucoseData.size + " BasalGlucoseData: " + basalGlucoseData.size)
log("CRData: ${crData.size} CSFGlucoseData: ${csfGlucoseData.size} ISFGlucoseData: ${isfGlucoseData.size} BasalGlucoseData: ${basalGlucoseData.size}")
return PreppedGlucose(autotuneIob.startBG, crData, csfGlucoseData, isfGlucoseData, basalGlucoseData, dateUtil)
}
@ -516,6 +542,7 @@ class AutotunePrep @Inject constructor(
//dosed.js full
private fun dosed(start: Long, end: Long, treatments: List<Bolus>): Double {
var insulinDosed = 0.0
//aapsLogger.debug(LTag.AUTOTUNE, "No treatments to process.")
if (treatments.size == 0) {
log("No treatments to process.")
return 0.0

View file

@ -5,6 +5,7 @@ import android.bluetooth.BluetoothManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.provider.Settings
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
@ -113,7 +114,7 @@ class ImportExportPrefsImpl @Inject constructor(
val n1 = Settings.System.getString(context.contentResolver, "bluetooth_name")
val n2 = Settings.Secure.getString(context.contentResolver, "bluetooth_name")
val n3 = try {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
(context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager?)?.adapter?.name
} else null
} catch (e: Exception){

View file

@ -207,8 +207,8 @@ class OverviewData @Inject constructor(
* IOB, COB
*/
fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round(fabricPrivacy)
fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round(fabricPrivacy)
fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round()
fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
fun cobInfo(iobCobCalculator: IobCobCalculator): CobInfo = iobCobCalculator.getCobInfo(true, "Overview COB")
val lastCarbsTime: Long

View file

@ -51,7 +51,11 @@ import info.nightscout.androidaps.plugins.constraints.bgQualityCheck.BgQualityCh
import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin
import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus
import info.nightscout.androidaps.plugins.general.overview.activities.QuickWizardListActivity
import info.nightscout.androidaps.plugins.general.overview.events.*
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewCalcProgress
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewIobCob
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewNotification
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewSensitivity
import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationStore
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
@ -66,7 +70,6 @@ import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.TrendCalculator
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.interfaces.BuildHelper
import info.nightscout.androidaps.utils.protection.ProtectionCheck
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.ui.SingleClickButton
@ -117,7 +120,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
@Inject lateinit var repository: AppRepository
@Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider
@Inject lateinit var overviewData: OverviewData
@Inject lateinit var overviewPlugin: OverviewPlugin
@Inject lateinit var automationPlugin: AutomationPlugin
@Inject lateinit var bgQualityCheckPlugin: BgQualityCheckPlugin
@ -236,10 +238,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
.debounce(1L, TimeUnit.SECONDS)
.observeOn(aapsSchedulers.main)
.subscribe({ updateGraph() }, fabricPrivacy::logException)
disposable += activePlugin.activeOverview.overviewBus
.toObservable(EventUpdateOverviewPumpStatus::class.java)
.observeOn(aapsSchedulers.main)
.subscribe({ updatePumpStatus() }, fabricPrivacy::logException)
disposable += activePlugin.activeOverview.overviewBus
.toObservable(EventUpdateOverviewNotification::class.java)
.observeOn(aapsSchedulers.main)
@ -308,7 +306,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
handler.postDelayed(refreshLoop, 60 * 1000L)
refreshAll()
handler.post { refreshAll() }
updatePumpStatus()
updateCalcProgress()
}
@ -418,7 +416,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
uel.log(Action.ACCEPTS_TEMP_BASAL, Sources.Overview)
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(Constants.notificationID)
rxBus.send(EventMobileToWear(EventData.CancelNotification(dateUtil.now())))
Thread { loop.acceptChangeRequest() }.run()
Thread { loop.acceptChangeRequest() }.start()
binding.buttonsLayout.acceptTempButton.visibility = View.GONE
})
})
@ -583,7 +581,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
for (event in events)
if (event.isEnabled && event.trigger.shouldRun())
context?.let { context ->
SingleClickButton(context).also {
SingleClickButton(context, null, R.attr.customBtnStyle).also {
it.setTextColor(rh.gac(context, R.attr.treatmentButton))
it.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10f)
it.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f).also { l ->
@ -828,7 +826,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
}
fun updateProfile() {
private fun updateProfile() {
val profile = profileFunction.getProfile()
runOnUiThread {
_binding ?: return@runOnUiThread
@ -886,7 +884,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
}
fun updateTime() {
private fun updateTime() {
_binding ?: return
binding.infoLayout.time.text = dateUtil.timeString(dateUtil.now())
// Status lights
@ -916,7 +914,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
)
}
fun updateIobCob() {
private fun updateIobCob() {
val iobText = overviewData.iobText(iobCobCalculator)
val iobDialogText = overviewData.iobDialogText(iobCobCalculator)
val displayText = overviewData.cobInfo(iobCobCalculator).displayText(rh, dateUtil, buildHelper.isEngineeringMode())
@ -1000,6 +998,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
val pump = activePlugin.activePump
val graphData = GraphData(injector, binding.graphsLayout.bgGraph, overviewData)
val menuChartSettings = overviewMenus.setting
if (menuChartSettings.isEmpty()) return
graphData.addInRangeArea(overviewData.fromTime, overviewData.endTime, defaultValueHelper.determineLowLine(), defaultValueHelper.determineHighLine())
graphData.addBgReadings(menuChartSettings[0][OverviewMenus.CharType.PRE.ordinal], context)
if (buildHelper.isDev()) graphData.addBucketedData()
@ -1085,7 +1084,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
private fun updateSensitivity() {
_binding ?: return
if (sp.getBoolean(R.string.key_openapsama_useautosens, false) && constraintChecker.isAutosensModeEnabled().value()) {
if (constraintChecker.isAutosensModeEnabled().value()) {
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_swap_vert_black_48dp_green)
} else {
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_x_swap_vert)

View file

@ -69,14 +69,16 @@ class OverviewMenus @Inject constructor(
private var _setting: MutableList<Array<Boolean>> = ArrayList()
val setting: List<Array<Boolean>>
get() = _setting.toMutableList() // implicitly does a list copy
@Synchronized get() = _setting.toMutableList() // implicitly does a list copy
@Synchronized
private fun storeGraphConfig() {
val sts = Gson().toJson(_setting)
sp.putString(R.string.key_graphconfig, sts)
aapsLogger.debug(sts)
}
@Synchronized
fun loadGraphConfig() {
val sts = sp.getString(R.string.key_graphconfig, "")
if (sts.isNotEmpty()) {
@ -115,7 +117,7 @@ class OverviewMenus @Inject constructor(
val used = arrayListOf<Int>()
for (g in 0 until numOfGraphs) {
if (g != 0 && g < numOfGraphs) {
if (g != 0) {
val dividerItem = popup.menu.add(Menu.NONE, g, Menu.NONE, "------- ${rh.gs(R.string.graph_menu_divider_header)} $g -------")
dividerItem.isCheckable = true
dividerItem.isChecked = true
@ -134,8 +136,8 @@ class OverviewMenus @Inject constructor(
val item = popup.menu.add(Menu.NONE, m.ordinal + 100 * (g + 1), Menu.NONE, rh.gs(m.nameId))
val title = item.title
val s = SpannableString(" $title ")
s.setSpan(ForegroundColorSpan(rh.gac(context, m.attrTextId)), 0, s.length, 0)
s.setSpan(BackgroundColorSpan(rh.gac(context, m.attrId)), 0, s.length, 0)
s.setSpan(ForegroundColorSpan(rh.gac(m.attrTextId)), 0, s.length, 0)
s.setSpan(BackgroundColorSpan(rh.gac(m.attrId)), 0, s.length, 0)
item.title = s
item.isCheckable = true
item.isChecked = settingsCopy[g][m.ordinal]
@ -150,36 +152,38 @@ class OverviewMenus @Inject constructor(
}
popup.setOnMenuItemClickListener {
try {
// id < 100 graph header - divider 1, 2, 3 .....
when {
it.itemId == SCALE_ID -> {
// do nothing, submenu
}
synchronized(this) {
try {
// id < 100 graph header - divider 1, 2, 3 .....
when {
it.itemId == SCALE_ID -> {
// do nothing, submenu
}
it.itemId > SCALE_ID && it.itemId < SCALE_ID + 100 -> {
val hours = it.itemId - SCALE_ID // 6,12,....
rxBus.send(EventScale(hours))
}
it.itemId > SCALE_ID && it.itemId < SCALE_ID + 100 -> {
val hours = it.itemId - SCALE_ID // 6,12,....
rxBus.send(EventScale(hours))
}
it.itemId == numOfGraphs -> {
// add new empty
_setting.add(Array(CharType.values().size) { false })
}
it.itemId == numOfGraphs -> {
// add new empty
_setting.add(Array(CharType.values().size) { false })
}
it.itemId < 100 -> {
// remove graph
_setting.removeAt(it.itemId)
}
it.itemId < 100 -> {
// remove graph
_setting.removeAt(it.itemId)
}
else -> {
val graphNumber = it.itemId / 100 - 1
val item = it.itemId % 100
_setting[graphNumber][item] = !it.isChecked
else -> {
val graphNumber = it.itemId / 100 - 1
val item = it.itemId % 100
_setting[graphNumber][item] = !it.isChecked
}
}
} catch (exception: Exception) {
fabricPrivacy.logException(exception)
}
} catch (exception: Exception) {
fabricPrivacy.logException(exception)
}
storeGraphConfig()
setupChartMenu(context, chartButton)

View file

@ -6,11 +6,7 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.extensions.*
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.Overview
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
@ -21,7 +17,6 @@ import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Scale
import info.nightscout.androidaps.plugins.general.overview.notifications.NotificationStore
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.sharedPreferences.SP
@ -175,46 +170,4 @@ class OverviewPlugin @Inject constructor(
.storeDouble(R.string.key_statuslights_bat_critical, sp, rh)
.storeInt(R.string.key_boluswizard_percentage, sp, rh)
}
/*
@Volatile
var runningRefresh = false
override fun refreshLoop(from: String) {
if (runningRefresh) return
runningRefresh = true
overviewBus.send(EventUpdateOverviewNotification(from))
loadIobCobResults(from)
overviewBus.send(EventUpdateOverviewProfile(from))
overviewBus.send(EventUpdateOverviewBg(from))
overviewBus.send(EventUpdateOverviewTime(from))
overviewBus.send(EventUpdateOverviewTemporaryBasal(from))
overviewBus.send(EventUpdateOverviewExtendedBolus(from))
overviewBus.send(EventUpdateOverviewTemporaryTarget(from))
loadAsData(from)
overviewData.preparePredictions(from)
overviewData.prepareBasalData(from)
overviewData.prepareTemporaryTargetData(from)
overviewData.prepareTreatmentsData(from)
overviewData.prepareIobAutosensData(from)
overviewBus.send(EventUpdateOverviewGraph(from))
overviewBus.send(EventUpdateOverviewIobCob(from))
aapsLogger.debug(LTag.UI, "refreshLoop finished")
runningRefresh = false
}
@Suppress("SameParameterValue")
private fun loadAll(from: String) {
loadBg(from)
loadProfile(from)
loadTemporaryTarget(from)
loadIobCobResults(from)
loadAsData(from)
overviewData.prepareBasalData(from)
overviewData.prepareTemporaryTargetData(from)
overviewData.prepareTreatmentsData(from)
// prepareIobAutosensData(from)
// preparePredictions(from)
overviewBus.send(EventUpdateOverviewGraph(from))
aapsLogger.debug(LTag.UI, "loadAll finished")
}
*/
}

View file

@ -1,5 +0,0 @@
package info.nightscout.androidaps.plugins.general.overview.events
import info.nightscout.androidaps.events.Event
class EventUpdateOverviewPumpStatus(val from: String) : Event()

View file

@ -1,7 +1,6 @@
package info.nightscout.androidaps.plugins.general.wear
import android.content.Context
import android.content.Intent
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
@ -10,14 +9,14 @@ import info.nightscout.androidaps.events.EventPreferenceChange
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.plugins.aps.loop.events.EventLoopUpdateGui
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
import info.nightscout.androidaps.plugins.general.wear.wearintegration.DataHandlerMobile
import info.nightscout.androidaps.plugins.general.wear.wearintegration.DataLayerListenerServiceMobile
import info.nightscout.androidaps.plugins.general.wear.wearintegration.DataLayerListenerServiceMobileHelper
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.sharedPreferences.SP
@ -37,7 +36,8 @@ class WearPlugin @Inject constructor(
private val fabricPrivacy: FabricPrivacy,
private val rxBus: RxBus,
private val context: Context,
private val dataHandlerMobile: DataHandlerMobile
private val dataHandlerMobile: DataHandlerMobile,
val dataLayerListenerServiceMobileHelper: DataLayerListenerServiceMobileHelper
) : PluginBase(
PluginDescription()
@ -57,7 +57,7 @@ class WearPlugin @Inject constructor(
override fun onStart() {
super.onStart()
context.startService(Intent(context, DataLayerListenerServiceMobile::class.java))
dataLayerListenerServiceMobileHelper.startService(context)
disposable += rxBus
.toObservable(EventDismissBolusProgressIfRunning::class.java)
.observeOn(aapsSchedulers.io)
@ -94,6 +94,6 @@ class WearPlugin @Inject constructor(
override fun onStop() {
disposable.clear()
super.onStop()
context.stopService(Intent(context, DataLayerListenerServiceMobile::class.java))
dataLayerListenerServiceMobileHelper.stopService(context)
}
}

View file

@ -12,6 +12,8 @@ import info.nightscout.androidaps.database.entities.*
import info.nightscout.androidaps.database.interfaces.end
import info.nightscout.androidaps.database.transactions.CancelCurrentTemporaryTargetIfAnyTransaction
import info.nightscout.androidaps.database.transactions.InsertAndCancelCurrentTemporaryTargetTransaction
import info.nightscout.androidaps.dialogs.CarbsDialog
import info.nightscout.androidaps.dialogs.InsulinDialog
import info.nightscout.androidaps.events.EventMobileToWear
import info.nightscout.androidaps.extensions.convertedToAbsolute
import info.nightscout.androidaps.extensions.toStringShort
@ -27,6 +29,7 @@ import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Gluco
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.receivers.ReceiverStatusStore
import info.nightscout.androidaps.services.AlarmSoundServiceHelper
import info.nightscout.androidaps.utils.*
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.wizard.BolusWizard
@ -73,7 +76,8 @@ class DataHandlerMobile @Inject constructor(
private val uel: UserEntryLogger,
private val activePlugin: ActivePlugin,
private val commandQueue: CommandQueue,
private val fabricPrivacy: FabricPrivacy
private val fabricPrivacy: FabricPrivacy,
private val alarmSoundServiceHelper: AlarmSoundServiceHelper
) {
private val disposable = CompositeDisposable()
@ -260,6 +264,20 @@ class DataHandlerMobile @Inject constructor(
}
lastBolusWizard = null
}, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventData.SnoozeAlert::class.java)
.observeOn(aapsSchedulers.io)
.subscribe({
aapsLogger.debug(LTag.WEAR, "SnoozeAlert received $it from ${it.sourceNodeId}")
alarmSoundServiceHelper.stopService(context, "Muted from wear")
}, fabricPrivacy::logException)
disposable += rxBus
.toObservable(EventData.WearException::class.java)
.observeOn(aapsSchedulers.io)
.subscribe({
aapsLogger.debug(LTag.WEAR, "WearException received $it from ${it.sourceNodeId}")
fabricPrivacy.logWearException(it)
}, fabricPrivacy::logException)
}
private fun handleTddStatus() {
@ -463,7 +481,7 @@ class DataHandlerMobile @Inject constructor(
}
private fun handleECarbsPreCheck(command: EventData.ActionECarbsPreCheck) {
val startTimeStamp = System.currentTimeMillis() + T.hours(command.carbsTimeShift.toLong()).msecs()
val startTimeStamp = System.currentTimeMillis() + T.mins(command.carbsTimeShift.toLong()).msecs()
val carbsAfterConstraints = constraintChecker.applyCarbsConstraints(Constraint(command.carbs)).value()
var message = rh.gs(R.string.carbs) + ": " + carbsAfterConstraints + "g" +
"\n" + rh.gs(R.string.time) + ": " + dateUtil.timeString(startTimeStamp) +
@ -685,7 +703,11 @@ class DataHandlerMobile @Inject constructor(
unitsMgdl = profileFunction.getUnits() == GlucoseUnit.MGDL,
bolusPercentage = sp.getInt(R.string.key_boluswizard_percentage, 100),
maxCarbs = sp.getInt(R.string.key_treatmentssafety_maxcarbs, 48),
maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3.0)
maxBolus = sp.getDouble(R.string.key_treatmentssafety_maxbolus, 3.0),
insulinButtonIncrement1 = sp.getDouble(R.string.key_insulin_button_increment_1, InsulinDialog.PLUS1_DEFAULT),
insulinButtonIncrement2 = sp.getDouble(R.string.key_insulin_button_increment_2, InsulinDialog.PLUS2_DEFAULT),
carbsButtonIncrement1 = sp.getInt(R.string.key_carbs_button_increment_1, CarbsDialog.FAV1_DEFAULT),
carbsButtonIncrement2 = sp.getInt(R.string.key_carbs_button_increment_2, CarbsDialog.FAV2_DEFAULT)
)
)
)
@ -1176,4 +1198,4 @@ class DataHandlerMobile @Inject constructor(
@Synchronized private fun sendError(errorMessage: String) {
rxBus.send(EventMobileToWear(EventData.ConfirmAction(rh.gs(R.string.error), errorMessage, returnCommand = EventData.Error(dateUtil.now())))) // ignore return path
}
}
}

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.plugins.general.wear.wearintegration
import android.os.Binder
import android.os.Handler
import android.os.HandlerThread
import com.google.android.gms.tasks.Tasks
@ -8,21 +9,14 @@ import dagger.android.AndroidInjection
import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.events.EventMobileToWear
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.interfaces.IobCobCalculator
import info.nightscout.androidaps.interfaces.Loop
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.interfaces.*
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus
import info.nightscout.androidaps.plugins.general.wear.WearPlugin
import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui
import info.nightscout.androidaps.receivers.ReceiverStatusStore
import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.wizard.QuickWizard
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.logging.LTag
import info.nightscout.shared.sharedPreferences.SP
@ -43,9 +37,7 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
@Inject lateinit var loop: Loop
@Inject lateinit var wearPlugin: WearPlugin
@Inject lateinit var sp: SP
@Inject lateinit var quickWizard: QuickWizard
@Inject lateinit var config: Config
@Inject lateinit var nsDeviceStatus: NSDeviceStatus
@Inject lateinit var receiverStatusStore: ReceiverStatusStore
@Inject lateinit var repository: AppRepository
@Inject lateinit var defaultValueHelper: DefaultValueHelper
@ -53,6 +45,11 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
@Inject lateinit var rxBus: RxBus
@Inject lateinit var aapsSchedulers: AapsSchedulers
inner class LocalBinder : Binder() {
fun getService(): DataLayerListenerServiceMobile = this@DataLayerListenerServiceMobile
}
private val dataClient by lazy { Wearable.getDataClient(this) }
private val messageClient by lazy { Wearable.getMessageClient(this) }
private val capabilityClient by lazy { Wearable.getCapabilityClient(this) }
@ -116,7 +113,7 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
if (wearPlugin.isEnabled()) {
when (messageEvent.path) {
rxPath -> {
aapsLogger.debug(LTag.WEAR, "onMessageReceived: ${String(messageEvent.data)}")
aapsLogger.debug(LTag.WEAR, "onMessageReceived rxPath: ${String(messageEvent.data)}")
val command = EventData.deserialize(String(messageEvent.data))
rxBus.send(command.also { it.sourceNodeId = messageEvent.sourceNodeId })
}
@ -134,7 +131,7 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
aapsLogger.debug(LTag.WEAR, "Nodes: ${capabilityInfo.nodes.joinToString(", ") { it.displayName + "(" + it.id + ")" }}")
val bestNode = pickBestNodeId(capabilityInfo.nodes)
transcriptionNodeId = bestNode?.id
wearPlugin.connectedDevice = bestNode?.displayName ?: "---"
wearPlugin.connectedDevice = bestNode?.displayName ?: rh.gs(R.string.no_watch_connected)
rxBus.send(EventWearUpdateGui())
aapsLogger.debug(LTag.WEAR, "Selected node: ${bestNode?.displayName} $transcriptionNodeId")
rxBus.send(EventMobileToWear(EventData.ActionPing(System.currentTimeMillis())))
@ -203,4 +200,4 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
const val WEAR_CAPABILITY = "androidaps_wear"
}
}
}

View file

@ -0,0 +1,62 @@
package info.nightscout.androidaps.plugins.general.wear.wearintegration
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.os.IBinder
import info.nightscout.androidaps.interfaces.NotificationHolder
import javax.inject.Inject
import javax.inject.Singleton
/*
This code replaces following
val alarm = Intent(context, DataLayerListenerServiceMobile::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.startForegroundService(alarm) else context.startService(alarm)
it fails randomly with error
Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e317f7e u0 info.nightscout.nsclient/info.nightscout.androidaps.services.DataLayerListenerServiceMobile}
*/
@Singleton
class DataLayerListenerServiceMobileHelper @Inject constructor(
private val notificationHolder: NotificationHolder
) {
fun startService(context: Context) {
val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// The binder of the service that returns the instance that is created.
val binder: DataLayerListenerServiceMobile.LocalBinder = service as DataLayerListenerServiceMobile.LocalBinder
val dataLayerListenerServiceMobile: DataLayerListenerServiceMobile = binder.getService()
context.startForegroundService(Intent(context, DataLayerListenerServiceMobile::class.java))
// This is the key: Without waiting Android Framework to call this method
// inside Service.onCreate(), immediately call here to post the notification.
dataLayerListenerServiceMobile.startForeground(notificationHolder.notificationID, notificationHolder.notification)
// Release the connection to prevent leaks.
context.unbindService(this)
}
override fun onServiceDisconnected(name: ComponentName?) {
}
}
try {
context.bindService(Intent(context, DataLayerListenerServiceMobile::class.java), connection, Context.BIND_AUTO_CREATE)
} catch (ignored: RuntimeException) {
// This is probably a broadcast receiver context even though we are calling getApplicationContext().
// Just call startForegroundService instead since we cannot bind a service to a
// broadcast receiver context. The service also have to call startForeground in
// this case.
context.startForegroundService(Intent(context, DataLayerListenerServiceMobile::class.java))
}
}
fun stopService(context: Context) {
context.stopService(Intent(context, DataLayerListenerServiceMobile::class.java))
}
}

View file

@ -8,12 +8,11 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.events.*
import info.nightscout.androidaps.extensions.toStringShort
import info.nightscout.androidaps.interfaces.*
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.FabricPrivacy
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.shared.sharedPreferences.SP
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
@ -123,8 +122,8 @@ class StatusLinePlugin @Inject constructor(
status += activeTemp.toStringShort() + " "
}
//IOB
val bolusIob = iobCobCalculator.calculateIobFromBolus().round(fabricPrivacy)
val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round(fabricPrivacy)
val bolusIob = iobCobCalculator.calculateIobFromBolus().round()
val basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
status += DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob) + "U"
if (sp.getBoolean(R.string.key_xdripstatus_detailediob, true)) {
status += ("("

View file

@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.HardLimits
import org.json.JSONObject
import javax.inject.Inject
import javax.inject.Singleton
@ -19,8 +20,9 @@ class InsulinLyumjevPlugin @Inject constructor(
profileFunction: ProfileFunction,
rxBus: RxBus,
aapsLogger: AAPSLogger,
config: Config
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) {
config: Config,
hardLimits: HardLimits
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) {
override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_LYUMJEV
override val friendlyName get(): String = rh.gs(R.string.lyumjev)

View file

@ -6,12 +6,12 @@ import info.nightscout.androidaps.data.Iob
import info.nightscout.androidaps.database.embedments.InsulinConfiguration
import info.nightscout.androidaps.database.entities.Bolus
import info.nightscout.androidaps.interfaces.*
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.shared.logging.AAPSLogger
import kotlin.math.exp
import kotlin.math.pow
@ -27,7 +27,8 @@ abstract class InsulinOrefBasePlugin(
val profileFunction: ProfileFunction,
val rxBus: RxBus,
aapsLogger: AAPSLogger,
config: Config
config: Config,
val hardLimits: HardLimits
) : PluginBase(
PluginDescription()
.mainType(PluginType.INSULIN)
@ -43,18 +44,18 @@ abstract class InsulinOrefBasePlugin(
override val dia
get(): Double {
val dia = userDefinedDia
return if (dia >= MIN_DIA) {
return if (dia >= hardLimits.minDia()) {
dia
} else {
sendShortDiaNotification(dia)
MIN_DIA
hardLimits.minDia()
}
}
open fun sendShortDiaNotification(dia: Double) {
if (System.currentTimeMillis() - lastWarned > 60 * 1000) {
lastWarned = System.currentTimeMillis()
val notification = Notification(Notification.SHORT_DIA, String.format(notificationPattern, dia, MIN_DIA), Notification.URGENT)
val notification = Notification(Notification.SHORT_DIA, String.format(notificationPattern, dia, hardLimits.minDia()), Notification.URGENT)
rxBus.send(EventNewNotification(notification))
}
}
@ -65,12 +66,13 @@ abstract class InsulinOrefBasePlugin(
open val userDefinedDia: Double
get() {
val profile = profileFunction.getProfile()
return profile?.dia ?: MIN_DIA
return profile?.dia ?: hardLimits.minDia()
}
override fun iobCalcForTreatment(bolus: Bolus, time: Long, dia: Double): Iob {
assert(dia != 0.0)
assert(peak != 0)
val result = Iob()
val peak = peak
if (bolus.amount != 0.0) {
val bolusTime = bolus.timestamp
val t = (time - bolusTime) / 1000.0 / 60.0
@ -80,9 +82,9 @@ abstract class InsulinOrefBasePlugin(
if (t < td) {
val tau = tp * (1 - tp / td) / (1 - 2 * tp / td)
val a = 2 * tau / td
val S = 1 / (1 - a + (1 + a) * exp(-td / tau))
result.activityContrib = bolus.amount * (S / tau.pow(2.0)) * t * (1 - t / td) * exp(-t / tau)
result.iobContrib = bolus.amount * (1 - S * (1 - a) * ((t.pow(2.0) / (tau * td * (1 - a)) - t / tau - 1) * Math.exp(-t / tau) + 1))
val s = 1 / (1 - a + (1 + a) * exp(-td / tau))
result.activityContrib = bolus.amount * (s / tau.pow(2.0)) * t * (1 - t / td) * exp(-t / tau)
result.iobContrib = bolus.amount * (1 - s * (1 - a) * ((t.pow(2.0) / (tau * td * (1 - a)) - t / tau - 1) * exp(-t / tau) + 1))
}
}
return result
@ -95,17 +97,12 @@ abstract class InsulinOrefBasePlugin(
get(): String {
var comment = commentStandardText()
val userDia = userDefinedDia
if (userDia < MIN_DIA) {
comment += "\n" + rh.gs(R.string.dia_too_short, userDia, MIN_DIA)
if (userDia < hardLimits.minDia()) {
comment += "\n" + rh.gs(R.string.dia_too_short, userDia, hardLimits.minDia())
}
return comment
}
override abstract val peak: Int
abstract override val peak: Int
abstract fun commentStandardText(): String
companion object {
const val MIN_DIA = 5.0
}
}

View file

@ -10,6 +10,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.shared.sharedPreferences.SP
import org.json.JSONObject
import javax.inject.Inject
@ -26,8 +27,9 @@ class InsulinOrefFreePeakPlugin @Inject constructor(
profileFunction: ProfileFunction,
rxBus: RxBus,
aapsLogger: AAPSLogger,
config: Config
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) {
config: Config,
hardLimits: HardLimits
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) {
override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_FREE_PEAK

View file

@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.HardLimits
import org.json.JSONObject
import javax.inject.Inject
import javax.inject.Singleton
@ -22,8 +23,9 @@ class InsulinOrefRapidActingPlugin @Inject constructor(
profileFunction: ProfileFunction,
rxBus: RxBus,
aapsLogger: AAPSLogger,
config: Config
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) {
config: Config,
hardLimits: HardLimits
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) {
override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_RAPID_ACTING
override val friendlyName get(): String = rh.gs(R.string.rapid_acting_oref)

View file

@ -8,6 +8,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.shared.logging.AAPSLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.interfaces.ResourceHelper
import info.nightscout.androidaps.utils.HardLimits
import org.json.JSONObject
import javax.inject.Inject
import javax.inject.Singleton
@ -22,8 +23,9 @@ class InsulinOrefUltraRapidActingPlugin @Inject constructor(
profileFunction: ProfileFunction,
rxBus: RxBus,
aapsLogger: AAPSLogger,
config: Config
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config) {
config: Config,
hardLimits: HardLimits
) : InsulinOrefBasePlugin(injector, rh, profileFunction, rxBus, aapsLogger, config, hardLimits) {
override val id get(): Insulin.InsulinType = Insulin.InsulinType.OREF_ULTRA_RAPID_ACTING
override val friendlyName get(): String = rh.gs(R.string.ultrarapid_oref)

View file

@ -481,6 +481,7 @@ class IobCobCalculatorPlugin @Inject constructor(
val profile = profileFunction.getProfile() ?: return total
val dia = profile.dia
val divisor = sp.getDouble(R.string.key_openapsama_bolussnooze_dia_divisor, 2.0)
assert(divisor > 0)
val boluses = repository.getBolusesDataFromTime(toTime - range(), true).blockingGet()

View file

@ -97,11 +97,11 @@ class IobCobOref1Worker(
val bucketedData = ads.bucketedData
val autosensDataTable = ads.autosensDataTable
if (bucketedData == null || bucketedData.size < 3) {
aapsLogger.debug(LTag.AUTOSENS, "Aborting calculation thread (No bucketed data available): ${data.from}")
aapsLogger.debug(LTag.AUTOSENS, {"Aborting calculation thread (No bucketed data available): ${data.from}"})
return Result.success(workDataOf("Error" to "Aborting calculation thread (No bucketed data available): ${data.from}"))
}
val prevDataTime = ads.roundUpTime(bucketedData[bucketedData.size - 3].timestamp)
aapsLogger.debug(LTag.AUTOSENS, "Prev data time: " + dateUtil.dateAndTimeString(prevDataTime))
aapsLogger.debug(LTag.AUTOSENS, {"Prev data time: " + dateUtil.dateAndTimeString(prevDataTime)})
var previous = autosensDataTable[prevDataTime]
// start from oldest to be able sub cob
for (i in bucketedData.size - 4 downTo 0) {
@ -156,15 +156,15 @@ class IobCobOref1Worker(
val hourAgoData = ads.getAutosensDataAtTime(hourAgo)
if (hourAgoData != null) {
val initialIndex = autosensDataTable.indexOfKey(hourAgoData.time)
aapsLogger.debug(LTag.AUTOSENS, ">>>>> bucketed_data.size()=" + bucketedData.size + " i=" + i + " hourAgoData=" + hourAgoData.toString())
aapsLogger.debug(LTag.AUTOSENS, { ">>>>> bucketed_data.size()=" + bucketedData.size + " i=" + i + " hourAgoData=" + hourAgoData.toString()})
var past = 1
try {
while (past < 12) {
val ad = autosensDataTable.valueAt(initialIndex + past)
aapsLogger.debug(LTag.AUTOSENS, ">>>>> past=" + past + " ad=" + ad?.toString())
aapsLogger.debug(LTag.AUTOSENS, {">>>>> past=" + past + " ad=" + ad?.toString()})
if (ad == null) {
aapsLogger.debug(LTag.AUTOSENS, autosensDataTable.toString())
aapsLogger.debug(LTag.AUTOSENS, bucketedData.toString())
aapsLogger.debug(LTag.AUTOSENS, {autosensDataTable.toString()})
aapsLogger.debug(LTag.AUTOSENS, {bucketedData.toString()})
//aapsLogger.debug(LTag.AUTOSENS, iobCobCalculatorPlugin.getBgReadingsDataTable().toString())
val notification = Notification(Notification.SEND_LOGFILES, rh.gs(R.string.sendlogfiles), Notification.LOW)
rxBus.send(EventNewNotification(notification))
@ -319,14 +319,12 @@ class IobCobOref1Worker(
if (bgTime < dateUtil.now()) autosensDataTable.put(bgTime, autosensData)
aapsLogger.debug(
LTag.AUTOSENS,
"Running detectSensitivity from: " + dateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + dateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + ads.lastDataTime(
dateUtil
)
{"Running detectSensitivity from: " + dateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + dateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + ads.lastDataTime(dateUtil)}
)
val sensitivity = activePlugin.activeSensitivity.detectSensitivity(ads, oldestTimeWithData, bgTime)
aapsLogger.debug(LTag.AUTOSENS, "Sensitivity result: $sensitivity")
autosensData.autosensResult = sensitivity
aapsLogger.debug(LTag.AUTOSENS, autosensData.toString())
aapsLogger.debug(LTag.AUTOSENS, {autosensData.toString()})
}
data.iobCobCalculator.ads = ads
Thread {
@ -335,7 +333,7 @@ class IobCobOref1Worker(
}.start()
} finally {
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.IOB_COB_OREF, 100, data.cause))
aapsLogger.debug(LTag.AUTOSENS, "AUTOSENSDATA thread ended: ${data.from}")
aapsLogger.debug(LTag.AUTOSENS, {"AUTOSENSDATA thread ended: ${data.from}"})
profiler.log(LTag.AUTOSENS, "IobCobOref1Thread", start)
}
return Result.success()

View file

@ -23,6 +23,7 @@ import info.nightscout.androidaps.extensions.toVisibility
import info.nightscout.androidaps.interfaces.ActivePlugin
import info.nightscout.androidaps.interfaces.GlucoseUnit
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBus
import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged
@ -52,6 +53,7 @@ class LocalProfileFragment : DaggerFragment() {
@Inject lateinit var activePlugin: ActivePlugin
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var localProfilePlugin: LocalProfilePlugin
@Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var hardLimits: HardLimits
@Inject lateinit var protectionCheck: ProtectionCheck
@Inject lateinit var dateUtil: DateUtil
@ -117,6 +119,11 @@ class LocalProfileFragment : DaggerFragment() {
})
binding.diaLabel.labelFor = binding.dia.editTextId
binding.unlock.setOnClickListener { queryProtection() }
val profiles = localProfilePlugin.profile?.getProfileList() ?: ArrayList()
val activeProfile = profileFunction.getProfileName()
val profileIndex = profiles.indexOf(activeProfile)
localProfilePlugin.currentProfileIndex = if (profileIndex >= 0) profileIndex else 0
}
fun build() {
@ -387,13 +394,14 @@ class LocalProfileFragment : DaggerFragment() {
private fun processVisibility(position: Int) {
binding.diaPlaceholder.visibility = (position == 0).toVisibility()
binding.ic.visibility = (position == 1).toVisibility()
binding.isf.visibility = (position == 2).toVisibility()
binding.basal.visibility = (position == 3).toVisibility()
binding.target.visibility = (position == 4).toVisibility()
binding.ic.visibility = (position == 1).toVisibility()
binding.isf.visibility = (position == 2).toVisibility()
binding.basal.visibility = (position == 3).toVisibility()
binding.target.visibility = (position == 4).toVisibility()
}
private fun updateProtectedUi() {
_binding ?: return
val isLocked = protectionCheck.isLocked(ProtectionCheck.Protection.PREFERENCES)
binding.mainLayout.visibility = isLocked.not().toVisibility()
binding.unlock.visibility = isLocked.toVisibility()

View file

@ -89,80 +89,84 @@ class GlunovoPlugin @Inject constructor(
private fun handleNewData() {
if (!isEnabled()) return
context.contentResolver.query(contentUri, null, null, null, null)?.let { cr ->
val glucoseValues = mutableListOf<CgmSourceTransaction.TransactionGlucoseValue>()
val calibrations = mutableListOf<CgmSourceTransaction.Calibration>()
cr.moveToFirst()
try {
context.contentResolver.query(contentUri, null, null, null, null)?.let { cr ->
val glucoseValues = mutableListOf<CgmSourceTransaction.TransactionGlucoseValue>()
val calibrations = mutableListOf<CgmSourceTransaction.Calibration>()
cr.moveToFirst()
while (!cr.isAfterLast) {
val timestamp = cr.getLong(0)
val value = cr.getDouble(1) //value in mmol/l...
val curr = cr.getDouble(2)
while (!cr.isAfterLast) {
val timestamp = cr.getLong(0)
val value = cr.getDouble(1) //value in mmol/l...
val curr = cr.getDouble(2)
// bypass already processed
if (timestamp < sp.getLong(R.string.key_last_processed_glunovo_timestamp, 0L)) {
cr.moveToNext()
continue
}
// bypass already processed
if (timestamp < sp.getLong(R.string.key_last_processed_glunovo_timestamp, 0L)) {
cr.moveToNext()
continue
}
if (timestamp > dateUtil.now() || timestamp == 0L) {
aapsLogger.error(LTag.BGSOURCE, "Error in received data date/time $timestamp")
cr.moveToNext()
continue
}
if (timestamp > dateUtil.now() || timestamp == 0L) {
aapsLogger.error(LTag.BGSOURCE, "Error in received data date/time $timestamp")
cr.moveToNext()
continue
}
if (value < 2 || value > 25) {
aapsLogger.error(LTag.BGSOURCE, "Error in received data value (value out of bounds) $value")
cr.moveToNext()
continue
}
if (value < 2 || value > 25) {
aapsLogger.error(LTag.BGSOURCE, "Error in received data value (value out of bounds) $value")
cr.moveToNext()
continue
}
if (curr != 0.0)
glucoseValues += CgmSourceTransaction.TransactionGlucoseValue(
timestamp = timestamp,
value = value * Constants.MMOLL_TO_MGDL,
raw = 0.0,
noise = null,
trendArrow = GlucoseValue.TrendArrow.NONE,
sourceSensor = GlucoseValue.SourceSensor.GLUNOVO_NATIVE
)
else
calibrations.add(
CgmSourceTransaction.Calibration(
if (curr != 0.0)
glucoseValues += CgmSourceTransaction.TransactionGlucoseValue(
timestamp = timestamp,
value = value,
glucoseUnit = TherapyEvent.GlucoseUnit.MMOL
value = value * Constants.MMOLL_TO_MGDL,
raw = 0.0,
noise = null,
trendArrow = GlucoseValue.TrendArrow.NONE,
sourceSensor = GlucoseValue.SourceSensor.GLUNOVO_NATIVE
)
)
sp.putLong(R.string.key_last_processed_glunovo_timestamp, timestamp)
cr.moveToNext()
}
cr.close()
else
calibrations.add(
CgmSourceTransaction.Calibration(
timestamp = timestamp,
value = value,
glucoseUnit = TherapyEvent.GlucoseUnit.MMOL
)
)
sp.putLong(R.string.key_last_processed_glunovo_timestamp, timestamp)
cr.moveToNext()
}
cr.close()
if (glucoseValues.isNotEmpty() || calibrations.isNotEmpty())
repository.runTransactionForResult(CgmSourceTransaction(glucoseValues, calibrations, null))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while saving values from Glunovo App", it)
}
.blockingGet()
.also { savedValues ->
savedValues.inserted.forEach {
xDripBroadcast.send(it)
aapsLogger.debug(LTag.DATABASE, "Inserted bg $it")
if (glucoseValues.isNotEmpty() || calibrations.isNotEmpty())
repository.runTransactionForResult(CgmSourceTransaction(glucoseValues, calibrations, null))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while saving values from Glunovo App", it)
}
savedValues.calibrationsInserted.forEach { calibration ->
calibration.glucose?.let { glucosevalue ->
uel.log(
UserEntry.Action.CALIBRATION,
UserEntry.Sources.Dexcom,
ValueWithUnit.Timestamp(calibration.timestamp),
ValueWithUnit.TherapyEventType(calibration.type),
ValueWithUnit.fromGlucoseUnit(glucosevalue, calibration.glucoseUnit.toString)
)
.blockingGet()
.also { savedValues ->
savedValues.inserted.forEach {
xDripBroadcast.send(it)
aapsLogger.debug(LTag.DATABASE, "Inserted bg $it")
}
savedValues.calibrationsInserted.forEach { calibration ->
calibration.glucose?.let { glucosevalue ->
uel.log(
UserEntry.Action.CALIBRATION,
UserEntry.Sources.Dexcom,
ValueWithUnit.Timestamp(calibration.timestamp),
ValueWithUnit.TherapyEventType(calibration.type),
ValueWithUnit.fromGlucoseUnit(glucosevalue, calibration.glucoseUnit.toString)
)
}
aapsLogger.debug(LTag.DATABASE, "Inserted calibration $calibration")
}
aapsLogger.debug(LTag.DATABASE, "Inserted calibration $calibration")
}
}
}
} catch (e: SecurityException) {
aapsLogger.error(LTag.CORE, "Exception", e)
}
}

View file

@ -46,6 +46,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
@ -81,6 +82,7 @@ class CommandQueueImplementation @Inject constructor(
disposable += rxBus
.toObservable(EventProfileSwitchChanged::class.java)
.observeOn(aapsSchedulers.io)
.throttleLatest(3L, TimeUnit.SECONDS)
.subscribe({
if (config.NSCLIENT) { // Effective profileswitch should be synced over NS, do not create EffectiveProfileSwitch here
return@subscribe

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps.utils
import android.Manifest
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.bluetooth.BluetoothAdapter
import android.content.ActivityNotFoundException
import android.content.Context
@ -51,12 +50,20 @@ class AndroidPermission @Inject constructor(
}
if (test) {
if (activity is DaggerAppCompatActivityWithResult)
activity.requestMultiplePermissions.launch(permissions)
try {
activity.requestMultiplePermissions.launch(permissions)
} catch (ignored: IllegalStateException) {
ToastUtils.errorToast(activity, rh.gs(R.string.error_asking_for_permissions))
}
}
if (testBattery) {
try {
if (activity is DaggerAppCompatActivityWithResult)
activity.callForBatteryOptimization.launch(null)
try {
activity.callForBatteryOptimization.launch(null)
} catch (ignored: IllegalStateException) {
ToastUtils.errorToast(activity, rh.gs(R.string.error_asking_for_permissions))
}
} catch (e: ActivityNotFoundException) {
permissionBatteryOptimizationFailed = true
OKDialog.show(activity, rh.gs(R.string.permission), rh.gs(R.string.alert_dialog_permission_battery_optimization_failed)) { activity.recreate() }
@ -95,13 +102,14 @@ class AndroidPermission @Inject constructor(
}
}
@SuppressLint("MissingPermission")
@Synchronized
fun notifyForBtConnectPermission(activity: FragmentActivity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Manifest.permission.BLUETOOTH_CONNECT
if (permissionNotGranted(activity, "android.permission.BLUETOOTH_CONNECT") || permissionNotGranted(activity, "android.permission.BLUETOOTH_SCAN")) {
if (permissionNotGranted(activity, Manifest.permission.BLUETOOTH_CONNECT) || permissionNotGranted(activity, Manifest.permission.BLUETOOTH_SCAN)) {
val notification = NotificationWithAction(injector, Notification.PERMISSION_BT, rh.gs(R.string.needconnectpermission), Notification.URGENT)
notification.action(R.string.request) { askForPermission(activity, arrayOf("android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT")) }
notification.action(R.string.request) { askForPermission(activity, arrayOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT)) }
rxBus.send(EventNewNotification(notification))
} else {
activity.startActivity(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE))
@ -145,8 +153,10 @@ class AndroidPermission @Inject constructor(
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
// Show alert dialog to the user saying a separate permission is needed
// Launch the settings activity if the user prefers
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + activity.packageName))
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + activity.packageName)
)
activity.startActivity(intent)
}
}

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.utils.stats
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Typeface
import android.util.LongSparseArray
@ -99,9 +98,19 @@ class TddCalculator @Inject constructor(
return result
}
fun calculateToday(): TotalDailyDose {
var startTime = MidnightTime.calc(dateUtil.now())
val endTime = dateUtil.now()
return calculate(startTime, endTime)
}
fun calculateDaily(startHours: Long, endHours: Long): TotalDailyDose {
val startTime = dateUtil.now() + T.hours(hour = startHours).msecs()
val endTime = dateUtil.now() + T.hours(hour = endHours).msecs()
return calculate(startTime, endTime)
}
fun calculate(startTime: Long, endTime: Long): TotalDailyDose {
val tdd = TotalDailyDose(timestamp = startTime)
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
.filter { it.type != Bolus.Type.PRIMING }
@ -147,10 +156,10 @@ class TddCalculator @Inject constructor(
return totalTdd
}
@SuppressLint("SetTextI18n")
fun stats(context: Context): TableLayout {
val tdds = calculate(7)
val averageTdd = averageTDD(tdds)
val todayTdd = calculateToday()
val lp = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT)
return TableLayout(context).also { layout ->
layout.layoutParams = TableLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)
@ -172,6 +181,13 @@ class TddCalculator @Inject constructor(
})
layout.addView(averageTdd.toTableRow(context, rh, tdds.size(), includeCarbs = true))
}
layout.addView(TextView(context).apply {
text = rh.gs(R.string.today)
setTypeface(typeface, Typeface.BOLD)
gravity = Gravity.CENTER_HORIZONTAL
setTextAppearance(android.R.style.TextAppearance_Material_Medium)
})
layout.addView(todayTdd.toTableRow(context, rh, dateUtil, includeCarbs = true))
}
}
}
}

View file

@ -182,7 +182,7 @@ public class TimeListEdit {
numberPickers1[position].setTextWatcher(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText());
Double value1 = SafeParse.INSTANCE.stringToDouble(numberPickers1[position].getText(), 0.0);
Double value2 = value2(position);
if (data2 != null && value1 > value2) {
value2 = value1;
@ -209,7 +209,7 @@ public class TimeListEdit {
@Override
public void afterTextChanged(Editable s) {
Double value1 = value1(position);
Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText());
Double value2 = SafeParse.INSTANCE.stringToDouble(numberPickers2[position].getText(), 0.0);
if (data2 != null && value2 < value1) {
value1 = value2;
numberPickers1[position].setValue(value1);

View file

@ -443,12 +443,7 @@ class BolusWizard @Inject constructor(
commandQueue.tempBasalPercent(0, 120, true, profile, PumpSync.TemporaryBasalType.NORMAL, object : Callback() {
override fun run() {
if (!result.success) {
val i = Intent(ctx, ErrorHelperActivity::class.java)
i.putExtra(ErrorHelperActivity.SOUND_ID, R.raw.boluserror)
i.putExtra(ErrorHelperActivity.STATUS, result.comment)
i.putExtra(ErrorHelperActivity.TITLE, rh.gs(R.string.tempbasaldeliveryerror))
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ctx.startActivity(i)
ErrorHelperActivity.runAlarm(ctx, result.comment, rh.gs(R.string.tempbasaldeliveryerror), R.raw.boluserror)
}
}
})

View file

@ -204,7 +204,7 @@ class Widget : AppWidgetProvider() {
}
}
fun updateProfile(views: RemoteViews) {
private fun updateProfile(views: RemoteViews) {
val profileTextColor =
profileFunction.getProfile()?.let {
if (it is ProfileSealed.EPS) {
@ -226,7 +226,7 @@ class Widget : AppWidgetProvider() {
}
private fun updateSensitivity(views: RemoteViews) {
if (sp.getBoolean(R.string.key_openapsama_useautosens, false) && constraintChecker.isAutosensModeEnabled().value())
if (constraintChecker.isAutosensModeEnabled().value())
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_swap_vert_black_48dp_green)
else
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_x_swap_vert)
@ -256,7 +256,7 @@ class Widget : AppWidgetProvider() {
internal fun updateWidget(context: Context) {
context.sendBroadcast(Intent().also {
it.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, AppWidgetManager.getInstance(context).getAppWidgetIds(ComponentName(context, Widget::class.java)))
it.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, AppWidgetManager.getInstance(context)?.getAppWidgetIds(ComponentName(context, Widget::class.java)))
it.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
})
}

View file

@ -2,7 +2,6 @@
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@ -11,17 +11,6 @@
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/noprofile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/noprofileset"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?attr/alarmColor"
android:textStyle="bold"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -82,8 +71,7 @@
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1">
android:layout_height="300dp">
<com.jjoe64.graphview.GraphView
android:id="@+id/bg_graph"
@ -112,4 +100,4 @@
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

View file

@ -5,28 +5,6 @@
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/filter"
app:endIconMode="clear_text">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/pref_filter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:autofillHints="@string/filter"
android:gravity="start"
android:textStyle="bold"
android:inputType="text"
android:background="@color/transparent"/>
</com.google.android.material.textfield.TextInputLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"

View file

@ -12,52 +12,38 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/defaultBackground"
android:orientation="horizontal"
android:paddingBottom="10dp">
android:layout_marginBottom="10dp">
<TextView
android:id="@+id/menu1"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:gravity="center"
android:paddingStart="5dp"
android:paddingEnd="5dp"
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profile1" />
<TextView
android:id="@+id/menu2"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:gravity="center"
android:paddingStart="5dp"
android:paddingEnd="5dp"
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profile2" />
</LinearLayout>
</com.google.android.material.tabs.TabLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/profile_type_title"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:hint="@string/profiletype">
android:hint="@string/profiletype"
android:paddingHorizontal="5dp">
<com.google.android.material.textfield.TextInputEditText
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/profile_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:importantForAutofill="no" />
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
@ -206,21 +192,18 @@
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/selected_profile">
android:hint="@string/selected_profile"
android:paddingHorizontal="5dp">
<com.google.android.material.textfield.TextInputEditText
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/available_profile_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:clickable="true"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:importantForAutofill="no" />
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
@ -233,21 +216,19 @@
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/careportal_profileswitch">
android:hint="@string/careportal_profileswitch"
android:paddingHorizontal="5dp">
<com.google.android.material.textfield.TextInputEditText
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/profileswitch_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:clickable="true"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:importantForAutofill="no" />
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>

View file

@ -22,6 +22,7 @@
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="3dp"
android:contentDescription="@string/chart_menu"
android:paddingTop="5dp"
app:srcCompat="@drawable/ic_arrow_drop_down_white_24dp" />

View file

@ -13,7 +13,7 @@
android:gravity="center_vertical|center_horizontal"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="---"
android:text="@string/no_watch_connected"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
tools:ignore="HardcodedText" />

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
android:title="@string/search"
app:showAsAction="always"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_default"
android:title="@string/motoldefaultprofile" />
<item
android:id="@+id/menu_default_dpv"
android:title="@string/dpvdefaultprofile" />
<item
android:id="@+id/menu_current"
android:title="@string/currentprofile" />
<item
android:id="@+id/menu_available"
android:title="@string/availableprofile" />
<item
android:id="@+id/menu_profileswitch"
android:title="@string/careportal_profileswitch" />
</menu>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Lliurar un bolus amb part de la insulina que falta utilitzant una jeringa/ploma o el menú d\'encebat.</string>
<string name="wronginsulin_donothing">No fer res i permetre que AndroidAPS corregeixi els possibles valors alts de glucèmia que es produeixin.</string>
<string name="iob_label">Insulina \"a bord\" (IOB)</string>
<string name="iob_which">Marqueu totes les respostes correctes.</string>
<string name="iob_value">El valor d\'IOB es veu afectat per les basals temporals lliurades.</string>
<string name="iob_hightemp">Una basal temporal alta no serà lliurada si la glucèmia està per sota de l\'objectiu.</string>
<string name="iob_posiob">Un valor d\'IOB positiu durant un període de temps important suggereix resistència a la insulina o àpats no anunciats.</string>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Porovnat hodnoty v AndroidAPS s hodnotami v historii pumpy (pokud to pumpa podporuje).</string>
<string name="wronginsulin_prime">Pošlete bolus na vypočtený „chybějící“ inzulín buď injekční stříkačkou nebo perem nebo pomocí plnění na pumpě.</string>
<string name="wronginsulin_donothing">Neudělejte nic a dovolte AndroidAPS opravit jakoukoliv výslednou vysokou hladinu glukózy v krvi.</string>
<string name="cob_label">Zbývající sacharidy (COB)</string>
<string name="cob_question">Jak změna hodnoty citlivosti ovlivňuje výpočet COB?</string>
<string name="cob_longer">Zvýšení hodnoty citlivosti prodlouží dobu absorpce sacharidů</string>
<string name="cob_shorter">Zvýšení hodnoty citlivosti zkrátí dobu absorpce sacharidů</string>
<string name="cob_no_effect">Zvýšení citlivosti neovlivní vypočtenou absorpci sacharidů</string>
<string name="cob2_question">Jak změna inzulíno-sacharidového poměru ovlivňuje výpočet COB?</string>
<string name="cob2_longer">Zvýšení hodnoty inzulíno-sacharidového poměru prodlouží dobu absorpce sacharidů</string>
<string name="cob2_shorter">Zvýšení hodnoty inzulíno-sacharidového poměru zkrátí dobu absorpce sacharidů</string>
<string name="cob2_no_effect">Zvýšení inzulíno-sacharidového poměru neovlivní vypočtenou absorpci sacharidů</string>
<string name="cob3_question">Jak procentuální změna profilu ovlivňuje výpočet COB?</string>
<string name="cob3_longer">Nastavením profilu na 150 % dojde k prodloužení doby absorpce sacharidů</string>
<string name="cob3_shorter">Nastavením profilu na 150 % dojde ke zkrácení doby absorpce sacharidů</string>
<string name="cob3_no_effect">Nastavení profilu na 150% neovlivní vypočtenou absorpci sacharidů</string>
<string name="iob_label">Aktivní inzulín (IOB)</string>
<string name="iob_which">Zatrhněte všechny správné odpovědi.</string>
<string name="iob_value">Hodnota IOB je ovlivněna vydanými dočasnými bazály.</string>
<string name="iob_hightemp">Vysoký dočasný bazál nebude spuštěn, pokud je Vaše glykémie nižší než cíl.</string>
<string name="iob_negiob">Negativní IOB po značnou dobu bez cvičení naznačuje, že váš profil je příliš \"silný\" a ve vašem profilu je potřeba méně inzulínu.</string>

View file

@ -433,8 +433,8 @@
<string name="ns_localbroadcasts_title">Povolení odesílaní</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamická ISF</string>
<string name="DynISFAdjust_title">Korekční faktor pro DynamicISF v %%</string>
<string name="DynISFAdjust_summary">Korekční faktor pro DynamicISF. Pro agresivnější korekční dávky nastavte hodnoty větší než 100%%, a pro méně agresivní korekce menší než 100%%.</string>
<string name="DynISFAdjust_title" formatted="false">Korekční faktor pro DynamicISF v %</string>
<string name="DynISFAdjust_summary" formatted="false">Korekční faktor pro DynamicISF. Pro agresivnější korekční dávky nastavte hodnoty vyšší než 100 %, pro méně agresivní korekce nižší než 100 %.</string>
<string name="enableuam">Povolit UAM</string>
<string name="enablesmb">Povolit SMB</string>
<string name="enablesmb_summary">Použít super mikro bolusy místo dočasných bazálů pro zrychlení účinku</string>
@ -645,7 +645,6 @@
<string name="needsystemwindowpermission">Pro oznámení vyžaduje aplikace oprávnění systémového okna</string>
<string name="needlocationpermission">Aplikace potřebuje oprávnění k přístupu k poloze kvůli skenování BT a WiFi identifikaci</string>
<string name="needstoragepermission">Aby bylo možné nahrávat logy a exportovat nastavení, je nutné pro aplikaci povolit oprávnění přístupu k úložišti</string>
<string name="needconnectpermission">Aplikace potřebuje oprávnění bluetooth</string>
<string name="request">Požadavek</string>
<string name="open_navigation">Otevřít menu</string>
<string name="close_navigation">Zavřít menu</string>
@ -1037,10 +1036,13 @@
<string name="a11y_only_on_watch">pouze na hodinkách</string>
<string name="a11y_only_on_phone">pouze na telefonu</string>
<string name="a11y_drag_and_drop_handle">úchyt pro přetažení</string>
<string name="search">Hledat</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Přijímat hodnoty glykémie ze senzoru GlucoRx Aidex.</string>
<string name="blocked_by_charging">Zablokováno možností nabíjení</string>
<string name="blocked_by_connectivity">Zablokováno možností připojení</string>
<string name="no_watch_connected">(Žádné hodinky nejsou připojeny)</string>
<string name="error_asking_for_permissions">Chyba žádosti o oprávnění</string>
</resources>

View file

@ -123,6 +123,7 @@
<string name="sensitivity_cannula">Notering af kanyleskift vil nulstille Autosens ratio tilbage til 100%.</string>
<string name="sensitivity_time">Nogle af plugin mulighederne har konfigurerbare tidsintervaller, der kan indstilles af brugeren.</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivity_hint2">https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens</string>
<string name="wrongcarbs_label">Kulhydrat indtastningsfejl</string>
<string name="wrongcarbs_whattodo">Hvad gør du, hvis du har lavet en forkert kulhydrat indtastning?</string>
<string name="wrongcarbs_treatmentstab">Slet den forkerte indtastning i Behandlinger og indtast korrekte nye kulhydrat værdier.</string>
@ -135,8 +136,20 @@
<string name="wronginsulin_compare">Sammenlign værdier i AndroidAPS og pumpehistorik (hvis pumpen understøtter dette).</string>
<string name="wronginsulin_prime">Bolus en del af din beregnede \"glemte\" insulin med enten sprøjter / pen eller brug af en kanylefyldning.</string>
<string name="wronginsulin_donothing">Gør ingenting og tillad AndroidAPS at rette op på højt blodsukker.</string>
<string name="cob_label">Kulhydrater om bord (COB)</string>
<string name="cob_question">Hvordan ændring af ISF værdi påvirker COB beregning?</string>
<string name="cob_longer">Ved øget ISF, vil kulhydrater være længere tid om at absorberes</string>
<string name="cob_shorter">Ved øget ISF, vil kulhydrater være kortere tid om at absorberes</string>
<string name="cob_no_effect">Øget ISF vil ikke påvirke absorbering af beregnet kulhydrat</string>
<string name="cob2_question">Hvordan ændring af IC værdi påvirker COB beregning?</string>
<string name="cob2_longer">Ved øget IC, vil kulhydrater være længere tid om at absorberes</string>
<string name="cob2_shorter">Ved øget IC, vil kulhydrater være kortere tid om at absorberes</string>
<string name="cob2_no_effect">Øget IC vil ikke påvirke absorbering af beregnet kulhydrat</string>
<string name="cob3_question">Hvordan skift af profil procent påvirker COB beregning?</string>
<string name="cob3_longer">Ved indstilling af profil til 150%, vil kulhydrater være længere tid om at absorberes</string>
<string name="cob3_shorter">Ved indstilling af profil til 150%, vil kulhydrater være kortere tid om at absorberes</string>
<string name="cob3_no_effect">Ved indstilling af profil til 150%, påvirkes absorbering af beregnet kulhydrat ikke</string>
<string name="iob_label">Insulin om bord (IOB)</string>
<string name="iob_which">Tjek alle de korrekte svar.</string>
<string name="iob_value">IOB-værdi påvirkes af midlertidige basaler.</string>
<string name="iob_hightemp">Høj midlertidlig basal vil ikke blive givet, når dit blodsukker er under målet.</string>
<string name="iob_negiob">Negative IOB i en længere periode uden motion tyder på, at din profil er for stærk, og at der er behov for mindre insulin i dine indstillinger.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Behandlings sikkerhed</string>
<string name="treatmentssafety_maxbolus_title">Maks tilladt bolus [IE]</string>
<string name="treatmentssafety_maxcarbs_title">Maks tilladte kulhydrater [g]</string>
<string name="treatmentssafety_lgsThreshold_title">BS under værdi for LGS grænse</string>
<string name="nav_preferences_plugin">%1$s indstillinger</string>
<string name="nav_preferences">Indstillinger</string>
<string name="nav_refreshtreatments">Opdater behandlinger fra NS</string>
@ -432,14 +433,15 @@
<string name="ns_localbroadcasts_title">Aktiver lokale udsendelser.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamisk ISF</string>
<string name="DynISFAdjust_title">DynamicISF-justeringsfaktor %%</string>
<string name="DynISFAdjust_summary">Justeringsfaktor for Dynamisk ISF. Indstil mere end 100%% for mere aggressive korrektionsdoser og mindre end 100%% for mindre aggressive korrektioner.</string>
<string name="DynISFAdjust_title" formatted="false">DynamiskISF-justeringsfaktor %</string>
<string name="DynISFAdjust_summary" formatted="false">Justeringsfaktor for DynamiskISF. Indstil mere end 100% for mere aggressive korrektionsdoser og mindre end 100% for mindre aggressive korrektioner.</string>
<string name="enableuam">Aktiver UAM</string>
<string name="enablesmb">Aktiver SMB</string>
<string name="enablesmb_summary">Brug Super Mikro Boluser i stedet for midlertidig basal for hurtigere handling</string>
<string name="enableuam_summary">Detektering af uanmeldte måltider</string>
<string name="insulin_oref_peak">IOB Kurve Peak-Tid</string>
<string name="insulin_peak_time">Spidstidspunkt [min]</string>
<string name="insulin_peak">Top</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>
@ -591,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Denne værdi kaldes Max IOB i OpenAPS kontekst\nOpenAPS vil ikke tilføje mere insulin, hvis den aktuelle IOB er større end denne værdi</string>
<string name="absorption_cutoff_title">Måltid max absorptionstid [h]</string>
<string name="absorption_cutoff_summary">Tid hvor ethvert måltid betragtes som absorberet. Resterende kulhydrater vil blive afskåret.</string>
<string name="treatmentssafety_lgsThreshold_summary">BS værdi under hvilken insulin er suspenderet. Standard værdi bruger standard målmodel. Bruger kan indstille værdi mellem 60 mg/dl (3,3 mmol/l) og 100 mg/dl (5,5 mmol/l). Værdier under 65/3,6 resulterer i brug af standardmodel</string>
<string name="overview_show_notes_field_in_dialogs_title">Vis notefelt i behandlingsdialoger</string>
<string name="next_button">Næste</string>
<string name="previous_button">Forrige</string>
@ -603,7 +606,11 @@
<string name="secondcarbsincrement">Anden kulhydratstigning</string>
<string name="thirdcarbsincrement">Tredje kulhydratstigning</string>
<string name="cgm">CGM</string>
<string name="ns_cellular">Brug mobilforbindelse</string>
<string name="ns_wifi">Brug Wi-Fi-forbindelse</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="ns_charging">Under opladning</string>
<string name="ns_battery">På batteri</string>
<string name="connectionsettings_title">Indstillinger for forbindelse</string>
<string name="ns_wifi_allowedssids">Tilladte SSID\'er (semikolon separeret)</string>
<string name="ns_allowroaming">Tillad forbindelse i roaming</string>
@ -638,7 +645,6 @@
<string name="needsystemwindowpermission">Applikationen mangler system vindues tilladelse til notifikationer</string>
<string name="needlocationpermission">Applikationen mangler lokations tilladelse til BT scanning og WIFI identifikation</string>
<string name="needstoragepermission">Applikationen mangler lagerstyrings tilladelse for at gemme logfiler og exporteringsindstillinger</string>
<string name="needconnectpermission">Applikationen kræver tilladelse til bluetooth</string>
<string name="request">Anmod</string>
<string name="open_navigation">Åbn navigation</string>
<string name="close_navigation">Luk navigation</string>
@ -678,6 +684,8 @@
<string name="error_adding_treatment_message">En behandling (insulin: %1$.2f, kulhydrater: %2$d, kl: %3$s) kunne ikke tilføjes til behandlinger. Tjek og tilføj venligst en note manuelt efter behov.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), forsinkelse: %3$d m</string>
<string name="openaps_noasdata">Ingen tilgængelige autosens data</string>
<string name="log_files">Logfiler</string>
<string name="miscellaneous">Diverse</string>
<string name="nav_logsettings">Log indstillinger</string>
<string name="resettodefaults">Nulstil til standardindstillinger</string>
<string name="nsmalfunction">NSClient funktionsfejl. Overvej NS og NSClient genstart.</string>
@ -770,6 +778,11 @@
<string name="invalidpct">Ugyldig angivelse af %</string>
<string name="average">Gennemsnit</string>
<string name="tir">Tid i målområde</string>
<string name="day_tir">Dags TIR</string>
<string name="night_tir">Nat TIR</string>
<string name="detailed_14_days">Detaljerede 14 dage</string>
<string name="std_deviation">SD: %1$s</string>
<string name="hba1c">HbA1c: </string>
<string name="activitymonitor">Aktivitetsovervågning</string>
<string name="doyouwantresetstats">Ønsker du at nulstille aktivitetsstatistik?</string>
<string name="statistics">Statistikker</string>
@ -956,7 +969,7 @@
<string name="wear_action_tempt_max_bg_error">Max-BS udenfor området!</string>
<string name="wear_action_tempt_manual_range_message">Midlertidigt mål:\nMin: %1$s\nMax: %2$s\nVarighed: %3$s</string>
<string name="wear_action_tempt_manual_message">Midlertigt mål:\nMål: %1$s\nVarighed: %2$s</string>
<string name="wear_action_tempt_preset_message">Midlertigt mål:\Grund: %1$s\nMål: %2$s\nVarighed: %3$s</string>
<string name="wear_action_tempt_preset_message">Midlertigt mål:\nGrund: %1$s\nMål: %2$s\nVarighed: %3$s</string>
<string name="quick_wizard_message">Hurtigguide: %1$s\nInsulin: %2$.2fE\nKH: %3$dg</string>
<string name="wizard_result">Guide:\nInsulin: %1$.2fE\nKH: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Vis post på enhed:</string>
@ -965,9 +978,11 @@
<string name="wizard_no_active_profile">Ingen aktiv profil angivet!</string>
<string name="wizard_no_cob">Ukendt COB! BG læsning mangler eller nylig app genstart?</string>
<string name="wizard_carbs_constraint">KH begrænsninger overtrådt!</string>
<string name="wizard_explain_calc">Beregner (IC: %1$.1f, ISF: %2$.1f)</string>
<string name="wizard_explain_carbs">Kulhydrater: %1$.2fE</string>
<string name="wizard_explain_cob">COB: %1$.0fg %2$.2fE</string>
<string name="wizard_explain_bg">BS: %1$.2fE</string>
<string name="wizard_explain_iob">IOB: %1$.2fE</string>
<string name="wizard_explain_superbolus">Superbolus: %1$.2fE</string>
<string name="wizard_explain_trend">15\' trend: %1$.2fE</string>
<string name="wizard_explain_percent">Procent: %1$.2fE x %2$d%% ≈ %3$.2fE</string>
@ -994,6 +1009,10 @@
<string name="count_selected">%1$d valgt</string>
<string name="sort_label">Sortér</string>
<string name="dialog_canceled">Dialog annulleret</string>
<string name="veryLow" comment="below 3.1">Meget lav</string>
<string name="low" comment="3.1-3.9">Lav</string>
<string name="high" comment="10.0-13.9">Høj</string>
<string name="veryHigh" comment="above 13.9">Meget høj</string>
<string name="below" comment="below &quot;in range&quot;">Under</string>
<string name="in_range">Inden for området</string>
<string name="above" comment="above &quot;in range&quot;">Over</string>
@ -1002,6 +1021,12 @@
<string name="widget_description">AndroidAPS widget</string>
<string name="configure">Indstil gennemsigtighed</string>
<string name="loop_status">Loop status</string>
<string name="graph_scale">Graf skala</string>
<string name="profile1">Profil 1</string>
<string name="profile2">Profil 2</string>
<string name="login">Log ind</string>
<string name="remove_all">Fjern alle</string>
<string name="reset_start">Nulstil start</string>
<string name="a11y_otp_qr_code">QR-kode til opsætning af engangs kodeord</string>
<string name="a11y_open_settings">Åbn indstillinger</string>
<string name="a11y_set_carb_timer">indstil KH alarm</string>
@ -1011,8 +1036,12 @@
<string name="a11y_only_on_watch">kun på ur</string>
<string name="a11y_only_on_phone">kun på telefon</string>
<string name="a11y_drag_and_drop_handle">træk og slip håndtering</string>
<string name="search">Søg</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Modtag BG-værdier fra GlucoRx Aidex CGMS.</string>
<string name="blocked_by_charging">Blokeret af opladningsmuligheder</string>
<string name="blocked_by_connectivity">Blokeret af forbindelsesmuligheder</string>
<string name="no_watch_connected">(Intet ur forbundet)</string>
</resources>

View file

@ -104,9 +104,11 @@
<string name="troubleshooting_wheretoask">Wo kannst Du nach Hilfe für AndroidAPS suchen?</string>
<string name="troubleshooting_fb">Du kannst in der AndroidAPS-Facebook-Gruppe um Rat bitten.</string>
<string name="troubleshooting_wiki">Du solltest die AndroidAPS-Dokumentation lesen (und wiederholt lesen).</string>
<string name="troubleshooting_gitter">Im Discord Channel AndroidAPS kannst Du bei technischen Problemen oder Fragestellungen um Hilfe bitten.</string>
<string name="troubleshooting_yourendo">Du solltest Deine Diabetesklinik / Deinen Diabetologen fragen.</string>
<string name="troubleshooting_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Installing-AndroidAPS/Update-to-new-version.html#problembehandlung</string>
<string name="troubleshooting_hint2">https://www.facebook.com/groups/loopedDE/</string>
<string name="troubleshooting_hint3">https://discord.gg/4fQUWHZ4Mw</string>
<string name="insulin_label">Insulin-Plugins</string>
<string name="insulin_ultrarapid">Welches Insulin kann mit dem Ultra-Rapid-Oref-Plugin verwendet werden?</string>
<string name="insulin_fiasp">Fiasp®</string>
@ -121,6 +123,7 @@
<string name="sensitivity_cannula">Das Protokollieren eines Kanülenwechsels setzt das Autosens Verhältnis wieder auf 100% zurück.</string>
<string name="sensitivity_time">Einige der Plugin-Optionen haben konfigurierbare Zeiträume, die vom Benutzer eingestellt werden können.</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivity_hint2">https://androidaps.readthedocs.io/de/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens</string>
<string name="wrongcarbs_label">Fehler bei der KH-Eingabe</string>
<string name="wrongcarbs_whattodo">Was sollst Du tun, wenn Du einen falschen KH-Eintrag gemacht hast?</string>
<string name="wrongcarbs_treatmentstab">Lösche die falsche Eingabe in der Behandlung und gib den richtigen neuen Kohlehydratwert ein.</string>
@ -133,8 +136,20 @@
<string name="wronginsulin_compare">Vergleiche die Werte der Historie in AAPS und Deiner Pumpe (wenn die Pumpe diese Funktion bietet).</string>
<string name="wronginsulin_prime">Gib einen Teil-Bolus des \'nicht erhaltenen\' Insulins mit Spritze / Pen oder durch Befüllen der Kanüle.</string>
<string name="wronginsulin_donothing">Unternimm nichts und lass AndroidAPS die entstehenden hohen Glukosewerte korrigieren.</string>
<string name="cob_label">KH an Board (COB)</string>
<string name="cob_question">Wie beeinflusst das Ändern des ISF-Wertes die COB-Berechnung?</string>
<string name="cob_longer">Steigende ISF absorbiert Kohlenhydrate länger</string>
<string name="cob_shorter">Steigende ISF absorbiert Kohlenhydrate kürzer</string>
<string name="cob_no_effect">Steigende ISF verändert die Dauer für die Kohlenhydrataufnahme nicht</string>
<string name="cob2_question">Wie beeinflusst das Ändern des ISF-Wertes die COB-Berechnung?</string>
<string name="cob2_longer">Steigende IC absorbiert Kohlenhydrate länger</string>
<string name="cob2_shorter">Steigende IC absorbiert Kohlenhydrate kürzer</string>
<string name="cob2_no_effect">Steigende IC verändert die Zeit für die Kohlenhydrataufnahme nicht</string>
<string name="cob3_question">Wie beeinflusst die Änderung des Profil-Prozentsatzes die COB-Berechnung?</string>
<string name="cob3_longer">Die Einstellung des Profils auf 150% verlängert die Zeit für Kohlenhydrataufnahme</string>
<string name="cob3_shorter">Die Einstellung des Profils auf 150% verkürzt die Zeit für Kohlenhydrataufnahme</string>
<string name="cob3_no_effect">Die Einstellung des Profils auf 150% verändert die Zeit für die Kohlenhydrataufnahme nicht</string>
<string name="iob_label">Aktives Insulin (IOB)</string>
<string name="iob_which">Kreuze alle richtigen Antworten an.</string>
<string name="iob_value">IOB wird von den abgegebenen temporären Basalraten beeinflusst.</string>
<string name="iob_hightemp">Eine hohe temporäre Basalrate wird nicht abgegeben, wenn der BZ unterhalb des Zielwerts liegt.</string>
<string name="iob_negiob">Ein negativer IOB über einen längeren Zeitraum bei fehlender Bewegung deutet darauf hin, dass Dein Profil zu stark ist und weniger Insulin in Deinen Einstellungen benötigt wird.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Sicherheitseinstellungen der Behandlungen</string>
<string name="treatmentssafety_maxbolus_title">Max. erlaubter Bolus [IE]</string>
<string name="treatmentssafety_maxcarbs_title">Max. erlaubte Kohlenhydrate [g]</string>
<string name="treatmentssafety_lgsThreshold_title">BG-Pegel, unterhalb dessen die Aussetzung wegen niedriger Glukoseaussetzung eintritt</string>
<string name="nav_preferences_plugin">%1$s-Einstellungen</string>
<string name="nav_preferences">Einstellungen</string>
<string name="nav_refreshtreatments">Behandlungen von NS aktualisieren</string>
@ -25,6 +26,7 @@
<string name="description_ns_client">Synchronisiert deine Daten mit Nightscout</string>
<string name="description_ama">Stand des Algorithmus in 2017</string>
<string name="description_smb">Der aktuellste Algorithmus für erfahrene Nutzer</string>
<string name="description_smb_dynamic_isf">Neuester Algorithmus für fortgeschrittene Benutzer mit dynamischer/automatischer ISF</string>
<string name="description_overview">Zeigt den aktuellen Status deines Loops und Schaltflächen für die geläufigsten Aktionen an</string>
<string name="description_persistent_notification">Zeigt eine fortlaufende Benachrichtigung mit einer kurzen Übersicht darüber, was dein Loop derzeit tut</string>
<string name="description_profile_local">Definiere ein Profil, was auch offline verfügbar ist.</string>
@ -264,6 +266,7 @@
<string name="configbuilder_shortname">KONF</string>
<string name="loop_shortname">LOOP</string>
<string name="oaps_shortname">OAPS</string>
<string name="dynisf_shortname">DYNISF</string>
<string name="localprofile_shortname">LP</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">VP</string>
@ -430,12 +433,15 @@
<string name="ns_localbroadcasts_title">Aktiviere lokale Broadcasts</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamischer ISF</string>
<string name="DynISFAdjust_title" formatted="false">DynamicISF Anpassungsfaktor %</string>
<string name="DynISFAdjust_summary" formatted="false">Anpassungsfaktor für DynamicISF. Stelle mehr als 100 % für aggressivere Korrekturdosen ein, und weniger als 100 % für weniger aggressive Korrekturen.</string>
<string name="enableuam">Aktiviere UAM</string>
<string name="enablesmb">Aktiviere SMB</string>
<string name="enablesmb_summary">Benutze Super-Mikro-Boli anstelle von temporären Basalraten, um eine schnellere Wirkung zu erreichen.</string>
<string name="enableuam_summary">Erkennung von unangekündigten Mahlzeiten</string>
<string name="insulin_oref_peak">Wirkungshoch der IOB-Kurve</string>
<string name="insulin_peak_time">Wirkungshoch [min]</string>
<string name="insulin_peak">Gipfel</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>
@ -497,6 +503,7 @@
<string name="negativeonly">Nur negative</string>
<string name="overview_editquickwizard_usecob">COB Berechnung</string>
<string name="overview_editquickwizard_usetemptarget">Temporäres Ziel Berechnung</string>
<string name="overview_editquickwizard_usepercentage">Prozentuale Berechnung</string>
<string name="loopenabled">Loop aktiviert</string>
<string name="apsselected">APS ausgewählt</string>
<string name="nsclienthaswritepermission">Nightscout-Client hat Schreibrechte</string>
@ -586,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Diesen Wert nennt OpenAPS MaxIOB.\nSolange dieser Wert überschritten wird, wird AndroidAPS kein Insulin abgeben.</string>
<string name="absorption_cutoff_title">Maximale Dauer der Essens-Resorption [h]</string>
<string name="absorption_cutoff_summary">Zeit, nach der jede Mahlzeit mit Sicherheit absorbiert ist. Verbleibende Kohlenhydrate werden danach nicht mehr berücksichtigt.</string>
<string name="treatmentssafety_lgsThreshold_summary">Der BG-Wert, unter dem die Insulinzuführung ausgesetzt wird. Der Standardwert verwendet das Standard-Zielmodell. Der Benutzer kann einen Wert zwischen 60mg/dl (3.3 mmol/l) und 100mg/dl (5.5mmol/l) setzen. Werte unterhalb 65/3.6 führen zur Verwendung des Standardmodells</string>
<string name="overview_show_notes_field_in_dialogs_title">Zeige Feld für Notizen in den Behandlungsdialogen</string>
<string name="next_button">Weiter</string>
<string name="previous_button">Zurück</string>
@ -598,7 +606,11 @@
<string name="secondcarbsincrement">Zweite KH-Erhöhung</string>
<string name="thirdcarbsincrement">Dritte KH-Erhöhung</string>
<string name="cgm">CGM</string>
<string name="ns_cellular">Mobilfunkverbindung verwenden</string>
<string name="ns_wifi">WLAN Verbindung verwenden</string>
<string name="ns_wifi_ssids">WLAN SSID</string>
<string name="ns_charging">Während des Ladevorgangs</string>
<string name="ns_battery">Bei Batteriebetrieb</string>
<string name="connectionsettings_title">Verbindungs-Einstellungen</string>
<string name="ns_wifi_allowedssids">Erlaubte SSIDs (durch Semikolon getrennt)</string>
<string name="ns_allowroaming">Erlaube Verbindung bei Roaming</string>
@ -633,7 +645,6 @@
<string name="needsystemwindowpermission">Die App benötigt die Systemberechtigung für App-Benachrichtigungen</string>
<string name="needlocationpermission">Die App benötigt die Berechtigung für den Standort, um Bluetooth und WLAN nutzen zu können</string>
<string name="needstoragepermission">Die App benötigt Zugriffsrechte für den Speicher um Log-Dateien zu sichern und die Einstellungen zu exportieren.</string>
<string name="needconnectpermission">App benötigt Bluetooth-Berechtigung</string>
<string name="request">Anfordern</string>
<string name="open_navigation">Menü öffnen</string>
<string name="close_navigation">Menü schließen</string>
@ -655,7 +666,10 @@
<string name="sensitivity_raises_target_title">Empfindlichkeit erhöht den Zielwert</string>
<string name="sensitivity_raises_target_summary">Wenn eine höhere Empfindlichkeit festgestellt wird, wird der Glukose-Zielwert erhöht.</string>
<string name="careportal_removestartedevents">\"AndroidAPS gestartet\" Ereignisse löschen</string>
<string name="show_invalidated">Zeige Ungültige</string>
<string name="hide_invalidated">Verstecke Ungültige</string>
<string name="remove_items">Objekte entfernen</string>
<string name="sort_items">Einträge sortieren</string>
<string name="storedsettingsfound">Gespeicherte Einstellungen gefunden</string>
<string name="allow_hardware_pump_text">WARNUNG: Wenn Du eine echte Pumpe aktivierst und anschließt, kopiert AndroidAPS die Basaleinstellungen vom aktiven Profil zur Pumpe (und behält sie bei). Die Einstellungen in der Pumpe werden hierbei überschrieben. Wenn Du Dir nicht sicher bist oder die Basaleinstellungen in der Pumpe nicht überschreiben möchten, drücke \"Abbrechen\" und vollziehe den Wechsel zur Pumpe später.</string>
<string name="error_adding_treatment_title">Behandlungsdaten unvollständig</string>
@ -670,6 +684,8 @@
<string name="error_adding_treatment_message">Der Eintrag (Insulin: %1$.2f, Kohlenhydrate: %2$d, um: %3$s) konnte nicht als Behandlung gespeichert werden. Bitte überprüfe die aktuelle Liste und füge, falls notwendig, den Datensatz manuell hinzu.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), Verzögerung: %3$d m</string>
<string name="openaps_noasdata">Keine Autosens-Daten verfügbar</string>
<string name="log_files">Log Dateien</string>
<string name="miscellaneous">Verschiedenes</string>
<string name="nav_logsettings">Log-Einstellungen</string>
<string name="resettodefaults">Auf Standardwerte zurücksetzen</string>
<string name="nsmalfunction">NSClient Störung. Ziehe einen Neustart von NS und NSClient in Betracht.</string>
@ -763,6 +779,11 @@ Unerwartetes Verhalten.</string>
<string name="invalidpct">Ungültige % Eingabe</string>
<string name="average">Durchschnitt</string>
<string name="tir">TIR</string>
<string name="day_tir">Tages TIR</string>
<string name="night_tir">Nacht TIR</string>
<string name="detailed_14_days">Detaillierte 14 Tage</string>
<string name="std_deviation">SD: %1$s</string>
<string name="hba1c">HbA1c: </string>
<string name="activitymonitor">Aktivitätsmonitor</string>
<string name="doyouwantresetstats">Willst Du die Aktivitätsstatistik zurücksetzen?</string>
<string name="statistics">Statistiken</string>
@ -803,6 +824,7 @@ Unerwartetes Verhalten.</string>
<string name="smscommunicator_otp_install_info">Installiere auf jedem Follower-Phone eine Authenticator-App, die RFC 6238 TOTP-Token unterstützt. Beliebte kostenlose Apps sind:\n Authy\n Google Authenticator\n LastPass Authenticator\n FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">Wenn Du den Authentifikator zurücksetzt werden alle bestehenden Authentifikatoren ungültig. Du musst sie dann neu einrichten!</string>
<string name="overview_show_predictions">Predictions (Vorhersagen)</string>
<string name="overview_show_treatments">Behandlungen</string>
<string name="overview_show_deviationslope">Steigung der Abweichung</string>
<string name="authorizationfailed">Autorisierung fehlgeschlagen</string>
<string name="overview_show_absinsulin">Gesamtinsulin</string>
@ -872,6 +894,8 @@ Unerwartetes Verhalten.</string>
<string name="ns_receive_profile_switch_summary">Profilwechsel akzeptieren, die in NS oder NSClient eingegeben wurden</string>
<string name="ns_receive_offline_event">APS Offline-Ereignisse empfangen</string>
<string name="ns_receive_offline_event_summary">APS Offline-Ereignisse akzeptieren, die über NS oder NSClient eingegeben wurden</string>
<string name="ns_receive_tbr_eb">TBR und EB empfangen</string>
<string name="ns_receive_tbr_eb_summary">Akzeptiere TBR und EB, die von einer anderen Instanz eingegeben wurden</string>
<string name="ns_receive_insulin">Insulin abrufen</string>
<string name="ns_receive_insulin_summary">Insulin akzeptieren, das in NS oder NSClient eingegeben wurden</string>
<string name="ns_receive_carbs">Kohlenhydrate abrufen</string>
@ -890,9 +914,11 @@ Unerwartetes Verhalten.</string>
<string name="error_in_isf_values">Fehler in ISF-Werten</string>
<string name="run_question">%s ausführen?</string>
<string name="invalid_profile_not_accepted">Ungültiges Profil %1$s wurde von NS nicht akzeptiert</string>
<string name="view">Ansicht</string>
<string name="errors">Fehler</string>
<string name="ns_sync_slow">Hochladen verlangsamen</string>
<string name="data_status">Status BZ-Daten</string>
<string name="remove_bg_readings">BG-Werte entfernen</string>
<string name="statuslights_cannula_age">Kanülenalter</string>
<string name="statuslights_patch_pump_age">Alter Patchpumpe</string>
<string name="patch_pump">Patch-Pumpe</string>
@ -930,7 +956,46 @@ Unerwartetes Verhalten.</string>
<string name="a11y_delete_current_profile">aktuelles Profil löschen</string>
<string name="a11y_add_new_to_list">neu zur Liste hinzufügen</string>
<!-- Theme switcher dark and light mode-->
<string name="theme_switcher_summary">Wähle das dunkle, helle oder das Systemdesign</string>
<string name="app_color_scheme">App Farbschema</string>
<string name="dark_theme">Dunkles Design</string>
<string name="light_theme">Helles Design</string>
<string name="follow_system_theme">Systemdesign verwenden</string>
<!-- WEAR OS-->
<string name="wear_action_tempt_preset_error">Temp-Target unbekannte Voreinstellung: %1$s</string>
<string name="wear_action_tempt_cancel_message">Ausführung des Temp-Targets abbrechen?</string>
<string name="wear_action_tempt_unit_error">Verschiedene Einheiten werden auf Uhr und Telefon verwendet!</string>
<string name="wear_action_tempt_zero_message">Zero-Temp-Target - abbrechen des laufenden Temp-Targets?</string>
<string name="wear_action_tempt_min_bg_error">Min-BG ist außerhalb des Bereichs!</string>
<string name="wear_action_tempt_max_bg_error">Max-BG ist außerhalb des Bereichs!</string>
<string name="wear_action_tempt_manual_range_message">Temptarget:\nMin: %1$s\nMax: %2$s\nDauer: %3$s</string>
<string name="wear_action_tempt_manual_message">Temptarget:\nTarget: %1$s\nDauer: %2$s</string>
<string name="wear_action_tempt_preset_message">Temp-Target:\nGrund: %1$s\nTarget: %2$s\nDauer: %3$s</string>
<string name="quick_wizard_message">QuickWizard: %1$s\nInsulin: %2$.2fU\nCarbs: %3$dg</string>
<string name="wizard_result">Calc. Wizard:\nInsulin: %1$.2fU\nCarbs: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Zeige Eintrag auf dem Gerät:</string>
<string name="quick_wizard_not_available">Ausgewählter Quickwizard nicht mehr verfügbar, bitte aktualisiere die Kachel</string>
<string name="wizard_no_actual_bg">Kein aktueller BG liegt als Basis zur Berechnung vor!</string>
<string name="wizard_no_active_profile">Kein aktives Profil gesetzt!</string>
<string name="wizard_no_cob">Unbekannter COB! BG-Wert fehlt oder wurde App vor kurzem neu gestartet?</string>
<string name="wizard_carbs_constraint">Die Kohlenhydrateinschränkung wurde überschritten!</string>
<string name="wizard_explain_calc">Calc (IC: %1$.1f, ISF: %2$.1f)</string>
<string name="wizard_explain_carbs">Kohlenhydrate: %1$.2fU</string>
<string name="wizard_explain_cob">COB: %1$.0fg %2$.2fU</string>
<string name="wizard_explain_bg">BZ: %1$.2fU</string>
<string name="wizard_explain_iob">IOB: %1$.2fU</string>
<string name="wizard_explain_superbolus">Superbolus: %1$.2fU</string>
<string name="wizard_explain_trend">15\' Trend: %1$.2fU</string>
<string name="wizard_explain_percent">Prozent: %1$.2fU x %2$d%% ≈ %3$.2fU</string>
<string name="wizard_constraint_bolus_size">Verletzung der Bolusbeschränkung!\nKann %1$.2fU nicht abgeben</string>
<string name="wizard_explain_tt">TempT: %1$s</string>
<string name="wizard_explain_tt_to">%1$s zu %2$s</string>
<string name="wizard_pump_not_available">Keine Pumpe verfügbar!</string>
<string name="wear_unknown_action_string">Unbekannter Actionbefehl:</string>
<string name="overview_editquickwizard_percentage">Prozentsatz</string>
<string name="app_default">Standardwert der Anwendung</string>
<string name="show_invalidated_records">Zeige ungültige / gelöschte Einträge</string>
<string name="hide_invalidated_records">Verberge ungültige / gelöschte Einträge</string>
<string name="select_profile">Profil zum Bearbeiten auswählen</string>
<string name="refresh_from_nightscout">Aktualisiere von Nightscout</string>
<string name="remove_selected_items">Ausgewähltes Objekt löschen</string>
@ -939,8 +1004,46 @@ Unerwartetes Verhalten.</string>
<string name="tempt_targets">Temporäre Ziele</string>
<string name="carbs_and_bolus">Kohlenhydrate &amp; Bolus</string>
<string name="confirm_remove_multiple_items">Sind Sie sicher, dass Sie diese(s) %1$d Element(e) löschen möchten?</string>
<string name="no_records_available">Keine Datensätze verfügbar</string>
<string name="hide_loop">Verberge Loop</string>
<string name="show_loop">Zeige Loop an</string>
<string name="count_selected">%1$d ausgewählt</string>
<string name="sort_label">Sortieren</string>
<string name="dialog_canceled">Dialog abgebrochen</string>
<string name="veryLow" comment="below 3.1">Sehr niedrig</string>
<string name="low" comment="3.1-3.9">Niedrig</string>
<string name="high" comment="10.0-13.9">Hoch</string>
<string name="veryHigh" comment="above 13.9">Sehr hoch</string>
<string name="below" comment="below &quot;in range&quot;">Unter</string>
<string name="in_range">Im Zielbereich</string>
<string name="above" comment="above &quot;in range&quot;">Über</string>
<string name="show_loop_records">Zeige Loop Datensätze</string>
<string name="show_hide_records">Verberge Loop Datensätze</string>
<string name="widget_description">AndroidAPS Widget</string>
<string name="configure">Deckkraft konfigurieren</string>
<string name="loop_status">Loop Status</string>
<string name="graph_scale">Diagrammskala</string>
<string name="profile1">Profil 1</string>
<string name="profile2">Profil 2</string>
<string name="login">Login</string>
<string name="remove_all">Alle entfernen</string>
<string name="reset_start">Start zurücksetzen</string>
<string name="a11y_otp_qr_code">QR Code für einmaliges Passwort einrichten</string>
<string name="a11y_open_settings">Einstellungen öffnen</string>
<string name="a11y_set_carb_timer">setze Alarm für KH Timer</string>
<string name="device_all">Alle</string>
<string name="device_phone">Smartphone</string>
<string name="device_watch">Smartwatch</string>
<string name="a11y_only_on_watch">nur auf Uhr</string>
<string name="a11y_only_on_phone">nur auf Telefon</string>
<string name="a11y_drag_and_drop_handle">Drag and Drop Handle</string>
<string name="search">Suche</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Erhalte BG-Werte von GlucoRx Aidex CGMS.</string>
<string name="blocked_by_charging">Blockiert durch Ladeoptionen</string>
<string name="blocked_by_connectivity">Blockiert durch Verbindungsoptionen</string>
<string name="no_watch_connected">(keine Uhr verbunden)</string>
<string name="error_asking_for_permissions">Fehler beim Anfordern der Erlaubnis</string>
</resources>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Comparar valores en AndroidAPS con el historial de la bomba (si la bomba lo soporta).</string>
<string name="wronginsulin_prime">Bolo una proporción de la insulina calculada “perdida” por jeringa/pluma o usando menú de llenado.</string>
<string name="wronginsulin_donothing">No haga nada y permite que AndroidAPS corrija cualquier nivel alto de glucosa en la sangre resultante.</string>
<string name="cob_label">Carbohidratos activos (COB)</string>
<string name="cob_question">¿Cómo afecta el cambio del valor ISF al cálculo de COB?</string>
<string name="cob_longer">Incrementar el ISF hará que los carbohidratos se absorban más lentamente</string>
<string name="cob_shorter">Incrementar el ISF hará que los carbohidratos se absorban más rápidamente</string>
<string name="cob_no_effect">Incrementar el ISF no afectará la absorción calculada de carbohidratos</string>
<string name="cob2_question">¿Cómo afecta cambiar los valores de IC a los cálculos de COB?</string>
<string name="cob2_longer">Incrementar el IC hará que los carbohidratos se absorban más lentamente</string>
<string name="cob2_shorter">Incrementar el IC hará que los carbohidratos se absorban más rápidamente</string>
<string name="cob2_no_effect">Incrementar el IC no afectará la absorción calculada de carbohidratos</string>
<string name="cob3_question">¿Cómo afecta el cambio de porcentaje del perfil al cálculo de los COB?</string>
<string name="cob3_longer">Establecer el perfil a 150% hará que los carbohidratos se absorban más lentamente</string>
<string name="cob3_shorter">Establecer el perfil a 150% hará que los carbohidratos se absorban más rápidamente</string>
<string name="cob3_no_effect">Establecer el perfil a 150% no afectará la absorción calculada de carbohidratos</string>
<string name="iob_label">Insulina a bordo (IOB)</string>
<string name="iob_which">Marca todas las respuestas correctas.</string>
<string name="iob_value">El valor del IOB se ve afectado por las bases temporales ejecutadas.</string>
<string name="iob_hightemp">No se dará alta tasa basal temporal cuando su nivel de azúcar en sangre esté por debajo del objetivo.</string>
<string name="iob_negiob">El IOB negativo durante un período sustancial en ausencia de ejercicio sugiere que tu perfil es demasiado fuerte y que se necesita menos insulina en tus ajustes.</string>

View file

@ -433,8 +433,8 @@
<string name="ns_localbroadcasts_title">Habilitar la emisión de mensajes localmente.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">ISF Dinámico</string>
<string name="DynISFAdjust_title">Factor de ajuste de ISF Dinámico %</string>
<string name="DynISFAdjust_summary">Porcentaje del factor de ajuste de ISF Dinámico\nValor predeterminado: 100\nEstablecer valores por encima del 100%% para que el algoritmo aplique correcciones más agresivas y valores por debajo del 100%% para correcciones menos agresivas.</string>
<string name="DynISFAdjust_title" formatted="false">Factor de ajuste de ISF Dinámico %</string>
<string name="DynISFAdjust_summary" formatted="false">Porcentaje del factor de ajuste de ISF Dinámico\nValor predeterminado: 100\nEstablecer valores por encima del 100% para que el algoritmo aplique correcciones más agresivas y valores por debajo del 100% para correcciones menos agresivas.</string>
<string name="enableuam">Activar UAM</string>
<string name="enablesmb">Activar SMB</string>
<string name="enablesmb_summary">Usar microbolos en lugar de basales temporales, para corregir más rápidamente</string>
@ -645,7 +645,6 @@
<string name="needsystemwindowpermission">La aplicación necesita permisos del sistema para poder mostrarse sobre otras aplicaciones, para las notificaciones</string>
<string name="needlocationpermission">La aplicación necesita permiso de ubicación para poder buscar dispositivos Bluetooth y redes WiFi</string>
<string name="needstoragepermission">La aplicación necesita permiso de almacenamiento para poder almacenar archivos de registro y valores de exportación</string>
<string name="needconnectpermission">La aplicación necesita permiso de bluetooth</string>
<string name="request">Solicitar</string>
<string name="open_navigation">Abrir navegación</string>
<string name="close_navigation">Cerrar navegación</string>
@ -970,7 +969,7 @@
<string name="wear_action_tempt_max_bg_error">¡Glucosa máxima fuera de rango!</string>
<string name="wear_action_tempt_manual_range_message">Objetivo temporal:\nMin: %1$s\nMax: %2$s\nDuración: %3$s</string>
<string name="wear_action_tempt_manual_message">Objetivo temporal:\nObjetivo: %1$s\nDuración: %2$s</string>
<string name="wear_action_tempt_preset_message">ObjetivoTemporal:\Razón: %1$s\nObjetivo: %2$s\nDuración: %3$s</string>
<string name="wear_action_tempt_preset_message">ObjetivoTemporal:\nRazón: %1$s\nObjetivo: %2$s\nDuración: %3$s</string>
<string name="quick_wizard_message">Asistente Rápido: %1$s\nInsulina: %2$.2fU\nCarbohidratos: %3$dg</string>
<string name="wizard_result">Calc. Asistente:\nInsulina: %1$.2fU\nCarbohidratos: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Mostrar entrada en dispositivo:</string>
@ -1037,10 +1036,12 @@
<string name="a11y_only_on_watch">Sólo en reloj</string>
<string name="a11y_only_on_phone">Sólo en teléfono</string>
<string name="a11y_drag_and_drop_handle">Arrastrar y soltar </string>
<string name="search">Buscar</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Recibir los valores de glucosa de GlucoRx Aidex CGMS</string>
<string name="blocked_by_charging">Bloqueado por opciones de carga</string>
<string name="blocked_by_connectivity">Bloqueado por opciones de conectividad</string>
<string name="no_watch_connected">(Ningún reloj conectado)</string>
</resources>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Comparer les valeurs dans l\'historique d\'AndroidAPS et de la pompe (si la pompe le permet).</string>
<string name="wronginsulin_prime">Faites un bolus du montant de votre insuline calculée « manquante » soit par seringue / stylo ou en utilisant un amorçage.</string>
<string name="wronginsulin_donothing">Ne faites rien et laissez AndroidAPS corriger tout taux élevé de glycémie qui en résulte.</string>
<string name="cob_label">Glucides Actifs (GA)</string>
<string name="cob_question">Comment le changement de la SI impacte le calcul des GA ?</string>
<string name="cob_longer">Augmenter la SI rendra l\'absorption des glucides plus longue</string>
<string name="cob_shorter">L\'augmentation de la SI réduira le temps d\'absorption des glucides</string>
<string name="cob_no_effect">L\'augmentation de la SI n\'affectera pas les calculs de l\'absorption des glucides</string>
<string name="cob2_question">Comment le changement de G/I impacte le calcul des GA ?</string>
<string name="cob2_longer">L\'augmentation de G/I rendra l\'absorption des glucides plus longue</string>
<string name="cob2_shorter">L\'augmentation de G/I réduira le temps d\'absorption des glucides</string>
<string name="cob2_no_effect">L\'augmentation de G/I n\'impactera pas l\'absorption des glucides calculés</string>
<string name="cob3_question">Comment le changement du pourcentage de profil impacte le calcul des GA ?</string>
<string name="cob3_longer">Définir le profil à 150% rendra l\'absorption des glucides plus longue</string>
<string name="cob3_shorter">Définir le profil à 150% réduira le temps d\'absorption des glucides</string>
<string name="cob3_no_effect">Définir le profil à 150% n\'impactera pas le calcul de l\'absorption des glucides</string>
<string name="iob_label">Insuline Active (IA)</string>
<string name="iob_which">Sélectionnez toutes les bonnes réponses.</string>
<string name="iob_value">La valeur de l\'IA est impactée par les débits de basal temporaires émis.</string>
<string name="iob_hightemp">Une basale temp haute ne sera pas donnée quand votre glycémie est en dessous de la cible.</string>
<string name="iob_negiob">Une IA négative pendant une période significative en l\'absence d\'exercice indique que votre profil est trop fort et qu\'il faut moins d\'insuline dans vos paramètres.</string>

View file

@ -434,8 +434,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="ns_localbroadcasts_title">Activer les transmissions locales</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">SI dynamique</string>
<string name="DynISFAdjust_title">Facteur d\'ajustement SI dynamique %%</string>
<string name="DynISFAdjust_summary">Facteur d\'ajustement pour SI dynamique. Définissez plus de 100 %% pour des corrections plus agressives et moins de 100 %% pour des corrections moins agressives.</string>
<string name="DynISFAdjust_title" formatted="false">Facteur d\'ajustement Si dynamique %</string>
<string name="DynISFAdjust_summary" formatted="false">Facteur d\'ajustement pour Si dynamique. Définissez plus de 100 % pour des corrections plus agressives et moins de 100 % pour des corrections moins agressives.</string>
<string name="enableuam">Activer RNS</string>
<string name="enablesmb">Activer SMB</string>
<string name="enablesmb_summary">Utiliser les Super Micro Bolus au lieu des débits de base temporaires pour une action rapide</string>
@ -646,7 +646,6 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="needsystemwindowpermission">L\'application a besoin de l\'autorisation d\'accès à la fenêtre système pour les notifications</string>
<string name="needlocationpermission">L\'application a besoin de l\'autorisation de localisation pour l\'analyse BT et l\'identification WiFi</string>
<string name="needstoragepermission">L\'application a besoin d\'une autorisation de stockage pour pouvoir stocker les fichiers journaux et les paramètres d\'exportation</string>
<string name="needconnectpermission">L\'application a besoin de l\'autorisation Bluetooth</string>
<string name="request">Demande</string>
<string name="open_navigation">Ouvrir navigation</string>
<string name="close_navigation">Fermer navigation</string>
@ -970,7 +969,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="wear_action_tempt_max_bg_error">Gly maxi hors limite!</string>
<string name="wear_action_tempt_manual_range_message">Cible temporaire:\nMin: %1$s\nMax : %2$s\nDurée : %3$s</string>
<string name="wear_action_tempt_manual_message">Cible temporaire:\nCible: %1$s\nDurée: %2$s</string>
<string name="wear_action_tempt_preset_message">Cible temporaire:\nRaison: %1$s\nCible : %2$s\nDurée : %3$s</string>
<string name="wear_action_tempt_preset_message">Cible temp:\nRaison: %1$s\nCible : %2$s\nDurée : %3$s</string>
<string name="quick_wizard_message">Assistant: %1$s\nInsuline : %2$.2fU\nGlucides : %3$dg</string>
<string name="wizard_result">Assistant Calc :\nInsuline : %1$.2fU\nGlucides : %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Afficher l\'entrée sur l\'appareil :</string>
@ -1037,10 +1036,13 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
<string name="a11y_only_on_watch">seulement sur la montre</string>
<string name="a11y_only_on_phone">uniquement sur le téléphone</string>
<string name="a11y_drag_and_drop_handle">glissez déposez ici</string>
<string name="search">Chercher</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Recevoir les valeurs de glycémie du MGC GlucoRx Aidex.</string>
<string name="blocked_by_charging">Bloqué par les options de recharge</string>
<string name="blocked_by_connectivity">Bloqué par les options de connectivité</string>
<string name="no_watch_connected">(Pas de montre connectée)</string>
<string name="error_asking_for_permissions">Erreur lors de la demande des autorisations</string>
</resources>

View file

@ -123,6 +123,7 @@
<string name="sensitivity_cannula">La registrazione di un cambio cannula ripristinerà il rapporto Autosens al 100%.</string>
<string name="sensitivity_time">Alcune opzioni del plugin hanno intervalli di tempo configurabili che possono essere impostati dall\'utente.</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivity_hint2">https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens</string>
<string name="wrongcarbs_label">Errori inserimento CHO</string>
<string name="wrongcarbs_whattodo">Cosa dovresti fare se hai fatto un inserimento non corretto di carboidrati?</string>
<string name="wrongcarbs_treatmentstab">Eliminare nei Trattamenti l\'inserimento non corretto e immettere il nuovo valore CHO.</string>
@ -135,8 +136,20 @@
<string name="wronginsulin_compare">Compara i valori in AndroidAPS con lo storico micro (se supportato).</string>
<string name="wronginsulin_prime">Erogare un bolo con parte della tua insulina calcolata \"mancante\" usando una siringa/penna o la funzione caricamento.</string>
<string name="wronginsulin_donothing">Non fare nulla e permettere ad AndroidAPS di correggere eventuali glicemie alte.</string>
<string name="cob_label">CHO attivi (COB)</string>
<string name="cob_question">In che modo la modifica del valore ISF influisce sul calcolo dei COB?</string>
<string name="cob_longer">L\'aumento di ISF richiederà un tempo maggiore per l\'assorbimento dei CHO</string>
<string name="cob_shorter">L\'aumento di ISF richiederà un tempo minore per l\'assorbimento dei CHO</string>
<string name="cob_no_effect">L\'aumento di ISF non influirà sull\'assorbimento calcolato dei CHO</string>
<string name="cob2_question">In che modo la modifica del valore IC influisce sul calcolo dei COB?</string>
<string name="cob2_longer">L\'aumento di IC richiederà un tempo maggiore per l\'assorbimento dei CHO</string>
<string name="cob2_shorter">L\'aumento di IC richiederà un tempo minore per l\'assorbimento dei CHO</string>
<string name="cob2_no_effect">L\'aumento di IC non influirà sull\'assorbimento calcolato dei CHO</string>
<string name="cob3_question">In che modo la modifica della percentuale profilo influisce sul calcolo dei COB?</string>
<string name="cob3_longer">Impostare il profilo al 150% richiederà un tempo maggiore per l\'assorbimento dei CHO</string>
<string name="cob3_shorter">Impostare il profilo al 150% richiederà un tempo minore per l\'assorbimento dei CHO</string>
<string name="cob3_no_effect">Impostare il profilo al 150% non influirà sull\'assorbimento calcolato dei CHO</string>
<string name="iob_label">Insulina attiva (IOB)</string>
<string name="iob_which">Seleziona tutte le risposte corrette.</string>
<string name="iob_value">Il valore IOB è influenzato dalle basali temporanee emesse.</string>
<string name="iob_hightemp">Non verrà emessa una basale temporanea alta quando la tua glicemia è al di sotto del target.</string>
<string name="iob_negiob">IOB negativo per un periodo considerevole in assenza di esercizio fisico suggerisce che il tuo profilo è troppo incisivo e che è necessaria meno insulina nelle tue impostazioni.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Sicurezza trattamenti</string>
<string name="treatmentssafety_maxbolus_title">Max bolo consentito [U]</string>
<string name="treatmentssafety_maxcarbs_title">Max CHO consentiti [g]</string>
<string name="treatmentssafety_lgsThreshold_title">Glicemia sotto la quale si attiva la sospensione per glicemia bassa</string>
<string name="nav_preferences_plugin">%1$s Preferenze</string>
<string name="nav_preferences">Preferenze</string>
<string name="nav_refreshtreatments">Aggiorna trattamenti da NS</string>
@ -432,14 +433,15 @@
<string name="ns_localbroadcasts_title">Abilita trasmissioni locali</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">ISF Dinamico</string>
<string name="DynISFAdjust_title">%% fattore di regolazione ISF dinamico</string>
<string name="DynISFAdjust_summary">Fattore di regolazione per ISF dinamico. Imposta più del 100%% per correzioni più aggressive, meno del 100%% per correzioni meno aggressive.</string>
<string name="DynISFAdjust_title" formatted="false">Fattore di regolazione per ISF Dinamico (%)</string>
<string name="DynISFAdjust_summary" formatted="false">Fattore di regolazione per ISF Dinamico. Imposta più del 100% per dosi di correzione più aggressive e meno del 100% per correzioni meno aggressive.</string>
<string name="enableuam">Abilita UAM</string>
<string name="enablesmb">Abilita SMB</string>
<string name="enablesmb_summary">Usa super-micro-boli al posto della basale temporanea per un\'azione più veloce</string>
<string name="enableuam_summary">Rilevamento dei pasti non annunciati</string>
<string name="insulin_oref_peak">Tempo picco Curva IOB</string>
<string name="insulin_peak_time">Tempo del picco [min]</string>
<string name="insulin_peak">Picco</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>
@ -591,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Questo valore è chiamato Max IOB nel contesto OpenAPS\nOpenAPS non aggiungerà ulteriore insulina se IOB corrente è maggiore di questo valore</string>
<string name="absorption_cutoff_title">Max tempo assorbimento pasto [h]</string>
<string name="absorption_cutoff_summary">Tempo entro il quale ogni pasto si considera assorbito. Eventuali carboidrati rimanenti verranno tagliati fuori.</string>
<string name="treatmentssafety_lgsThreshold_summary">Glicemia sotto la quale l\'erogazione d\'insulina è sospesa. Il valore predefinito utilizza il modello target standard. L\'utente può impostare un valore compreso tra 60 mg/dl (3.3mmol/l) e 100mg/dl (5.5mmol/l). Con valori inferiori a 65/3.6 viene usato il modello predefinito</string>
<string name="overview_show_notes_field_in_dialogs_title">Finestre tratt.nto: mostra campo note</string>
<string name="next_button">Avanti</string>
<string name="previous_button">Indietro</string>
@ -603,7 +606,11 @@
<string name="secondcarbsincrement">Secondo incremento di CHO</string>
<string name="thirdcarbsincrement">Terzo incremento di CHO</string>
<string name="cgm">CGM</string>
<string name="ns_cellular">Usa connessione cellulare</string>
<string name="ns_wifi">Usa connessione WiFi</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="ns_charging">Durante la ricarica</string>
<string name="ns_battery">Utilizzo batteria</string>
<string name="connectionsettings_title">Impostazioni connessione</string>
<string name="ns_wifi_allowedssids">SSID ammessi (separati da punto e virgola)</string>
<string name="ns_allowroaming">Consenti connessione in roaming</string>
@ -638,7 +645,6 @@
<string name="needsystemwindowpermission">L\'applicazione richiede l\'autorizzazione \"finestra di sistema\" per le notifiche</string>
<string name="needlocationpermission">L\'applicazione richiede l\'accesso alla posizione per la scansione bluetooth e l\'identificazione WiFi</string>
<string name="needstoragepermission">L\'applicazione richiede l\'accesso alla memoria per memorizzare i file di log ed esportare le impostazioni</string>
<string name="needconnectpermission">L\'applicazione richiede l\'autorizzazione bluetooth</string>
<string name="request">Richiesta</string>
<string name="open_navigation">Apri navigazione</string>
<string name="close_navigation">Chiudi navigazione</string>
@ -678,6 +684,8 @@
<string name="error_adding_treatment_message">Un trattamento (insulina: %1$.2f, carboidrati: %2$d, a: %3$s) non può essere aggiunto ai trattamenti. Controlla e aggiungi il record necessario.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), ritardo: %3$d m</string>
<string name="openaps_noasdata">Nessun dato autosens disponibile</string>
<string name="log_files">File di log</string>
<string name="miscellaneous">Miscellanea</string>
<string name="nav_logsettings">Impostazioni Log</string>
<string name="resettodefaults">Ripristina valori predefiniti</string>
<string name="nsmalfunction">Malfunzionamento NSClient. Considera il riavvio di NS e NSClient.</string>
@ -770,6 +778,11 @@
<string name="invalidpct">Inserimento % non valido</string>
<string name="average">Media</string>
<string name="tir">TIR</string>
<string name="day_tir">TIR giorno</string>
<string name="night_tir">TIR notte</string>
<string name="detailed_14_days">Dettaglio 14 giorni</string>
<string name="std_deviation">SD: %1$s</string>
<string name="hba1c">HbA1c: </string>
<string name="activitymonitor">Monitor attività</string>
<string name="doyouwantresetstats">Vuoi resettare le statistiche sull\'attività?</string>
<string name="statistics">Statistiche</string>
@ -956,7 +969,7 @@
<string name="wear_action_tempt_max_bg_error">Max-BG fuori range!</string>
<string name="wear_action_tempt_manual_range_message">Temptarget:\nMin: %1$s\nMax: %2$s\nDurata: %3$s</string>
<string name="wear_action_tempt_manual_message">Temptarget:\nTarget: %1$s\nDurata: %2$s</string>
<string name="wear_action_tempt_preset_message">Temptarget:\Motivo: %1$s\nTarget: %2$s\nDurata: %3$s</string>
<string name="wear_action_tempt_preset_message">Temptarget:\nMotivo: %1$s\nTarget: %2$s\nDurata: %3$s</string>
<string name="quick_wizard_message">QuickWizard: %1$s\nInsulina: %2$.2fU\nCHO: %3$dg</string>
<string name="wizard_result">Calc. Wizard:\nInsulina: %1$.2fU\nCHO: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Mostra voce sul dispositivo:</string>
@ -965,9 +978,11 @@
<string name="wizard_no_active_profile">Nessun profilo attivo!</string>
<string name="wizard_no_cob">Valore COB sconosciuto! Lettura BG mancante o recente riavvio dell\'app?</string>
<string name="wizard_carbs_constraint">Violazione vincolo CHO!</string>
<string name="wizard_explain_calc">Calc (IC: %1$.1f, ISF: %2$.1f)</string>
<string name="wizard_explain_carbs">CHO: %1$.2fU</string>
<string name="wizard_explain_cob">COB: %1$.0fg %2$.2fU</string>
<string name="wizard_explain_bg">BG: %1$.2fU</string>
<string name="wizard_explain_iob">IOB: %1$.2fU</string>
<string name="wizard_explain_superbolus">Superbolo: %1$.2fU</string>
<string name="wizard_explain_trend">Trend di 15\': %1$.2fU</string>
<string name="wizard_explain_percent">Percentuale: %1$.2fU x %2$d%% ≈ %3$.2fU</string>
@ -994,6 +1009,10 @@
<string name="count_selected">%1$d selezionati</string>
<string name="sort_label">Ordina</string>
<string name="dialog_canceled">Finestra di dialogo cancellata</string>
<string name="veryLow" comment="below 3.1">Molto basso</string>
<string name="low" comment="3.1-3.9">Basso</string>
<string name="high" comment="10.0-13.9">Alto</string>
<string name="veryHigh" comment="above 13.9">Molto alto</string>
<string name="below" comment="below &quot;in range&quot;">Sotto</string>
<string name="in_range">In range</string>
<string name="above" comment="above &quot;in range&quot;">Sopra</string>
@ -1001,6 +1020,13 @@
<string name="show_hide_records">Nascondi record di loop</string>
<string name="widget_description">Widget di AndroidAPS</string>
<string name="configure">Configura opacità</string>
<string name="loop_status">Stato loop</string>
<string name="graph_scale">Scala del grafico</string>
<string name="profile1">Profilo 1</string>
<string name="profile2">Profilo 2</string>
<string name="login">Login</string>
<string name="remove_all">Rimuovi tutto</string>
<string name="reset_start">Avvio reset</string>
<string name="a11y_otp_qr_code">Codice QR per configurare OTP</string>
<string name="a11y_open_settings">apri impostazioni</string>
<string name="a11y_set_carb_timer">imposta allarme timer CHO</string>
@ -1010,8 +1036,12 @@
<string name="a11y_only_on_watch">solo su smartwatch</string>
<string name="a11y_only_on_phone">solo su telefono</string>
<string name="a11y_drag_and_drop_handle">trascina e rilascia</string>
<string name="search">Cerca</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">GlucoRx Aidex</string>
<string name="description_source_aidex">Ricevi valori glicemia da CGM GlucoRx Aidex.</string>
<string name="blocked_by_charging">Bloccato dalle opzioni di ricarica</string>
<string name="blocked_by_connectivity">Bloccato dalle opzioni di connettività</string>
<string name="no_watch_connected">(Nessuno smartwatch connesso)</string>
</resources>

View file

@ -123,6 +123,7 @@
<string name="sensitivity_cannula">רישום החלפת צינורית יאפס את היחס של Autosens בחזרה ל-100%.</string>
<string name="sensitivity_time">חלק מאפשרויות התוסף כוללות טווחי זמן הניתנים להגדרה ע\"י המשתמש.</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivity_hint2">https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens</string>
<string name="wrongcarbs_label">שגיאות רישום פחמימות</string>
<string name="wrongcarbs_whattodo">מה לעשות אם טעיתם ברישום הפחמימות?</string>
<string name="wrongcarbs_treatmentstab">מחקו את הרשומה השגויה בטיפולים וציינו את ערך הפחמימות הנכון.</string>
@ -135,8 +136,20 @@
<string name="wronginsulin_compare">השוו את הרשומות שב-AndroidAPS עם היסטוריית המשאבה (אם המשאבה תומכת בכך).</string>
<string name="wronginsulin_prime">מזריקים בולוס על חלק מהאינסולין המחושב \"שחסר\" עם מזרק\\עט או באמצעות תיחול (Prime).</string>
<string name="wronginsulin_donothing">לא לעשות דבר ולאפשר ל-AndroidAPS לתקן כל רמת סוכר גבוהה.</string>
<string name="cob_label">פחמ\' פעילות</string>
<string name="cob_question">איך שינויים ביחס התיקון משפיעים על חישוב הפחמימות הפעילות?</string>
<string name="cob_longer">הגדלת ערך יחס התיקון תגרום להארכת משך ספיגת הפחמימות</string>
<string name="cob_shorter">הגדלת ערך יחס התיקון תגרום לקיצור משך ספיגת הפחמימות</string>
<string name="cob_no_effect">הגדלת ערך יחס התיקון לא תשפיע על חישוב ספיגת הפחמימות</string>
<string name="cob2_question">איך שינויים ביחס הפחמימות משפיעים על חישוב הפחמימות הפעילות?</string>
<string name="cob2_longer">הגדלת ערך יחס הפחמימות תגרום להארכת משך ספיגת הפחמימות</string>
<string name="cob2_shorter">הגדלת ערך יחס הפחמימות תגרום לקיצור משך ספיגת הפחמימות</string>
<string name="cob2_no_effect">הגדלת ערך יחס הפחמימות לא תשפיע על חישוב ספיגת הפחמימות</string>
<string name="cob3_question">איך שינויים באחוזי הפרופיל משפיעים על חישוב הפחמימות הפעילות?</string>
<string name="cob3_longer">הגדרת 150% פרופיל תגרום להארכת משך ספיגת הפחמימות</string>
<string name="cob3_shorter">הגדרת 150% פרופיל תגרום לקיצור משך ספיגת הפחמימות</string>
<string name="cob3_no_effect">הגדרת 150% פרופיל לא תשפיע על חישוב משך ספיגת הפחמימות</string>
<string name="iob_label">אינסולין פעיל בגוף (IOB)</string>
<string name="iob_which">סמנו את כל התשובות הנכונות.</string>
<string name="iob_value">ערך האינסולין הפעיל (IOB) מושפע ממינונים בזאליים זמניים שסופקו.</string>
<string name="iob_hightemp">מינון בזאלי גבוה לא יינתן כאשר רמת הסוכר נמוכה מערך המטרה.</string>
<string name="iob_negiob">אינסולין פעיל שלילי לאורך זמן בו לא נעשית פעילות מצביע על כך שהפרופיל חזק מדי, נדרש פחות אינסולין ויש להגדיר זאת בפרופיל.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">בטיחות טיפולים</string>
<string name="treatmentssafety_maxbolus_title">בולוס מקסימלי מותר [U]</string>
<string name="treatmentssafety_maxcarbs_title">מקסימום פחמימות מותר [g]</string>
<string name="treatmentssafety_lgsThreshold_title">רמת הסוכר נמוכה מסף ההשהיה עקב סוכר נמוך</string>
<string name="nav_preferences_plugin">העדפות %1$s</string>
<string name="nav_preferences">העדפות</string>
<string name="nav_refreshtreatments">רענן טיפול מ-Nightscout</string>
@ -432,14 +433,15 @@
<string name="ns_localbroadcasts_title">אפשר שידורים מקומיים.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">רגישות דינאמית</string>
<string name="DynISFAdjust_title">כיוונון פקטור הרגישות הדינאמית %%</string>
<string name="DynISFAdjust_summary">כיוונון פקטור הרגישות הדינאמית. קבעו יותר מ-100%% לקבלת תיקונים אגרסיביים יותר ופחות מ-100%% לקבלת תיקונים עדינים יותר.</string>
<string name="DynISFAdjust_title" formatted="false">כיוונון פקטור הרגישות הדינאמית %</string>
<string name="DynISFAdjust_summary" formatted="false">כיוונון פקטור הרגישות הדינאמית. הגדירו יותר מ-100% לקבלת תיקונים אגרסיביים יותר ופחות מ-100% לקבלת תיקונים עדינים יותר.</string>
<string name="enableuam">הפעלת UAM</string>
<string name="enablesmb">אפשר SMB</string>
<string name="enablesmb_summary">השתמש בסופר מיקרו בולוסים במקום בבזאלי זמני לפעילות מהירה יותר</string>
<string name="enableuam_summary">זיהוי של ארוחות לא מוכרזות</string>
<string name="insulin_oref_peak">שעת שיא של עקומת IOB</string>
<string name="insulin_peak_time">זמן שיא [min]</string>
<string name="insulin_peak">שיא</string>
<string name="free_peak_oref">Oref שיא חופשי</string>
<string name="rapid_acting_oref">Oref אינסולין מהיר</string>
<string name="ultrarapid_oref">Oref אינסולין אולטרה מהיר</string>
@ -591,6 +593,7 @@
<string name="openapssmb_maxiob_summary">ב-OpenAPS ערך זה נקרא מקסימום אינסולין פעיל (maxIOB). \nלא יוזרק עוד אינסולין אם כמות האינסולין הפעיל הנוכחי גדול מערך זה</string>
<string name="absorption_cutoff_title">זמן ספיגה מקסימלי של הארוחה [h]</string>
<string name="absorption_cutoff_summary">משך זמן בו כל ארוחה תחשב כנספגה. לא תהיה התחשבות בפחמימות שנותרו.</string>
<string name="treatmentssafety_lgsThreshold_summary">ערך הסוכר שמתחתיו מושעה הזרקת אינסולין. ערך ברירת המחדל משתמש במודל מטרה סטנדרטי. המשתמש יכול להגדיר ערך בין 60 ל-100 מג\"\\ד\"ל. ערכים מתחת ל-65 מביאים לשימוש במודל ברירת המחדל</string>
<string name="overview_show_notes_field_in_dialogs_title">הצגת שדות הערות בתיבות דו-שיח של טיפול</string>
<string name="next_button">הבא</string>
<string name="previous_button">הקודם</string>
@ -603,7 +606,11 @@
<string name="secondcarbsincrement">תוספת פחמימות שניה</string>
<string name="thirdcarbsincrement">תוספת פחמימות שלישית</string>
<string name="cgm">סנסור</string>
<string name="ns_cellular">השתמש באינטרנט סלולרי</string>
<string name="ns_wifi">השתמש בחיבור WiFi</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="ns_charging">בזמן טעינה</string>
<string name="ns_battery">משתמש בסוללה</string>
<string name="connectionsettings_title">הגדרות חיבור</string>
<string name="ns_wifi_allowedssids">SSID מורשים (מופרדים בנקודה-פסיק)</string>
<string name="ns_allowroaming">אפשר חיבור בנדידה</string>
@ -638,7 +645,6 @@
<string name="needsystemwindowpermission">האפליקציה צריכה הרשאת מערכת של חלונות לצורך התראות</string>
<string name="needlocationpermission">דרושה הרשאת מיקום עבור סריקת בלוטות\' וזיהוי WiFi</string>
<string name="needstoragepermission">דרושה הרשאת אחסון כדי שתוכלו לאחסן קובצי יומן והגדרות יצוא.</string>
<string name="needconnectpermission">האפליקציה צריכה הרשאה לבלוטות\'</string>
<string name="request">בקשה</string>
<string name="open_navigation">פתח ניווט</string>
<string name="close_navigation">סגור ניווט</string>
@ -770,6 +776,11 @@
<string name="invalidpct">רשומת אחוזים לא חוקית</string>
<string name="average">ממוצע</string>
<string name="tir">זמן בטווח</string>
<string name="day_tir">זמן בטווח ביום</string>
<string name="night_tir">זמן בטווח בלילה</string>
<string name="detailed_14_days">פירוט 14 יום</string>
<string name="std_deviation">סטיית תקן: %1$s</string>
<string name="hba1c">HbA1c: </string>
<string name="activitymonitor">מוניטור פעילות</string>
<string name="doyouwantresetstats">האם ברצונכם לאפס את הסטטיסטיקות הפעילות?</string>
<string name="statistics">סטטיסטיקה</string>
@ -880,6 +891,8 @@
<string name="ns_receive_profile_switch_summary">קבלת החלפות פרופיל שהוגדרו בנייטסקאוט או ב-NSClient</string>
<string name="ns_receive_offline_event">אחזר אירועים לא מקוונים</string>
<string name="ns_receive_offline_event_summary">קבל אירועים לא מקוונים שנרשמו דרך נייטסקאוט או NSClient</string>
<string name="ns_receive_tbr_eb">קבל מינון בזאלי זמני ובולוס מושהה</string>
<string name="ns_receive_tbr_eb_summary">קבל מינוני בזאלי זמני ובולוסים מושהים שהופעלו ממכשיר עוקב</string>
<string name="ns_receive_insulin">קבלת אינסולין</string>
<string name="ns_receive_insulin_summary">קבלת אינסולין שהוזן באמצעות נייטסקאוט או NSClient (הוא לא מוזרק, רק מחושב רק כאינסולין פעיל)</string>
<string name="ns_receive_carbs">קבלת פחמימות</string>
@ -946,12 +959,34 @@
<string name="light_theme">ערכת נושא בהירה</string>
<string name="follow_system_theme">השתמש בערכת הנושא של המכשיר</string>
<!-- WEAR OS-->
<string name="wear_action_tempt_cancel_message">מבטל ערך מטרה זמני נוכחי</string>
<string name="wear_action_tempt_unit_error">יחידות המידה שונות בין הטלפון והשעון!</string>
<string name="wear_action_tempt_min_bg_error">ערך הסוכר המינימלי מחוץ לטווח!</string>
<string name="wear_action_tempt_max_bg_error">ערך הסוכר המקסימלי מחוץ לטווח!</string>
<string name="wear_action_tempt_manual_range_message">ע\' מטרה זמני:\nמינ\': %1$s\nמקס\': %2$s\nמשך: %3$s</string>
<string name="wear_action_tempt_manual_message">ע\' מטרה זמני:\nמטרה: %1$s\n משך: %2$s</string>
<string name="wear_action_tempt_preset_message">ע\' מטרה זמני:\nסיבה: %1$s\nמטרה: %2$s\nמשך: %3$s</string>
<string name="quick_wizard_message">אשף מהיר: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\'</string>
<string name="wizard_result">מחשבון: %1$s\n אינס\': %2$.2f יח\'\nפחמ\': %3$d גר\'</string>
<string name="overview_editquickwizard_show_on_device">הצג רשומה על המכשיר:</string>
<string name="quick_wizard_not_available">האשף המהיר שנבחר אינו זמין, נא לרענן את האריח</string>
<string name="wizard_no_actual_bg">אין נתוני סוכר לביסוס חישוב!</string>
<string name="wizard_no_active_profile">לא הופעל פרופיל!</string>
<string name="wizard_no_cob">הפחמימות הפעילות לא ידועות! חסרות קריאות סוכר או שאותחל היישום לאחרונה?</string>
<string name="wizard_carbs_constraint">הפרת מגבלות פחמימה!</string>
<string name="wizard_explain_calc">מחשבון (IC: %1$.1f, ISF: %2$.1f)</string>
<string name="wizard_explain_carbs">פחמ\': %1$.2f יח\'</string>
<string name="wizard_explain_cob">פחמ\': %1$.0f גר\' %2$.2f יח\'</string>
<string name="wizard_explain_bg">סוכר: %1$.2f יח\'</string>
<string name="wizard_explain_iob">אינ\' פעיל: %1$.2f יח\'</string>
<string name="wizard_explain_superbolus">סופר בולוס: %1$.2f יח\'</string>
<string name="wizard_explain_trend">מגמת 15 דק\': %1$.2f יח\'</string>
<string name="wizard_explain_percent">אחוזים: %1$.2f יח\' x %2$d%% ≈ %3$.2f יח\'</string>
<string name="wizard_constraint_bolus_size">הופעלה מגבלת אינסולין!\nלא ניתן להזריק %1$.2f יח\'</string>
<string name="wizard_explain_tt">ע\' מטרה זמני: %1$s</string>
<string name="wizard_explain_tt_to">%1$s ל-%2$s</string>
<string name="wizard_pump_not_available">המשאבה אינה זמינה!</string>
<string name="wear_unknown_action_string">פקודה לא ידועה:</string>
<string name="overview_editquickwizard_percentage">אחוזים</string>
<string name="app_default">ברירת המחדל של היישום</string>
<string name="show_invalidated_records">הצג רשומות מבוטלות\\מחוקות</string>
@ -970,6 +1005,10 @@
<string name="count_selected">%1$d נבחרו</string>
<string name="sort_label">מיין</string>
<string name="dialog_canceled">דו-שיח בוטל</string>
<string name="veryLow" comment="below 3.1">נמוך מאוד</string>
<string name="low" comment="3.1-3.9">נמוך</string>
<string name="high" comment="10.0-13.9">גבוה</string>
<string name="veryHigh" comment="above 13.9">גבוה מאוד</string>
<string name="below" comment="below &quot;in range&quot;">מתחת</string>
<string name="in_range">בטווח</string>
<string name="above" comment="above &quot;in range&quot;">מעל</string>
@ -977,14 +1016,28 @@
<string name="show_hide_records">החבא רשומות לולאה</string>
<string name="widget_description">ווידג\'ט AndroidAPS</string>
<string name="configure">הגדרת אטימות</string>
<string name="loop_status">סטטוס הלולאה</string>
<string name="graph_scale">קנה מידה של הגרף</string>
<string name="profile1">פרופיל 1</string>
<string name="profile2">פרופיל 2</string>
<string name="login">התחברות</string>
<string name="remove_all">הסר הכל</string>
<string name="reset_start">אתחל התחלה</string>
<string name="a11y_otp_qr_code">ברקוד QR ליצירת סיסמה חד פעמית</string>
<string name="a11y_open_settings">פתח הגדרות</string>
<string name="a11y_set_carb_timer">הגדרת אזעקה טיימר פחמימות</string>
<string name="device_all">הכול</string>
<string name="device_phone">טלפון</string>
<string name="device_watch">שעון</string>
<string name="a11y_only_on_watch">על השעון בלבד</string>
<string name="a11y_only_on_phone">על הטלפון בלבד</string>
<string name="a11y_drag_and_drop_handle">ידית גרירה</string>
<string name="search">חיפוש</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">קבלת נתוני סוכר מחיישני GlucoRx Aidex.</string>
<string name="blocked_by_charging">חסום ע\"י הגדרות טעינה</string>
<string name="blocked_by_connectivity">חסום ע\"י הגדרות חיבור</string>
<string name="no_watch_connected">(השעון לא מחובר)</string>
</resources>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">\"주입되지 않은\" 인슐린양을 계산하여 시린지/펜 또는 prime 기능을 사용하여 인슐린을 주입합니다.</string>
<string name="wronginsulin_donothing">특별한 조치를 취하지 않고, AndroidAPS가 결과적으로 높은 혈당 정도를 조정할 수 있도록 합니다.</string>
<string name="iob_label">활성 인슐린 (IOB)</string>
<string name="iob_which">올바른 답변을 모두 체크하세요.</string>
<string name="iob_value">IOB 값은 실행된 임시 basal의 영향을 받습니다.</string>
<string name="iob_hightemp">혈당이 목표보다 낮을 경우 높은 임시 basal은 실행되지 않습니다.</string>
<string name="iob_negiob">운동 없이도 음수의 IOB (마이너스 IOB) 구간이 많을 경우, 프로파일이 너무 강한 것이며 인슐린 양을 적게 설정해야 합니다.</string>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Susileisti trūkstamą insulino kiekį švirkštu ar naudojantis infuzinės sistemos užpildymo funkcija.</string>
<string name="wronginsulin_donothing">Nieko nedaryti ir leisti AndroidAPS koreguoti padidėjusį gliukozės kiekį kraujyje.</string>
<string name="iob_label">Aktyvus insulinas organizme (AIO)</string>
<string name="iob_which">Pasirinkite visus teisingus atsakymus.</string>
<string name="iob_value">AIO reikšmei įtakos turi nustatyta laikina valandinė bazė.</string>
<string name="iob_hightemp">Padidinta laikina bazė nebus nustatyta, jei kraujo glikemija yra žemiau nustatyto tikslo.</string>
<string name="iob_negiob">Jei ilgą laiką stebima neigiama AIO reikšmė ir nėra fizinio aktyvumo, tai rodo, kad jūsų nustatymai yra per „agresyvūs“ ir kad jums reikia mažiau insulino nei nustatyta.</string>

View file

@ -631,7 +631,6 @@
<string name="needsystemwindowpermission">Norint gauti pranešimus, programai reikalingas sisteminio lango leidimas</string>
<string name="needlocationpermission">Programai reikia vietos nustatymo leidimo, kad būtų galima naudoti Bluetooth ir WiFi</string>
<string name="needstoragepermission">Aplikacijai reikia leidimo prieigai prie saugyklos, kad galėtų išsaugoti žurnalo įrašus ir eksportavimo nustatymus</string>
<string name="needconnectpermission">Programai reikalinga Bluetooth prieigos teisė</string>
<string name="request">Užklausa</string>
<string name="open_navigation">Atidaryti meniu</string>
<string name="close_navigation">Uždaryti meniu</string>
@ -894,6 +893,7 @@
<string name="not_available_full">Negalimas</string>
<!-- Theme switcher dark and light mode-->
<!-- WEAR OS-->
<string name="sort_label">Rūšiuoti</string>
<string name="login">Prisijungti</string>
<!-- Aidex Cgms -->
</resources>

View file

@ -123,6 +123,7 @@
<string name="sensitivity_cannula">Het vastleggen van een canulewissel zet de Autosens-ratio terug naar 100%.</string>
<string name="sensitivity_time">Sommige van de plugins hebben configureerbare tijdbereiken die kunnen worden ingesteld door de gebruiker.</string>
<string name="sensitivity_hint1">https://androidaps.readthedocs.io/en/latest/CROWDIN/nl/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="sensitivity_hint2">https://androidaps.readthedocs.io/nl/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens</string>
<string name="wrongcarbs_label">Koolhydraatinvoerfouten</string>
<string name="wrongcarbs_whattodo">Wat moet u doen als u een onjuiste hoeveelheid koolhydraten hebt ingevoerd?</string>
<string name="wrongcarbs_treatmentstab">Verwijder het onjuiste record in Behandelingen en voer de juiste koolhydraten opnieuw in.</string>
@ -136,7 +137,6 @@
<string name="wronginsulin_prime">Bolus een deel van je berekende \'gemiste\' insuline door een injectiespuit/pen of door de uitvulfunctie te gebruiken.</string>
<string name="wronginsulin_donothing">Doe niets en laat AndroidAPS de resulterende hoge bloedglucosespiegel corrigeren.</string>
<string name="iob_label">Insuline aan boord (IOB)</string>
<string name="iob_which">Selecteer alle juiste antwoorden.</string>
<string name="iob_value">De IOB-waarde wordt beïnvloed door eerdere tijdelijke basaalstanden.</string>
<string name="iob_hightemp">Een hoge tijdelijke basaal zal niet worden ingesteld wanneer je bloedsuiker onder het streefdoel ligt.</string>
<string name="iob_negiob">Negatieve IOB voor een aanzienlijke periode vrij van inspanning, suggereert dat je profiel te hoog is ingesteld, dus dat er minder insuline nodig is.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Behandelingen veiligheid</string>
<string name="treatmentssafety_maxbolus_title">Max toegestane bolus [E]</string>
<string name="treatmentssafety_maxcarbs_title">Max toegestane koolhydraten [g]</string>
<string name="treatmentssafety_lgsThreshold_title">BG niveau waarbij lage glucose onderbreking wordt geactiveerd</string>
<string name="nav_preferences_plugin">%1$s Instellingen</string>
<string name="nav_preferences">Instellingen</string>
<string name="nav_refreshtreatments">Haal behandelingen op van NS</string>
@ -432,8 +433,8 @@
<string name="ns_localbroadcasts_title">Activeer locaal delen.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamische ISF</string>
<string name="DynISFAdjust_title">Dynamische ISF aanpassingsfactor %%</string>
<string name="DynISFAdjust_summary">Aanpassingsfactor voor Dynamische ISF. Stel meer dan 100%% in voor een agressievere correctie dosis en minder dan 100%% voor minder agressieve correcties.</string>
<string name="DynISFAdjust_title" formatted="false">Dynamische Isf aanpassingsfactor %</string>
<string name="DynISFAdjust_summary" formatted="false">Aanpassingsfactor voor DynamicISF. Stel meer dan 100% in voor een agressievere correctie en minder dan 100% voor minder agressieve correctie.</string>
<string name="enableuam">Activeer UAM</string>
<string name="enablesmb">Activeer SMB</string>
<string name="enablesmb_summary">SMB in plaats van tijdelijke basalen voor snellere reactie</string>
@ -592,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Deze waarde heet MAX IOB in OpenAPS context\nOpenAPS zal geen extra insuline toedienen als de actuele IOB onderstaande waarde overschreden heeft</string>
<string name="absorption_cutoff_title">Maximum maaltijd absorptie tijd [uur]</string>
<string name="absorption_cutoff_summary">Tijdspanne waarbinnen elke maaltijd volledig is opgenomen. Resterende KH worden niet mee gerekend.</string>
<string name="treatmentssafety_lgsThreshold_summary">BG waarde waarbij insuline afgifte wordt onderbroken. De standaard waarde gebruikt het standaard doelmodel. Gebruiker kan waarde instellen tussen 60 mg/dl (3.3 mmol/l) en 100mg/dl(5.6mmol/l). Waarden lager dan 65/3.6 resulteren in gebruik van het standaard model</string>
<string name="overview_show_notes_field_in_dialogs_title">Toon notities veld in behandeling dialoogvensters</string>
<string name="next_button">Volgende</string>
<string name="previous_button">Vorige</string>
@ -604,7 +606,11 @@
<string name="secondcarbsincrement">Tweede koolhydraten increment</string>
<string name="thirdcarbsincrement">Derde koolhydraten increment</string>
<string name="cgm">CGM</string>
<string name="ns_cellular">Mobiele verbinding gebruiken</string>
<string name="ns_wifi">Gebruik WiFi verbinding</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="ns_charging">Tijdens opladen</string>
<string name="ns_battery">Op batterij</string>
<string name="connectionsettings_title">Verbindings instellingen</string>
<string name="ns_wifi_allowedssids">Toegelaten SSIDs (gescheiden door puntkomma)</string>
<string name="ns_allowroaming">Sta verbinding tijdens roaming toe</string>
@ -639,7 +645,6 @@
<string name="needsystemwindowpermission">Toepassing vereist systeemvenstermachtiging voor meldingen</string>
<string name="needlocationpermission">App heeft locatie toestemming nodig voor Bluetooth scan en WiFi identificatie</string>
<string name="needstoragepermission">Applicatie heeft toestemming nodig om log bestanden op te slaan en instellingen te exporteren</string>
<string name="needconnectpermission">Applicatie heeft Bluetooth toestemming nodig</string>
<string name="request">Verzoek</string>
<string name="open_navigation">Open navigatie</string>
<string name="close_navigation">Sluit navigatie</string>
@ -679,6 +684,8 @@
<string name="error_adding_treatment_message">Een Behandeling (insuline: %1$.2f, koolhydraten: %2$d, in: %3$s) niet konden worden toegevoegd aan Behandelingen. Gelieve te controleren en handmatig een record toe te voegen indien nodig.</string>
<string name="generated_ecarbs_note">eCarbs: %1$d g (%2$d h), vertraging: %3$d m</string>
<string name="openaps_noasdata">Geen autosens-gegevens beschikbaar</string>
<string name="log_files">Logbestanden</string>
<string name="miscellaneous">Overige</string>
<string name="nav_logsettings">Log instellingen</string>
<string name="resettodefaults">Terug naar standaardinstellingen</string>
<string name="nsmalfunction">NSClient werkt niet goed. Overweg een herstart van NS en NSClient.</string>
@ -771,6 +778,11 @@
<string name="invalidpct">Ongeldig % invoer</string>
<string name="average">Gemiddelde</string>
<string name="tir">TIR</string>
<string name="day_tir">TIR overdag</string>
<string name="night_tir">TIR s\'nachts</string>
<string name="detailed_14_days">14 dagen details</string>
<string name="std_deviation">SD: %1$s</string>
<string name="hba1c">HbA1c: </string>
<string name="activitymonitor">Activiteitsmonitor</string>
<string name="doyouwantresetstats">Wil je de activiteitenstatistieken resetten?</string>
<string name="statistics">Statistieken</string>
@ -957,7 +969,7 @@
<string name="wear_action_tempt_max_bg_error">Max BG buiten bereik!</string>
<string name="wear_action_tempt_manual_range_message">Tijdelijk streefdoel:\nMin: %1$s\nMax: %2$s\nDuur: %3$s</string>
<string name="wear_action_tempt_manual_message">Tijdelijk streefdoel:\nDoel: %1$s\nDuur: %2$s</string>
<string name="wear_action_tempt_preset_message">Tijdelijk streefdoel:\Reden: %1$s\nDoel: %2$s\nDuur: %3$s</string>
<string name="wear_action_tempt_preset_message">Tijdelijk streefdoel:\nReden: %1$s\nDoel: %2$s\nDuur: %3$s</string>
<string name="quick_wizard_message">QuickWizard: %1$s\nInsuline: %2$.2fE\nKoolhy.: %3$dg</string>
<string name="wizard_result">Reken. Wizard:\nInsuline: %1$.2fE\nKoolhy.: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Toon invoer op apparaat:</string>
@ -997,6 +1009,10 @@
<string name="count_selected">%1$d geselecteerd</string>
<string name="sort_label">Sorteren</string>
<string name="dialog_canceled">Dialoog geannuleerd</string>
<string name="veryLow" comment="below 3.1">Zeer laag</string>
<string name="low" comment="3.1-3.9">Laag</string>
<string name="high" comment="10.0-13.9">Hoog</string>
<string name="veryHigh" comment="above 13.9">Zeer hoog</string>
<string name="below" comment="below &quot;in range&quot;">Onder</string>
<string name="in_range">Binnen bereik</string>
<string name="above" comment="above &quot;in range&quot;">Boven</string>
@ -1004,6 +1020,7 @@
<string name="show_hide_records">Verberg loop records</string>
<string name="widget_description">AndroidAPS widget</string>
<string name="configure">Configureer transparantie</string>
<string name="loop_status">Loop status</string>
<string name="graph_scale">Grafiek schaal</string>
<string name="profile1">Profiel 1</string>
<string name="profile2">Profiel 2</string>
@ -1023,4 +1040,6 @@
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Ontvang BG waarden van GlucoRx Aidex CGMS.</string>
<string name="blocked_by_charging">Geblokkeerd door oplaad instellingen</string>
<string name="blocked_by_connectivity">Geblokkeerd door verbindings instellingen</string>
</resources>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Sammenlign verdiene i AndroidAPS og pumpehistorikken (hvis pumpen støtter dette).</string>
<string name="wronginsulin_prime">Gi en bolus med en del av det insulinet du mangler enten med penn eller ved å bruke prime funksjonen.</string>
<string name="wronginsulin_donothing">Ikke gjør noe og la AndroidAPS korrigere eventuelle høye blodsukkerverdier.</string>
<string name="cob_label">Karbohydrater ombord (COB)</string>
<string name="cob_question">Hvordan vil endring av ISF-verdi påvirke COB-beregning?</string>
<string name="cob_longer">Økning av ISF gjør at karbohydrater absorberes over lengre tid</string>
<string name="cob_shorter">Økning av ISF gjør at karbohydrater absorberes over kortere tid</string>
<string name="cob_no_effect">Økning av ISF påvirker ikke beregningen av absorbering av karbohydrater</string>
<string name="cob2_question">Hvordan vil endring av IC-verdi påvirke COB-beregning?</string>
<string name="cob2_longer">Økning av IC gjør at karbohydrater absorberes over lengre tid</string>
<string name="cob2_shorter">Økning av IC gjør at karbohydrater absorberes over kortere tid</string>
<string name="cob2_no_effect">Økning av IC påvirker ikke beregningen av absorbering av karbohydrater</string>
<string name="cob3_question">Hvordan vil endring av profil-prosent påvirke COB-beregning?</string>
<string name="cob3_longer">Ved å sette profilen til 150% vil karbohydrater absorberes over lengre tid</string>
<string name="cob3_shorter">Ved å sette profilen til 150% vil karbohydrater absorberes over kortere tid</string>
<string name="cob3_no_effect">Ved å sette profilen til 150% påvirkes ikke beregningen av absorbering av karbohydrater</string>
<string name="iob_label">Aktivt insulin (IOB)</string>
<string name="iob_which">Marker alle riktige svar.</string>
<string name="iob_value">IOB verdi påvirkes av midlertidige temp basaler.</string>
<string name="iob_hightemp">Høy temp basal vil ikke bli gitt når ditt blodsukker er under målverdi.</string>
<string name="iob_negiob">Negativ IOB i en lengre periode selv om du ikke trener tyder på at profilen din gir for mye insulin og kanskje bør reduseres i innstillingene.</string>

View file

@ -6,7 +6,8 @@
<string name="treatmentssafety_title">Sikkerhet ved behandlinger</string>
<string name="treatmentssafety_maxbolus_title">Maks tillat bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks tillat karbo [g]</string>
<string name="nav_preferences_plugin">%1$s innstillinger</string>
<string name="treatmentssafety_lgsThreshold_title">Insulintilførsel stoppes når BS er under denne terskelverdien</string>
<string name="nav_preferences_plugin">%1$s Innstillinger</string>
<string name="nav_preferences">Innstillinger</string>
<string name="nav_refreshtreatments">Oppdater behandlinger fra NS</string>
<string name="nav_resetdb">Nullstill databasene</string>
@ -14,12 +15,12 @@
<string name="nav_exit">Avslutt</string>
<string name="alert_dialog_permission_battery_optimization_failed">Det ser ikke ut som mobilen støtter registrering av apper som unntas fra batterioptimalisering - du kan oppleve ytelsesproblemer.</string>
<string name="description_actions">Knapper for rask tilgang til ofte brukte funksjoner</string>
<string name="description_config_builder">Brukt for innstilling av aktive plugin</string>
<string name="description_config_builder">Brukes for innstilling av aktive plugins</string>
<string name="description_objectives">Opplæringsprogram</string>
<string name="description_food">Viser forhåndsinnstillinger for mat som er definert i Nightscout</string>
<string name="description_insulin_rapid">Innstillinger for Humalog og NovoRapid / NovoLog insulin</string>
<string name="description_food">Viser forhåndsinnstillinger for mat fra Nightscout</string>
<string name="description_insulin_rapid">Innstillinger for Humalog og NovoRapid / NovoLog</string>
<string name="description_insulin_ultra_rapid">Innstillinger for Fiasp</string>
<string name="description_insulin_lyumjev">Insulin innstillinger for Lyumjev</string>
<string name="description_insulin_lyumjev">Innstillinger for Lyumjev</string>
<string name="description_insulin_free_peak">Lar deg stille inn tidspunktet for toppen av insulinvirkningen. Bør bare benyttes av erfarne brukere</string>
<string name="description_loop">Aktiver eller deaktiver hendelsen som trigger loop.</string>
<string name="description_ns_client">Synkroniserer dine data med Nightscout</string>
@ -31,17 +32,17 @@
<string name="description_profile_local">Definer en profil som er tilgjengelig offline.</string>
<string name="description_pump_virtual">Integrasjon mot pumper som ikke støttes av AndroidAPS (åpen loop)</string>
<string name="description_sensitivity_aaps">Sensitiviteten beregnes på samme måte som i Oref0, men du kan angi hvor mye av historikken som skal tas med i beregningen. Minimum opptak av karbohydrater beregnes ut fra maks karbohydratopptak angitt i dine innstillinger.</string>
<string name="description_sensitivity_oref1">Sensitivitet beregnes fra 8t og 24t historiske dat (velger alltid det resultatet som gir høyest insulinsensitivitet. Karbohydrater som ikke er absorbert blir avsluttet etter tiden som er angitt i innstillinger. Plugin beregner også UAM.</string>
<string name="description_sensitivity_oref1">Sensitivitet beregnes fra 8t og 24t historiske data (velger alltid det resultatet som gir høyest insulinsensitivitet). Karbohydrater (som ikke er absorbert) blir avsluttet etter tiden som er angitt i innstillinger. Plugin beregner også UAM.</string>
<string name="description_sensitivity_weighted_average">Sensitivitet beregnes som en vektet gjennomsnittsverdi av avvikene. Ferske avvik har høyere vekting. Minimum opptak av karbohydrater beregnes ut fra maks opptakstid for karbohydrater angitt i dine innstillinger. Denne algoritmen er den raskeste for å justere endringer i sensitivitet.</string>
<string name="description_source_eversense">Motta BS verdier fra den modifiserte Eversense appen.</string>
<string name="description_source_glimp">Motta BS verdier fra Glimp.</string>
<string name="description_source_mm640g">Motta BS verdier fra 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Last ned BS verdier fra Nightscout</string>
<string name="description_source_xdrip">Motta BS verdier fra xDrip+.</string>
<string name="description_source_eversense">Motta BS-verdier fra den modifiserte Eversense-appen.</string>
<string name="description_source_glimp">Motta BS-verdier fra Glimp.</string>
<string name="description_source_mm640g">Motta BS-verdier fra 600SeriesAndroidUploader.</string>
<string name="description_source_ns_client">Last ned BS-verdier fra Nightscout</string>
<string name="description_source_xdrip">Motta BS-verdier fra xDrip+.</string>
<string name="description_treatments">Lagre data om alle behandlinger som er utført</string>
<string name="description_wear">Monitorer og kontroller AndroidAPS med din WearOS klokke.</string>
<string name="description_wear">Overvåke og styre AndroidAPS med din WearOS-klokke.</string>
<string name="description_xdrip_status_line">Vis informasjon om loop på din xDrip+ urskive.</string>
<string name="description_sms_communicator">Fjernstyr AndroidAPS med SMS kommandoer.</string>
<string name="description_sms_communicator">Fjernstyre AndroidAPS med SMS-kommandoer.</string>
<string name="treatments_insulin_label_string">Insulin:</string>
<string name="treatments_carbs_label_string">Karbo:</string>
<string name="treatments_iob_label_string">IOB:</string>
@ -69,7 +70,7 @@
<string name="openapsma_mealdata_label">Måltidsdata</string>
<string name="result">Resultat</string>
<string name="result_insulin_carbs">Resultat: %1$s %2$s</string>
<string name="openapsma_noglucosedata">Ingen BS data tilgjengelig</string>
<string name="openapsma_noglucosedata">Ingen BS-data tilgjengelig</string>
<string name="openapsma_request_label">Forespørsel</string>
<string name="delta">Delta</string>
<string name="sms_delta">Delta:</string>
@ -82,7 +83,7 @@
<string name="configbuilder_profile">Profil</string>
<string name="configbuilder_profile_description">Hvilken profil bør AndroidAPS bruke?</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_aps_description">Hvilken APS algoritme skal brukes for administrasjon av behandlinger?</string>
<string name="configbuilder_aps_description">Hvilken algoritme skal APS benytte for behandlinger?</string>
<string name="configbuilder_general">Generelt</string>
<string name="configbuilder_general_description">Det er noen generelle plugins som kan være nyttige.</string>
<string name="configbuilder_constraints_description">Hvilke begrensninger brukes?</string>
@ -91,12 +92,12 @@
<string name="configbuilder_loop_description">Bruk dette for å aktivere AndroidAPS loop integrasjon.</string>
<string name="loop_aps_label">APS</string>
<string name="loop_constraintsprocessed_label">Etter behandling av begrensninger</string>
<string name="loop_tbrsetbypump_label">Temp Basal satt av pumpen</string>
<string name="loop_tbrsetbypump_label">Temp basal satt av pumpen</string>
<string name="noapsselected">INGEN APS ER VALGT ELLER HAR LEVERT RESULTAT</string>
<string name="safety">Sikkerhet</string>
<string name="openapsma_disabled">Plugin er deaktivert</string>
<string name="constraints_violation">Brudd på begrensninger</string>
<string name="treatmentdeliveryerror">Er registrert en feil med bolus leveransen. Sjekk manuelt om den er levert og hvor mye!</string>
<string name="treatmentdeliveryerror">Det er registrert en feil med bolus-leveransen. Sjekk manuelt om den er levert og hvor mye</string>
<string name="setbasalquestion">Aksepter ny temp basal:</string>
<string name="overview_treatment_label">Behandling</string>
<string name="overview_calculator_label">Kalkulator</string>
@ -104,24 +105,24 @@
<string name="sms_bolus">Bolus:</string>
<string name="sms_basal">Basal:</string>
<string name="changeyourinput">Endre dine inndata!</string>
<string name="configbuilder_bgsource">BS kilde</string>
<string name="configbuilder_bgsource">BS-kilde</string>
<string name="configbuilder_bgsource_description">Hvor skal AndroidAPS hente sine data fra?</string>
<string name="xdrip">xDrip+</string>
<string name="apsmode_title">APS modus</string>
<string name="closedloop">Lukket loop</string>
<string name="openloop">Åpen loop</string>
<string name="lowglucosesuspend">Stopp hvis lavt BS</string>
<string name="closedloop">Lukket Loop</string>
<string name="openloop">Åpen Loop</string>
<string name="lowglucosesuspend">Stopp ved lavt BS</string>
<string name="disabledloop">Loop er deaktivert</string>
<string name="openloop_newsuggestion">Ny anbefaling tilgjengelig</string>
<string name="carbssuggestion">Karbo forslag</string>
<string name="unsupportednsversion">Versjonen av Nightscout støttes ikke</string>
<string name="treatments_wizard_basaliob_label">Basal IOB</string>
<string name="bolusconstraintapplied">Bolus begrensning utført</string>
<string name="carbsconstraintapplied">Karbohydrat begrensning utført</string>
<string name="bolusconstraintapplied">Bolus-begrensning utført</string>
<string name="carbsconstraintapplied">Karbohydrat-begrensning utført</string>
<string name="careportal_newnstreatment_other">Annet</string>
<string name="careportal_newnstreatment_meter">Meter</string>
<string name="careportal_newnstreatment_sensor">Sensor</string>
<string name="carb_time_label">Karbo tid</string>
<string name="carb_time_label">Karbo-tid</string>
<string name="careportal_newnstreatment_duration_label">Varighet</string>
<string name="profile_label">Profil</string>
<string name="careportal_newnstreatment_glucosetype">Glukosetype</string>
@ -129,7 +130,7 @@
<string name="overview_extendedbolus_button">Forlenget bolus</string>
<string name="configbuilder_nightscoutversion_label">Nightscout versjon:</string>
<string name="missing_carbs">Mangler %1$d g</string>
<string name="exported">Innstillinger lagret</string>
<string name="exported">Innstillinger er eksportert</string>
<string name="ue_exported">Brukeroppføringer er eksportert</string>
<string name="export_to">Eksporter innstillinger til</string>
<string name="import_from">Importer innstillinger fra</string>
@ -162,27 +163,27 @@
<string name="end_user_license_agreement_i_understand">JEG FORSTÅR OG GODTAR</string>
<string name="save">Lagre</string>
<string name="reloadprofile">Les inn profil på nytt</string>
<string name="smscommunicator">SMS tjeneste</string>
<string name="smscommunicator">SMS-tjeneste</string>
<string name="smscommunicator_allowednumbers">Godkjente mobilnumre</string>
<string name="smscommunicator_allowednumbers_summary">+XXXXXXXXXX;+YYYYYYYYYY</string>
<string name="smscommunicator_bolusreplywithcode">For å levere bolus på %1$.2fE, svar med kode %2$s</string>
<string name="smscommunicator_mealbolusreplywithcode">For å levere måltidsbolus på %1$.2fE, svar med kode %2$s</string>
<string name="smscommunicator_temptargetwithcode">For å sette Temp Target på %1$s, svar med kode %2$s</string>
<string name="smscommunicator_temptargetcancel">For å avbryte Temp Target, svar med kode %1$s</string>
<string name="smscommunicator_stopsmswithcode">For å deaktivere fjernstyring via SMS meldinger, svar med kode %1$s.\n\nHusk at du vil kunne reaktivere den igjen kun fra AAPS master telefon.</string>
<string name="smscommunicator_stoppedsms">Fjernstyring via SMS meldinger er stanset. For å reaktivere, bruk AAPS på master telefonen.</string>
<string name="smscommunicator_stopsmswithcode">For å deaktivere fjernstyring via SMS-meldinger, svar med kode %1$s.\n\nHusk at du vil kunne reaktivere den igjen kun fra AAPS hovedtelefon.</string>
<string name="smscommunicator_stoppedsms">Fjernstyring via SMS-meldinger er stanset. For å reaktivere, bruk AAPS på hovedtelefonen.</string>
<string name="smscommunicator_calibrationreplywithcode">For å sende kalibrering %1$.2f, svar med kode %2$s</string>
<string name="smscommunicator_bolusfailed">Bolus mislyktes</string>
<string name="smscommunicator_remotebolusmindistance_summary">Minimum antall minutter som må forløpe mellom en fjernstyrt bolus og den neste</string>
<string name="smscommunicator_remotebolusmindistance">Minimum antall minutter mellom en fjernstyrt bolus og neste</string>
<string name="smscommunicator_remotebolusmindistance_caveat">For din egen sikkerhet, for å endre denne innstillingen må du legge til minst 2 telefonnumre.</string>
<string name="smscommunicator_remotebolusmindistance_caveat">For din egen sikkerhet, må du legge til minst 2 telefonnumre for å endre denne innstillingen.</string>
<string name="bolusrequested">Skal levere %1$.2f E</string>
<string name="smscommunicator_bolusdelivered">Bolus %1$.2f E levert vellykket</string>
<string name="smscommunicator_mealbolusdelivered">Måltidsbolus %1$.2f E levert vellykket</string>
<string name="smscommunicator_mealbolusdelivered_tt">Temp target på %1$s er satt for %2$d minutter</string>
<string name="smscommunicator_tt_set">Temp target på %1$s for %2$d minutter ble vellykket definert</string>
<string name="smscommunicator_tt_canceled">Temp Target ble vellykket avbrutt</string>
<string name="smscommunicator_remotecommandsallowed">Tillat fjernstyring via SMS meldinger</string>
<string name="smscommunicator_bolusdelivered">Bolus %1$.2f E er levert</string>
<string name="smscommunicator_mealbolusdelivered">Måltidsbolus %1$.2f E er levert</string>
<string name="smscommunicator_mealbolusdelivered_tt">Temp target på %1$s er satt i %2$d minutter</string>
<string name="smscommunicator_tt_set">Temp target på %1$s i %2$d minutter ble lagret</string>
<string name="smscommunicator_tt_canceled">Temp Target ble fjernet</string>
<string name="smscommunicator_remotecommandsallowed">Tillat fjernstyring via SMS-meldinger</string>
<string name="smscommunicator_loophasbeendisabled">Loop har blitt deaktivert</string>
<string name="smscommunicator_loophasbeenenabled">Loop har blitt aktivert</string>
<string name="smscommunicator_loopisenabled">Loop er aktivert</string>
@ -192,7 +193,7 @@
<string name="smscommunicator_pumpdisconnected">Pumpe frakoblet</string>
<string name="smscommunicator_reconnect">Pumpen tilkoblet igjen</string>
<string name="smscommunicator_remotecommandnotallowed">Fjernstyringskommando er ikke tillatt</string>
<string name="smscommunicator_remotebolusnotallowed">Fjernstyrings bolus er ikke tilgjengelig. Prøv igjen senere.</string>
<string name="smscommunicator_remotebolusnotallowed">Fjernstyringsbolus er ikke tilgjengelig. Prøv igjen senere.</string>
<string name="smscommunicator_basalreplywithcode">For å starte basal %1$.2f E/t i %2$d minutter, svar med kode %3$s</string>
<string name="smscommunicator_profilereplywithcode">For å bytte profil til %1$s %2$d%%, svar med kode %3$s</string>
<string name="smscommunicator_extendedreplywithcode">For å starte forlenget bolus %1$.2f E i %2$d minutter, svar med kode %3$s</string>
@ -226,9 +227,9 @@
<string name="mealbolus">Måltid</string>
<string name="correctionbous">Korreksjon</string>
<string name="actions">Handlinger</string>
<string name="ns_upload_only">(FARLIG Å DEAKTIVERE) Kun NS opplast</string>
<string name="ns_upload_only">(FARLIG Å DEAKTIVERE) Kun NS opplasting</string>
<string name="ns_upload_only_summary">Kun NS opplasting (deaktivert sync). Ikke effektiv på SGV med mindre en lokal kilde som xDrip+ er valgt. Ikke effektiv på Profiler mens NS-Profiler brukes.\n!!! ADVARSEL !!! Deaktivering av dette alternativet kan føre til funksjonsfeil og overdosering av insulin hvis noen av dine komponenter (AAPS, NS, xDrip+) er feil konfigurert. Observer at data som vises i AAPS samsvarer med pumpestatus!</string>
<string name="pumpNotInitialized">Pumpen ikke initialisert!</string>
<string name="pumpNotInitialized">Pumpen er ikke startet!</string>
<string name="primefill">Prime/fylling</string>
<string name="fillwarning">Kontroller at mengden samsvarer med spesifikasjonen for slangesettet ditt!</string>
<string name="fillbolus_title">Standardverdier for påfyll/prime</string>
@ -245,8 +246,8 @@
<string name="wear">Klokke</string>
<string name="resend_all_data">Send alle data på nytt</string>
<string name="open_settings_on_wear">Åpne Innstillinger på klokken</string>
<string name="basal_rate">Basal rate</string>
<string name="basalvaluebelowminimum">Basal verdi under minimum. Profilen settes ikke!</string>
<string name="basal_rate">Basalrate</string>
<string name="basalvaluebelowminimum">Basalverdi under minimum. Profilen settes ikke!</string>
<string name="sms_actualbg">BS:</string>
<string name="sms_lastbg">Siste BS:</string>
<string name="MM640g">MM640G</string>
@ -256,11 +257,11 @@
<string name="localprofile">Profil</string>
<string name="openapsama">OpenAPS AMA</string>
<string name="array_of_elements">Liste med %1$d elementer.\nFaktisk verdi:</string>
<string name="openapsma_autosensdata_label">Autosens data</string>
<string name="openapsma_autosensdata_label">Autosens-data</string>
<string name="openapsma_scriptdebugdata_label">Script feilsøking</string>
<string name="openapsama_useautosens">Bruk Autosens funksjon</string>
<string name="refresheventsfromnightscout">Gjenoppfrisk fra NS</string>
<string name="deletefuturetreatments">Slett behandlinger i fremtiden</string>
<string name="deletefuturetreatments">Slett fremtidige behandlinger</string>
<string name="actions_shortname">ACT</string>
<string name="configbuilder_shortname">KONF</string>
<string name="loop_shortname">LOOP</string>
@ -281,12 +282,12 @@
<string name="openapsama_current_basal_safety_multiplier_summary">Standardverdi: 4 Dette er en viktig OpenAPS sikkerhetsbegrensning. Dette begrenser dine temp basal til max 4 ganger din nåværende basal dose, uansett hva som er maks basal i pumpen. Dette er for å unngå at man setter farlige høye maks basal doser uten at man har forstått algoritmene. Når du taket i denne begrensningen bør du i stedet fokusere på å endre andre innstillinger.</string>
<string name="openapsama_autosens_max_summary">Standardverdi: 1.2\nDetta er en multiplikatorbegrensning for autosens (og snart autotune) som begrenser at autosens ikke kan øke med mer enn 20%%, som dermed begrenser hvor mye autosens kan justere opp dine basaler, hvor mye ISK kan reduseres og hvor lavt BS målverdi kan settes.</string>
<string name="openapsama_autosens_min_summary">Standardverdi: 0.7\nDette er en multiplikatorbegrensning for autosens sikkerhet. Den begrenser autosens til å redusere basalverdier, og øke isulinssensitivitet (ISF) og BS mål med ikke mer enn enn 30%.</string>
<string name="openapsama_autosens_adjusttargets">Autosens justerer også BS målverdier</string>
<string name="openapsama_autosens_adjusttargets_summary">Standard verdi: sann\nGir autosens tillatelse til å justere BS mål, i tillegg til ISF og basaler.</string>
<string name="openapsama_bolussnooze_dia_divisor_summary">Standard verdi: 2\nBolus snooze er aktivt etter at du har gitt en måltidsbolus slik at loop ikke skal forsøke å sette lav-temp når du nettopp har spist. I dette eksempelet brukesg standardverdi på 2, så med en 3 timers DIA vil bolus snooze begrensning gradvis forsvinne etter 1.5 timer (3DIA / 2). Bolus snooze brukes ikke hvis SMB er aktivert.</string>
<string name="openapsama_min_5m_carbimpact_summary">Standardverdi er: 3.0 (AMA) eller 8.0 (SMB). Dette er grunninnstillingen for KH opptak per 5 minutt. Den påvirker hvor raskt COB skal reduseres, og benyttes i beregning av fremtidig BS kurve når BS enten synker eller øker mer enn forventet. Standardverdi er 3mg/dl/5 min.</string>
<string name="openapsama_autosens_adjusttargets">Autosens justerer også BS-målverdier</string>
<string name="openapsama_autosens_adjusttargets_summary">Standard verdi: sann\nGir autosens tillatelse til å justere BS-mål, i tillegg til ISF og basaler.</string>
<string name="openapsama_bolussnooze_dia_divisor_summary">Standard verdi: 2\nBolus-snooze er aktivt etter at du har gitt en måltidsbolus slik at loop ikke skal forsøke å sette lav-temp når du nettopp har spist. I dette eksempelet brukes standardverdi på 2, så med en 3 timers DIA vil bolus-snoozebegrensning gradvis forsvinne etter 1.5 timer (3DIA / 2). Bolus-snooze brukes ikke hvis SMB er aktivert.</string>
<string name="openapsama_min_5m_carbimpact_summary">Standardverdi er: 3.0 (AMA) eller 8.0 (SMB). Dette er grunninnstillingen for KH-opptak per 5 minutt. Den påvirker hvor raskt COB skal reduseres, og benyttes i beregning av fremtidig BS-kurve når BS enten synker eller øker mer enn forventet. Standardverdi er 3mg/dl/5 min.</string>
<string name="openapsama_link_to_preferncejson_doc_txt">Advarsel!\nNormalt vil du ikke trenge å endre verdiene under. Vennligst TRYKK HER og LES teksten for å være sikker på at du FORSTÅR konsekvensene før du gjør endringer.</string>
<string name="smscommunicator_invalidphonennumber">Ugyldig SMS mobilnummer</string>
<string name="smscommunicator_invalidphonennumber">Ugyldig mobilnummer for SMS</string>
<string name="overview_calibration">Kalibrering</string>
<string name="xdripnotinstalled">xDrip+ ikke installert</string>
<string name="calibrationsent">Kalibrering er sendt til xDrip+</string>
@ -294,7 +295,7 @@
<string name="smscommunicator_calibrationfailed">xDrip+ tar ikke imot kalibreringer</string>
<string name="pumpsuspended">Pumpen er pauset</string>
<string name="executing">Utfører</string>
<string name="virtualpump_settings">Virtuelle pumpe innstillinger</string>
<string name="virtualpump_settings">Innstillinger for virtuell pumpe</string>
<string name="virtualpump_uploadstatus_title">Last opp status til Nightscout</string>
<string name="nsclientinternal">NSClient</string>
<string name="nsclientinternal_shortname">NSCI</string>
@ -304,40 +305,40 @@
<string name="nsclientinternal_title">NSClient</string>
<string name="nsclientinternal_url_title">Nightscout URL</string>
<string name="nsclientinternal_url_dialogmessage">Oppgi din Nightscout URL</string>
<string name="nsclientinternal_secret_title">Nightscout API secret</string>
<string name="nsclientinternal_secret_dialogtitle">Nightscout API secret</string>
<string name="nsclientinternal_secret_dialogmessage">Oppgi NS API secret (min 12 tegn)</string>
<string name="nsclientinternal_secret_title">Nightscout API-nøkkel</string>
<string name="nsclientinternal_secret_dialogtitle">Nightscout API-nøkkel</string>
<string name="nsclientinternal_secret_dialogmessage">Oppgi NS API-nøkkel (min 12 tegn)</string>
<string name="deliver_now">Lever nå</string>
<string name="clear_queue">Tøm kø</string>
<string name="show_queue">Vis kø</string>
<string name="queue">Kø:</string>
<string name="status">Status:</string>
<string name="clearlog">Tøm logg</string>
<string name="nowritepermission">NSCLIENT har ingen skriverettighet. Feil API secret?</string>
<string name="wear_settings">Klokke innstillinger</string>
<string name="nowritepermission">NSCLIENT har ingen skriverettighet. Feil API-nøkkel?</string>
<string name="wear_settings">Klokkeinnstillinger</string>
<string name="wear_detailedIOB_title">Vis detaljert IOB</string>
<string name="wear_detailedIOB_summary">Vis IOB med bolus och basal IOB på klokke</string>
<string name="nosuccess">mislykket - sjekk telefonen</string>
<string name="wear_detailedIOB_summary">Splitt IOB til bolus- og basal-IOB på klokken</string>
<string name="nosuccess">feilet - sjekk telefonen</string>
<string name="notavailable">n/a</string>
<string name="patientage">Pasient type</string>
<string name="patientage">Pasienttype</string>
<string name="child">Barn</string>
<string name="teenage">Tenåring</string>
<string name="adult">Voksen</string>
<string name="resistantadult">Insulin resistent voksen</string>
<string name="resistantadult">Insulinresistent voksen</string>
<string name="pregnant">Graviditet</string>
<string name="patientage_summary">Velg pasientens type for oppsett av sikkerhetsgrenser</string>
<string name="patient_name">Pasientens navn</string>
<string name="patientage_summary">Velg pasienttype for oppsett av sikkerhetsgrenser</string>
<string name="patient_name">Pasientnavn</string>
<string name="patient_name_summary">Angi pasientnavn eller kallenavn for å kunne skille mellom flere oppsett</string>
<string name="patient_name_default" comment="This is default patient display name, when user does not provide real one">Bruker</string>
<string name="Glimp">Glimp</string>
<string name="needwhitelisting">%1$s behøver å omgå batterispare funksjonene for å fungere tilfredsstillende</string>
<string name="needwhitelisting">%1$s behøver å omgå batterisparefunksjonene for å fungere tilfredsstillende</string>
<string name="loopsuspended">Loop pauset</string>
<string name="loopsuspendedfor">Pauset (%1$d m)</string>
<string name="suspendloopfor1h">Pause loop i 1t</string>
<string name="suspendloopfor2h">Pause loop i 2t</string>
<string name="suspendloopfor3h">Pause loop i 3t</string>
<string name="suspendloopfor10h">Pause loop i 10t</string>
<string name="disconnectpump">Frakoble pumpe</string>
<string name="disconnectpump">Koble fra pumpen</string>
<string name="disconnectpumpfor15m">Koble fra pumpen i 15 min</string>
<string name="disconnectpumpfor30m">Koble fra pumpen i 30 min</string>
<string name="disconnectpumpfor1h">Koble fra pumpen i 1t</string>
@ -350,36 +351,36 @@
<string name="duration3h">3 timer</string>
<string name="duration10h">10 timer</string>
<string name="resume">Gjenoppta</string>
<string name="reconnect">Tilkoble pumpen</string>
<string name="reconnect">Koble til pumpen</string>
<string name="smscommunicator_wrongduration">Feil varighet</string>
<string name="smscommunicator_loopsuspended">Loop er pauset</string>
<string name="smscommunicator_loopresumed">Loop gjenopptatt</string>
<string name="bg_trend_label">15 min trend</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="superbolus">Superbolus</string>
<string name="ns_logappstartedevent">Logg app start til NS</string>
<string name="restartingapp">Avslutter appen for at innstillinger skal tas i bruk.</string>
<string name="ns_logappstartedevent">Logg app-start til NS</string>
<string name="restartingapp">Avslutter appen for å aktivere innstillinger.</string>
<string name="configbuilder_insulin_description">Hvilken type insulin bruker du?</string>
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
<string name="ultrafastactinginsulincomment">Fiasp</string>
<string name="insulin_shortname">INS</string>
<string name="enablesuperbolus">Aktiver superbolus i veiviser</string>
<string name="enablesuperbolus_summary">Aktiver superbolus funksjonen i wizard. Ikke aktiver denne før du vet hvordan den fungerer. DEN KAN LEDE TIL EN OVERDOSERING AV INSULIN HVIS DEN BRUKES BLINDT!</string>
<string name="show_statuslights">Vis statusindikatorer på hjem skjermen</string>
<string name="statuslights_cage_warning">OBS: alder slangesett [h]</string>
<string name="statuslights_cage_critical">Advarsel: alder slangesett [h]</string>
<string name="statuslights_iage_warning">OBS: alder insulin [h]</string>
<string name="statuslights_iage_critical">Advarsel: alder insulin [h]</string>
<string name="statuslights_sage_warning">OBS: alder CGM [h]</string>
<string name="statuslights_sage_critical">Advarsel: alder CGM [h]</string>
<string name="statuslights_sbat_warning">Nivå for når batterivarsel skal gis [%]</string>
<string name="statuslights_sbat_critical">Nivå for når kritisk batteriadvarsel skal gis [%]</string>
<string name="statuslights_bage_warning">Nivå for når batterivarsel for pumpe skal gis [h]</string>
<string name="statuslights_bage_critical">Nivå for når kritisk batteriadvarsel for pumpe skal gis [h]</string>
<string name="statuslights_res_warning">OBS: nivå insulinreservoar [U]</string>
<string name="statuslights_res_critical">Advarsel: nivå insulinreservoar [U]</string>
<string name="statuslights_bat_warning">Nivå for når batterivarsel for pumpe skal gis [%]</string>
<string name="statuslights_bat_critical">Nivå for når kritisk batteriadvarsel for pumpe skal gis [%]</string>
<string name="enablesuperbolus_summary">Aktiver superbolus-funksjonen i veiviseren. Ikke aktiver denne før du vet hvordan den fungerer. DEN KAN LEDE TIL EN OVERDOSERING AV INSULIN HVIS DEN BRUKES BLINDT!</string>
<string name="show_statuslights">Vis statusindikatorer på hjem-skjermen</string>
<string name="statuslights_cage_warning">Terskel for advarsel, alder på slangesett [h]</string>
<string name="statuslights_cage_critical">Terskel for kritisk alder på slangesett [h]</string>
<string name="statuslights_iage_warning">Terskel for advarsel, alder på insulin [h]</string>
<string name="statuslights_iage_critical">Terskel for kritisk alder på insulin [h]</string>
<string name="statuslights_sage_warning">Terskel for advarsel, alder på CGM [h]</string>
<string name="statuslights_sage_critical">Terskel for kritisk alder på CGM [h]</string>
<string name="statuslights_sbat_warning">Terskel for advarsel, batterinivå for sensor [%]</string>
<string name="statuslights_sbat_critical">Terskel for kritisk batterinivå for sensor [%]</string>
<string name="statuslights_bage_warning">Terskel for advarsel, batterialder for pumpe [h]</string>
<string name="statuslights_bage_critical">Terskel for kritisk batterialder for pumpe [h]</string>
<string name="statuslights_res_warning">Terskel for advarsel, insulinreservoar [U]</string>
<string name="statuslights_res_critical">Terskel for kritisk insulinreservoar [U]</string>
<string name="statuslights_bat_warning">Terskel for advarsel, batterinivå for pumpe [%]</string>
<string name="statuslights_bat_critical">Terskel for kritisk batterinivå for pumpe [%]</string>
<string name="prediction_shortname">PROGN</string>
<string name="basal_shortname">BAS</string>
<string name="deviation_shortname">DEV</string>
@ -388,8 +389,8 @@
<string name="abs_insulin_shortname">ABS</string>
<string name="devslope_shortname">DEVSLOPE</string>
<string name="nav_about">Om</string>
<string name="smscommunicator_missingsmspermission">Mangler SMS tillatelse</string>
<string name="smscommunicator_missingphonestatepermission">Mangler app tillatelse til telefon</string>
<string name="smscommunicator_missingsmspermission">Mangler SMS-tillatelse</string>
<string name="smscommunicator_missingphonestatepermission">Appen mangler tilgang til telefonstatus</string>
<string name="xdripstatus_settings">xDrip+ Status (klokke)</string>
<string name="xdripstatus">xDrip+ Statuslinje (klokke)</string>
<string name="xdripstatus_shortname">xds</string>
@ -399,47 +400,47 @@
<string name="doprofileswitch">Gjør profilbytte</string>
<string name="careportal_sensor_label">Sensor</string>
<string name="careportal_insulin_label">Insulin</string>
<string name="careportal_pb_label">Pumpe batteri</string>
<string name="careportal_pb_label">Pumpebatteri</string>
<string name="careportal_age_label">alder:</string>
<string name="careportal_level_label">nivå:</string>
<string name="ns_alarmoptions">Alarm valg</string>
<string name="ns_alarms">Opprett varsler fra NS alarmer</string>
<string name="ns_announcements">Opprett varsler fra NS meldinger</string>
<string name="nsalarm_staledatavalue_label">Ingen data advarsel [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Kritisk mangel på data advarsel [min]</string>
<string name="ns_alarmoptions">Alarmvalg</string>
<string name="ns_alarms">Opprett varsler fra NS-alarmer</string>
<string name="ns_announcements">Opprett varsler fra NS-meldinger</string>
<string name="nsalarm_staledatavalue_label">Advarsel ved manglende data [min]</string>
<string name="nsalarm_urgent_staledatavalue_label">Advarsel ved kritisk mangel på data [min]</string>
<string name="openapsama_autosens_period">Intervall for autosens [h]</string>
<string name="openapsama_autosens_period_summary">Antall timer med historiske data for beregning av sensitivitet (absorpsjonstid for KH er ekskludert)</string>
<string name="openaps">OpenAPS</string>
<string name="uploader">Opplaster</string>
<string name="configbuilder_sensitivity">Sensitivitets deteksjon</string>
<string name="configbuilder_sensitivity">Sensitivitetsdeteksjon</string>
<string name="configbuilder_sensitivity_description">Hvilken sensitivitetsalgoritme skal benyttes?</string>
<string name="sensitivity_shortname">SENS</string>
<string name="sensitivityoref1">Sensitivitet Oref1</string>
<string name="sensitivityaaps">Sensitivitet AAPS</string>
<string name="absorptionsettings_title">Absorpsjon innstillinger</string>
<string name="absorptionsettings_title">Absorpsjonsinnstillinger</string>
<string name="absorption_maxtime_title">Maks absorpsjonstid for måltid [h]</string>
<string name="absorption_maxtime_summary">Tid i timer hvor det forventes at alle karbohydrater fra måltid vil være absorbert</string>
<string name="openaps_short">OAPS</string>
<string name="uploader_short">UPLD</string>
<string name="basal_short">BAS</string>
<string name="keep_screen_on_title">Hold skjermen påslått</string>
<string name="keep_screen_on_summary">Forhindre Android å slå av skjermen. Mobil vil bruke mye batteri hvis den ikke plugges til strømledning.</string>
<string name="sensitivity_warning">Hvis du slår på Autosense funksjonen må du huske å angi alle spiste karbohydrater. Ellers vil KH avvik gi feil i sensitivitetsberegningen !!</string>
<string name="keep_screen_on_summary">Forhindre Android fra å slå av skjermen. Mobilen vil bruke mye batteri hvis den ikke plugges til strømledning.</string>
<string name="sensitivity_warning">Hvis du slår på Autosense-funksjonen må du huske å angi alle spiste karbohydrater. Ellers vil KH-avvik gi feil i sensitivitetsberegningen !!</string>
<string name="sensitivityweightedaverage">Sensitivitet vektet middelverdi</string>
<string name="notloadedplugins">Ikke alle profiler ble lastet!</string>
<string name="valuesnotstored">Verdier ikke lagret!</string>
<string name="ns_localbroadcasts">Aktiver kringkasting til andre apper (som xDrip+). Ikke aktiver dette hvis du har mer enn en AAPS eller NSClient installert!</string>
<string name="ns_localbroadcasts_title">Aktiver lokale sendinger.</string>
<string name="ns_localbroadcasts">Aktiver kringkasting til andre apper (som xDrip+). Ikke aktiver dette hvis du har mer enn én AAPS eller NSClient installert!</string>
<string name="ns_localbroadcasts_title">Aktiver deling av data mellom apper på telefonen.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamisk ISF</string>
<string name="DynISFAdjust_title">DynamiskISF justeringsfaktor %%</string>
<string name="DynISFAdjust_summary">Justeringsfaktor for dynamisk ISF. Verdier over 100%% vil gi mer aggressive korreksjonsdoser, mens verdier under 100%% vil gi mildere korreksjonsdoser.</string>
<string name="DynISFAdjust_title" formatted="false">DynamiskISF justeringsfaktor %</string>
<string name="DynISFAdjust_summary" formatted="false">Justeringsfaktor for dynamisk ISF. Verdier over 100% vil gi mer aggressive korreksjonsdoser, mens verdier under 100% vil gi mildere korreksjonsdoser.</string>
<string name="enableuam">Aktiver UAM</string>
<string name="enablesmb">Aktiver SMB</string>
<string name="enablesmb_summary">Bruk Super Mikro Solen i stedet for temp basal for raskere resultat</string>
<string name="enableuam_summary">Oppdaget uannonsert måltid (UAM)</string>
<string name="insulin_oref_peak">IOB kurvens topp tid</string>
<string name="insulin_peak_time">Topp tid [min]</string>
<string name="enablesmb_summary">Bruk Super Mikro Bolus i stedet for temp basal for raskere resultat</string>
<string name="enableuam_summary">Oppdag uannonsert måltid (UAM)</string>
<string name="insulin_oref_peak">IOB-kurvens topptid</string>
<string name="insulin_peak_time">Topptid [min]</string>
<string name="insulin_peak">Topp</string>
<string name="free_peak_oref">Free-Peak Oref</string>
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
@ -451,10 +452,10 @@
<string name="careportal_newnstreatment_percentage_label">Prosent</string>
<string name="careportal_newnstreatment_timeshift_label">Tidsforskyving</string>
<string name="default_temptargets">Standard temp mål</string>
<string name="eatingsoon_duration">spise snart varighet</string>
<string name="eatingsoon_target">spise snart målverdi</string>
<string name="activity_duration">aktivitet varighet</string>
<string name="activity_target">aktivitet målverdi</string>
<string name="eatingsoon_duration">spise snart-varighet</string>
<string name="eatingsoon_target">spise snart-målverdi</string>
<string name="activity_duration">varighet for aktivitet</string>
<string name="activity_target">målverdi ved aktivitet</string>
<string name="hypo_duration">hypo varighet</string>
<string name="hypo_target">hypo målverdi</string>
<string name="reuse_profile_pct_hours">Gjenbruk %1$d%% %2$dt</string>
@ -468,52 +469,52 @@
<string name="shortprotein">Pr</string>
<string name="shortfat">Fett</string>
<string name="executingrightnow">Kommandoen utføres akkurat nå</string>
<string name="missed_bg_readings">Mangler BS målinger</string>
<string name="missed_bg_readings">Mangler BS-målinger</string>
<string name="raise_notifications_as_android_notifications">Bruk systemvarslinger for alarmer og varslinger</string>
<string name="gradually_increase_notification_volume">Øk volumet gradvis for alarmer og varsler</string>
<string name="localalertsettings_title">Lokale varsler</string>
<string name="enable_missed_bg_readings_alert">Varsel hvis ingen BS data mottas</string>
<string name="enable_missed_bg_readings_alert">Varsel hvis ingen BS-data mottas</string>
<string name="enable_pump_unreachable_alert">Varsel hvis pumpen er utilgjengelig</string>
<string name="pump_unreachable_threshold">Pumpen er ikke tilgjengelig etter [min]</string>
<string name="enable_carbs_req_alert">Varsel hvis karbohydrater må tilføres</string>
<string name="urgent_alarm">Kritisk alarm</string>
<string name="info">INFO</string>
<string name="eversense">Eversense App (patched)</string>
<string name="dexcomg5_nsupload_title">Last opp BS data til NS</string>
<string name="bgsource_upload">BS opplast innstillinger</string>
<string name="dexcomg5_nsupload_title">Last opp BS-data til NS</string>
<string name="bgsource_upload">Innstillinger for opplasting av BS</string>
<string name="wear_detailed_delta_title">Vis detaljer om delta</string>
<string name="wear_detailed_delta_summary">Vis delta med én ekstra desimal</string>
<string name="smbinterval_summary">Minste antall minutter mellom hver SMB</string>
<string name="smbmaxminutes_summary">Maks antall minutter med basal som kan bli SMB</string>
<string name="uamsmbmaxminutes">UAM SMB maks minutter</string>
<string name="uamsmbmaxminutes_summary">Maks antall minutter basal som kan bli SMB ved UAM</string>
<string name="carbsReqThreshold">Minimumsgrense for KH forslag</string>
<string name="carbsReqThreshold">Minimumsgrense for KH-forslag</string>
<string name="carbsReqThreshold_summary">Minimum mengde karbohydrater i gram for å vise advarsel. Behov under denne grenseverdien vil ikke vises som et varsel.</string>
<string name="dexcomg5_xdripupload_title">Send BS data til xDrip+</string>
<string name="dexcomg5_xdripupload_summary">I xDrip+ velg 640G/Eversens som datakilde</string>
<string name="dexcomg5_xdripupload_title">Send BS-data til xDrip+</string>
<string name="dexcomg5_xdripupload_summary">I xDrip+, velg 640G/Eversens som datakilde</string>
<string name="nsclientbg">NSClient BS</string>
<string name="nsclientbgshort">NS BS</string>
<string name="overview_editquickwizard_usebg">BS beregning</string>
<string name="overview_editquickwizard_usebolusiob">Bolus IOB beregning</string>
<string name="overview_editquickwizard_usebasaliob">Basal IOB beregning</string>
<string name="overview_editquickwizard_usetrend">Trend beregning</string>
<string name="overview_editquickwizard_usesuperbolus">Superbolus beregning</string>
<string name="overview_editquickwizard_usebg">BS-beregning</string>
<string name="overview_editquickwizard_usebolusiob">Bolus IOB-beregning</string>
<string name="overview_editquickwizard_usebasaliob">Basal IOB-beregning</string>
<string name="overview_editquickwizard_usetrend">Trendberegning</string>
<string name="overview_editquickwizard_usesuperbolus">Superbolus-beregning</string>
<string name="positiveonly">Bare positive</string>
<string name="negativeonly">Bare negative</string>
<string name="overview_editquickwizard_usecob">COB beregning</string>
<string name="overview_editquickwizard_usetemptarget">Temp target beregning</string>
<string name="overview_editquickwizard_usepercentage">Prosent beregning</string>
<string name="overview_editquickwizard_usecob">COB-beregning</string>
<string name="overview_editquickwizard_usetemptarget">Beregning av temp target</string>
<string name="overview_editquickwizard_usepercentage">Prosentvis beregning</string>
<string name="loopenabled">Loop er aktivert</string>
<string name="apsselected">APS valgt</string>
<string name="nsclienthaswritepermission">NSClient har skrive rettigheter</string>
<string name="nsclienthaswritepermission">NSClient har skriverettigheter</string>
<string name="closedmodeenabled">Lukket loop aktivert</string>
<string name="maxiobset">Maks IOB er angitt riktig</string>
<string name="hasbgdata">BS tilgjengelig fra valgt kilde</string>
<string name="extendedbolusdeliveryerror">Forlenget bolus feilet</string>
<string name="enablesmbalways">Aktiverer alltid SMB</string>
<string name="enablesmbalways">Aktiver alltid SMB</string>
<string name="enablesmbalways_summary">Aktiver alltid SMB uavhengig av boluser. Bare mulig med en bra filtrert BS kilde som f.eks. Dexcom G5/G6</string>
<string name="enablesmbaftercarbs">Aktiver SMB etter karbohydrater</string>
<string name="enablesmbaftercarbs_summary">Aktiver SMB i 6t etter karbohydrat inntak, selv med 0 IOB. Bare mulig med en bra filtrert BS kilde som f. eks. Dexcom G5/G6</string>
<string name="enablesmbaftercarbs_summary">Aktiver SMB i 6t etter karbohydratinntak, selv med 0 IOB. Bare mulig med en bra filtrert BS kilde som f. eks. Dexcom G5/G6</string>
<string name="enablesmbwithcob">Aktiver SMB med COB</string>
<string name="enablesmbwithcob_summary">Aktiver SMB når COB er aktiv.</string>
<string name="enablesmbwithtemptarget">Aktiver SMB med temp målverdi</string>
@ -523,7 +524,7 @@
<string name="overview_insulin_label">Insulin</string>
<string name="overview_buttons_selection">Knapper</string>
<string name="show_calibration_button_summary">Sender en kalibrering til xDrip+ eller åpne kalibreringsdialogen i BYODA</string>
<string name="show_cgm_button_summary">Åpner xDrip+ eller BYODA, tilbake knappen får deg tilbake til AAPS</string>
<string name="show_cgm_button_summary">Åpner xDrip+ eller BYODA, tilbake-knappen får deg tilbake til AAPS</string>
<string name="carb_increment_button_message">Antall karbohydrater som skal legges til når knappen trykkes</string>
<string name="insulin_increment_button_message">Mengde insulin som skal legges til når knappen trykkes inn</string>
<string name="error_starting_cgm">Kunne ikke starte CGM-programmet. Kontroller at det er installert.</string>
@ -565,7 +566,7 @@
<string name="start_hypo_tt">Start Hypo TT</string>
<string name="closed_loop_disabled_on_dev_branch">Du kjører dev-versjonen. Lukket loop ikke aktivert.</string>
<string name="engineering_mode_enabled">Engineering Mode aktivert</string>
<string name="profileswitch_ismissing">Profil bytte mangler. Utfør et profil bytte og trykk på \"Aktiver profil\" i din lokale profil.</string>
<string name="profileswitch_ismissing">Profilbytte mangler. Utfør et profilbytte og trykk på \"Aktiver profil\" i din lokale profil.</string>
<string name="pumpisnottempbasalcapable">Pumpen støtter ikke temp basaler</string>
<string name="closedmodedisabledinpreferences">Lukket Loop deaktivert i innstillinger</string>
<string name="autosensdisabledinpreferences">Autosens deaktivert i innstillinger</string>
@ -592,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Denne verdien kalles Maks IOB av OpenAPS\nOpenAPS vil ikke gi mere insulin hvis mengden insulin ombord (IOB) overstiger denne verdien</string>
<string name="absorption_cutoff_title">Maks absorpsjonstid for måltid [h]</string>
<string name="absorption_cutoff_summary">Etter denne tiden forventes det at måltidet er absorbert. Eventuelle gjenværende karbo vil tas ut av beregninger.</string>
<string name="treatmentssafety_lgsThreshold_summary">BS er under terskelverdi slik at all insulintilførsel stoppes. Mulighet for bruker å definere verdier mellom 3.3mmol/l (60mg/dl) og 5.5mmol/l (100mg/dl). Verdier under 3.6/65 bruker standard målverdier</string>
<string name="overview_show_notes_field_in_dialogs_title">Vis merknadsfelt i dialogvindu for Behandlinger</string>
<string name="next_button">Neste</string>
<string name="previous_button">Forrige</string>
@ -643,7 +645,6 @@
<string name="needsystemwindowpermission">App trenger tillatelse til å bruke Varslinger for å vise meldinger</string>
<string name="needlocationpermission">App trenger tilgang til Posisjon for å søke etter Bluetooth og Wifi enheter</string>
<string name="needstoragepermission">App trenger tilgang til Lagring for lagre logg filer og eksportere innstillinger</string>
<string name="needconnectpermission">Appen trenger bluetooth tillatelse</string>
<string name="request">Forespørsel</string>
<string name="open_navigation">Åpne meny</string>
<string name="close_navigation">Lukk meny</string>
@ -968,7 +969,7 @@
<string name="wear_action_tempt_max_bg_error">Maks-BS utenfor område!</string>
<string name="wear_action_tempt_manual_range_message">Temp target:\nMin: %1$s\nMaks: %2$s\nVarighet: %3$s</string>
<string name="wear_action_tempt_manual_message">TempTarget:\nMål: %1$s\nVarighet: %2$s</string>
<string name="wear_action_tempt_preset_message">TempTarget:\nMin: %1$s\nMål: %2$s\nVarighet: %3$s</string>
<string name="wear_action_tempt_preset_message">TempTarget:\nÅrsak: %1$s\nMål: %2$s\nVarighet: %3$s</string>
<string name="quick_wizard_message">QuickWizard: %1$s\ninsulin: %2$.2fE\nKarbo: %3$dg</string>
<string name="wizard_result">Kalk. Wizard:\nInsulin: %1$.2fE\nKarbo: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Vis oppføring på enhet:</string>
@ -998,7 +999,7 @@
<string name="refresh_from_nightscout">Oppdater fra Nightscout</string>
<string name="remove_selected_items">Fjern valgte elementer</string>
<string name="select_for_removal">Velg hva som skal fjernes</string>
<string name="profile_changes">Profil endringer</string>
<string name="profile_changes">Profilendringer</string>
<string name="tempt_targets">Temp Target</string>
<string name="carbs_and_bolus">Karbohydrater og bolus</string>
<string name="confirm_remove_multiple_items">Er du sikker på at du vil fjerne %1$d elementer</string>
@ -1035,10 +1036,13 @@
<string name="a11y_only_on_watch">kun på klokke</string>
<string name="a11y_only_on_phone">kun på telefon</string>
<string name="a11y_drag_and_drop_handle">dra og slipp håndtering</string>
<string name="search">Søk</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Motta BS verdier fra GlucoRx Aidex CGM.</string>
<string name="blocked_by_charging">Blokkert på grunn av ladealternativer</string>
<string name="blocked_by_connectivity">Blokkert på grunn av tilkoblingsalternativer</string>
<string name="no_watch_connected">(Ingen klokke tilkoblet)</string>
<string name="error_asking_for_permissions">Feil under spørring etter tillatelser</string>
</resources>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Podaj obliczoną dawkę „pominiętej” insuliny za pomocą strzykawki / wstrzykiwacza lub za pomocą pompy funkcji wypełnienia.</string>
<string name="wronginsulin_donothing">Nie rób nic i pozwól AndroidAPS na skorygowanie każdego uzyskanego wysokiego stężenia glukozy we krwi.</string>
<string name="iob_label">Aktywna insulina (IOB)</string>
<string name="iob_which">Sprawdź/Zaznacz wszystkie prawidłowe odpowiedzi.</string>
<string name="iob_value">Na wartość IOB mają wpływ wykonane tymczasowe dawki bazowe.</string>
<string name="iob_hightemp">Wysoka tymczasowa dawka bazowa nie zostanie podana, gdy twóje poziom cukru we krwi jest poniżej poziomu docelowego.</string>
<string name="iob_negiob">Negatywne IOB utrzymujące się przez znaczny okres czasu bez wysiłku fizycznego sugeruje, że Twój profil jest zbyt silny i mniej insuliny jest wymagane w Twoich ustawieniach.</string>

View file

@ -244,6 +244,7 @@
<string name="wear">Oprogramowanie Wear (Smartwatch)</string>
<string name="resend_all_data">Prześlij ponownie wszystkie dane</string>
<string name="open_settings_on_wear">Otwórz ustawienia dla Wear</string>
<string name="basal_rate">Dawka bazowa</string>
<string name="basalvaluebelowminimum">Wartość bazy poniżej minimum. Nie ustawiono profilu!</string>
<string name="sms_actualbg">BG:</string>
<string name="sms_lastbg">Ostatnia BG:</string>
@ -631,7 +632,6 @@
<string name="needsystemwindowpermission">Aplikacja wymaga uprawnienia systemowego okna dla powiadomień</string>
<string name="needlocationpermission">Aplikacja wymaga dostępu do lokalizacji dla zarządzania bluetoothem i identyfikacją Wi-Fi</string>
<string name="needstoragepermission">Aplikacja wymaga zgody na zapis do pamięci, aby móc przechować pliki logów i eksportować ustawienia</string>
<string name="needconnectpermission">Aplikacja wymaga uprawnienia Bluetooth</string>
<string name="request">Żądanie</string>
<string name="open_navigation">Otwórz menu</string>
<string name="close_navigation">Zamknij menu</string>
@ -667,6 +667,7 @@
<string name="error_adding_treatment_message">Leczenie (insulina: %1$.2f, węglowodany: %2$d, czas:%3$s) nie mogą być dodane. Sprawdź i dodaj ręcznie rekord w razie potrzeby.</string>
<string name="generated_ecarbs_note">eWęgle: %1$d g (%2$d h), Opóźnienie: %3$d m</string>
<string name="openaps_noasdata">Brak dostępnych danych autosens</string>
<string name="log_files">Log files</string>
<string name="nav_logsettings">Ustawienia logów</string>
<string name="resettodefaults">Przywróć ustawienia domyślne</string>
<string name="nsmalfunction">Usterka NSClient. Spróbuj zrestartować NS i NSClient.</string>
@ -748,6 +749,8 @@
<string name="profilenamecontainsdot">Nazwa profilu zawiera kropki.\nTo nie jest obsługiwane przez NS.\nProfil nie zostanie przesyłany do NS.</string>
<string name="low_mark_comment">Dolna wartość zakresu docelowego (tylko do wyświetlania)</string>
<string name="high_mark_comment">Górna wartość zakresu docelowego (tylko do wyświetlania)</string>
<string name="age">Czas</string>
<string name="weight_label">Waga</string>
<string name="id">ID:</string>
<string name="submit">Wyślij</string>
<string name="mostcommonprofile">Najczęściej używany profil:</string>
@ -797,6 +800,7 @@
<string name="smscommunicator_otp_install_info">Na każdym telefonie śledzącym zainstalować aplikację uwierzytelniania obsługującą tokeny TOTP RFC 6238 Popularne darmowe aplikacje:\n • Authy\n • Google Authenticator\n • LastPass Authenticator\n • FreeOTP Authenticator</string>
<string name="smscommunicator_otp_reset_warning">Resetowanie uwierzytelniania powoduje, że wszystkie już ustawione uwierzytelnienia stają się niepoprawne (przestają działać). Trzeba będzie je jeszcze raz skonfigurować!</string>
<string name="overview_show_predictions">Prognozy poziomu</string>
<string name="overview_show_treatments">Zabiegi</string>
<string name="overview_show_deviationslope">Krzywa odchylenie</string>
<string name="authorizationfailed">Autoryzacja nie powiodła się</string>
<string name="overview_show_absinsulin">Cała insulina</string>
@ -896,6 +900,7 @@
<!-- WEAR OS-->
<string name="remove_selected_items">Usuń wybrane pozycje</string>
<string name="confirm_remove_multiple_items">Czy na pewno chcesz usunąć %1$d pozycji</string>
<string name="no_records_available">Brak wpisów</string>
<string name="count_selected">Wybrany %1$d</string>
<string name="sort_label">Sortuj</string>
<string name="login">Zaloguj się</string>

View file

@ -136,7 +136,6 @@
<string name="wronginsulin_prime">Dê uma porção do bolus calculado não administrado por meio de seringa/caneta ou usando o menu ações -> purgar/preencher.</string>
<string name="wronginsulin_donothing">Não faça nada e permita que o AndroidAPS corrija qualquer nível de glicose elevado resultante.</string>
<string name="iob_label">Insulina ativa (IA)</string>
<string name="iob_which">Marque todas as respostas corretas.</string>
<string name="iob_value">O valor de IA é afetado por basais temporárias efetuadas.</string>
<string name="iob_hightemp">Um basal alto temporário não será efetuado quando sua glicose estiver abaixo do alvo.</string>
<string name="iob_negiob">Insulina Ativa (IA) negativa por um período substancial na ausência de exercícios, sugere que seu perfil é muito agressivo e menos insulina deve ser considerada nas suas configurações.</string>

View file

@ -413,8 +413,6 @@
<string name="ns_localbroadcasts_title">Ativar partilha local.</string>
<string name="openapssmb">SMB OpenAPS</string>
<string name="openaps_smb_dynamic_isf">FSI Dinâmico</string>
<string name="DynISFAdjust_title">Fator de Ajuste FSI dinâmico %%</string>
<string name="DynISFAdjust_summary">Fator de ajuste para FSI dinâmico. Defina mais de 100%% para doses de correção mais agressivas e menos de 100%% para correções menos agressivas.</string>
<string name="enableuam">Ativar UAM</string>
<string name="enablesmb">Ativar SMB</string>
<string name="enablesmb_summary">Use Super Micro Boluses em vez de basal temp para uma ação mais rápida</string>
@ -554,7 +552,7 @@
<string name="smbnotallowedinopenloopmode">SMB não permitido no modo open loop</string>
<string name="food_short">Alimentos</string>
<string name="reset">repor</string>
<string name="openapssmb_maxiob_title">Máximo total IOS OpenAPS não pode superar [U]</string>
<string name="openapssmb_maxiob_title">Máximo total de IOB OpenAPS não pode superar [U]</string>
<string name="openapssmb_maxiob_summary">Este valor é chamado de Max IOB em contexto de OpenAPS\nOpenAPS não adicionará mais insulina se o IOB atual for maior que este valor</string>
<string name="absorption_cutoff_title">Tempo máx. absorção refeição [h]</string>
<string name="absorption_cutoff_summary">Hora em que qualquer refeição é considerada absorvida. Restantes hidratos de carbono serão cortados.</string>
@ -865,7 +863,6 @@
<string name="wear_action_tempt_max_bg_error">Glicemia maxima fora da meta!</string>
<string name="wear_action_tempt_manual_range_message">Alvo temporário:\nMin: %1$s\nMax: %2$s\nDuração: %3$s</string>
<string name="wear_action_tempt_manual_message">Alvo temporário:\nTarget: %1$s\nDuration: %2$s</string>
<string name="wear_action_tempt_preset_message">Alvo temporário:\Reason: %1$s\nTarget: %2$s\nDuration: %3$s</string>
<string name="quick_wizard_message">Assistente rápido: %1$s\nInsulin: %2$.2fU\nCarbs: %3$dg</string>
<string name="wizard_result">Calculadora:\nInsulin: %1$.2fU\nCarbs: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Mostrar entrada no dispositivo:</string>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Bólus uma proporção de insulina calculada \'não administrada\' ou com seringa/caneta ou purgando.</string>
<string name="wronginsulin_donothing">Faça nada e permita que o AndroidAPS corrija qualquer nível de glicose elevado que daí resulte.</string>
<string name="iob_label">Insulina ativa (IA )</string>
<string name="iob_which">Marque todas as respostas corretas.</string>
<string name="iob_value">O valor do IA é afectado por basais temporárias emitidas.</string>
<string name="iob_hightemp">Basal temporária alta não será dada quando a sua glicose estiver abaixo do alvo.</string>
<string name="iob_negiob">IA negativa por um período substancial na ausência de exercício, sugere que o seu perfil é muito alto e é necessária menos insulina nas suas configurações.</string>

View file

@ -631,7 +631,6 @@
<string name="needsystemwindowpermission">Aplicação precisa de permissão de janela do sistema para notificações</string>
<string name="needlocationpermission">Aplicação necessita de permissão de localização para pesquisa Bluetooth e identificação Wi-Fi</string>
<string name="needstoragepermission">A aplicação precisa da permissão de armazenamento para poder armazenar ficheiros de registo e exportar definições</string>
<string name="needconnectpermission">Aplicação precisa de permissão Bluetooth</string>
<string name="request">Pedido</string>
<string name="open_navigation">Abrir a navegação</string>
<string name="close_navigation">Fechar a navegação</string>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Bolusati o cantitate parțiala de insulina din insulina calculata ca fiind lipsa utilizând seringa/penul sau amorsarea.</string>
<string name="wronginsulin_donothing">Nu faceți nimic și permiteți AndroidAPS să corecteze valorile mari ale glicemiei.</string>
<string name="iob_label">Insulină activă (IOB)</string>
<string name="iob_which">Bifați toate răspunsurile corecte.</string>
<string name="iob_value">Valoarea IOB este afectată de bazalele temporare emise.</string>
<string name="iob_hightemp">Rata bazala ridicata temporara nu va fi livrata atunci când glicemia este sub nivelul țintă.</string>
<string name="iob_negiob">Un IOB negativ pentru o perioadă substanțială în absența exercițiilor fizice sugerează că profilul tău este prea puternic și este nevoie de mai puţină insulină în setările inițiale.</string>

View file

@ -631,7 +631,6 @@
<string name="needsystemwindowpermission">Aplicația are nevoie de permisiune la fereastra sistemului pentru a afișa notificări</string>
<string name="needlocationpermission">Aplicația are nevoie sa acceseze locația pentru scanare Bluetooth și identificare WiFi</string>
<string name="needstoragepermission">Aplicația are nevoie de permisiunea de a accesa unitatea de stocare pentru a scrie fișierele registru și pentru a exporta setările</string>
<string name="needconnectpermission">Aplicația are nevoie de permisiune Bluetooth</string>
<string name="request">Cerință</string>
<string name="open_navigation">Afișare navigație</string>
<string name="close_navigation">Închidere navigație</string>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Сравните значения в истории AndroidAPS и помпы (если помпа это поддерживает).</string>
<string name="wronginsulin_prime">Рассчитать и ввести «пропущенный» вами инсулин шприцем/ручкой или через кнопку заполнения канюли.</string>
<string name="wronginsulin_donothing">Ничего не делать и позволить AndroidAPS исправить возможный высокий уровень ГК.</string>
<string name="cob_label">Активные углеводы COB - углеводы в процессе компенсации</string>
<string name="cob_question">Как изменение значения ISF влияет на расчет COB?</string>
<string name="cob_longer">Увеличение фактора чувствительности ISF потребует больше времени на усвоение углеводов</string>
<string name="cob_shorter">Увеличение фактора чувствительности ISF потребует меньше времени на усвоение углеводов</string>
<string name="cob_no_effect">Увеличение фактора чувствительности ISF не повлияет на расчетное время усвоения углеводов</string>
<string name="cob2_question">Как изменение значения IC влияет на расчет COB?</string>
<string name="cob2_longer">Увеличение IC увеличит время усвоения углеводов</string>
<string name="cob2_shorter">Увеличение IC уменьшит время усвоения углеводов</string>
<string name="cob2_no_effect">Увеличение IC не повлияет на расчетное время усвоения углеводов</string>
<string name="cob3_question">Как изменение процента профиля влияет на расчет активных углеводов COB?</string>
<string name="cob3_longer">Установка профиля на 150% потребует больше времени на усвоение углеводов</string>
<string name="cob3_shorter">Установка профиля на 150% потребует меньше времени на усвоение углеводов</string>
<string name="cob3_no_effect">Установка профиля на 150% не повлияет на расчетное время усвоения углеводов</string>
<string name="iob_label">Активный инсулин (IOB)</string>
<string name="iob_which">Отметьте все правильные ответы.</string>
<string name="iob_value">На величину IOB влияют устанавливаемые ВБС.</string>
<string name="iob_hightemp">Высокая ВБС не будет применяться, если уровень сахара в крови ниже целевого.</string>
<string name="iob_negiob">Отрицательный IOB в течение длительного периода при отсутствии физнагрузки указывает на то, что ваш профиль завышен и требуется снизить кол-во инсулина в настройках.</string>

View file

@ -6,7 +6,7 @@
<string name="objectivenotstarted">Цель %1$d не начата</string>
<string name="objectivenotfinished">Цель %1$d не завершена</string>
<string name="objectives_0_objective">Настройка визуализации и мониторинга, анализ базала и коэффициентов</string>
<string name="objectives_0_gate">Убедитесь, что BG доступен в Nightscut, и данные инсулина помпы загружаются</string>
<string name="objectives_0_gate">Убедитесь, что значения ГК и данные по инсулину помпы передаются в Nightscout</string>
<string name="objectives_openloop_objective">Старт незамкнутого цикла</string>
<string name="objectives_openloop_gate">Начинайте работу в режиме незамкнутого цикла и ручной подстройки величины временного базала. Установите и применяйте временные цели и временные цели по умолчанию (напр. углеводы при нагрузке или купировании гипо)</string>
<string name="objectives_maxbasal_objective">Глубже понимаем незакольцованную систему Open Loop, включая ее рекомендации по временным базалам</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Безопасность терапии</string>
<string name="treatmentssafety_maxbolus_title">Макс разрешенный болюс [U] ед.</string>
<string name="treatmentssafety_maxcarbs_title">Макс разрешенные углеводы (г)</string>
<string name="treatmentssafety_lgsThreshold_title">Уровень ГК, ниже которого происходит остановка подачи инсулина</string>
<string name="nav_preferences_plugin">Настройки %1$s</string>
<string name="nav_preferences">Настройки</string>
<string name="nav_refreshtreatments">Синхронизировать назначения с NS</string>
@ -432,8 +433,8 @@
<string name="ns_localbroadcasts_title">Активировать локальную передачу</string>
<string name="openapssmb">Супер микро болюс OpenAPS</string>
<string name="openaps_smb_dynamic_isf">Динамический ISF</string>
<string name="DynISFAdjust_title">Коэффициент регулировки динамического диапазона чувствительности ISF %%</string>
<string name="DynISFAdjust_summary">Коэффициент корректировки динамического диапазона чувствительности ISF. Установите более 100%% для более агрессивных доз коррекции и менее 100%% для менее агрессивной коррекции.</string>
<string name="DynISFAdjust_title" formatted="false">Коэффициент регулировки динамического диапазона чувствительности ISF %</string>
<string name="DynISFAdjust_summary" formatted="false">Коэффициент корректировки динамического диапазона чувствительности ISF. Установите более 100% для агрессивных доз коррекции и менее 100% для менее агрессивной коррекции.</string>
<string name="enableuam">Включить непредвиденный прием пищи UAM</string>
<string name="enablesmb">Включить супер микро болюс SMB</string>
<string name="enablesmb_summary">Для ускорения действия используйте супер микро болюсы SMB вместо временного базала</string>
@ -592,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Эта величина называется Max IOB в OpenAPS context\nOpenAPS не будет добавлять инсулин если текущий активный инсулин ее превысит</string>
<string name="absorption_cutoff_title">Максимальное время усваимости пищи [h]</string>
<string name="absorption_cutoff_summary">Время, за которое любая еда считается усвоившейся. Оставшиеся углеводы не будут учтены.</string>
<string name="treatmentssafety_lgsThreshold_summary">Значение уровня ГК, на котором происходит приостановка подачи инсулина. Значения по умолчанию являются стандартными для целевого диапазона. Пользователь может установить значения между 60 мг/дл (3.3 ммоль/л) и 100 мг/дл (5.5 ммоль/л) Параметры, заданные ниже 65/3.6 приводят к использованию значений по умолчанию</string>
<string name="overview_show_notes_field_in_dialogs_title">Показать поле примечаний в диалогах назначений</string>
<string name="next_button">Далее</string>
<string name="previous_button">Назад</string>
@ -643,7 +645,6 @@
<string name="needsystemwindowpermission">Приложению требуется разрешение системного окна для уведомлений</string>
<string name="needlocationpermission">Приложению требуется разрешение на доступ к местоположению для сканирования BT и идентификации WiFi</string>
<string name="needstoragepermission">Приложение требует разрешения на доступ к записи в память, чтобы хранить файлы журналов и настройки экспорта</string>
<string name="needconnectpermission">Приложению требуется разрешение Bluetooth</string>
<string name="request">Запрос</string>
<string name="open_navigation">Показать панель навигации</string>
<string name="close_navigation">рыть панель навигации</string>
@ -967,7 +968,7 @@
<string name="wear_action_tempt_max_bg_error">Макс ГК вне диапазона!</string>
<string name="wear_action_tempt_manual_range_message">ВремЦель:\nМин: %1$s\nМакс.: %2$s\nДлительность: %3$s</string>
<string name="wear_action_tempt_manual_message">ВремЦель:\nЦель: %1$s\nДлительность: %2$s</string>
<string name="wear_action_tempt_preset_message">ВремЦель:\Причина: %1$s\nЦель.: %2$s\nДлительность: %3$s</string>
<string name="wear_action_tempt_preset_message">ВремЦель:\nПричина: %1$s\nЦель.: %2$s\nДлительность: %3$s</string>
<string name="quick_wizard_message">Мастер: %1$s\nИнсулин: %2$.2fЕд\nУгл: %3$dg</string>
<string name="wizard_result">Мастер:\nИнсулин: %1$.2fЕд\nУгл: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Показать запись на устройстве:</string>
@ -1034,10 +1035,13 @@
<string name="a11y_only_on_watch">только на часах</string>
<string name="a11y_only_on_phone">только на телефоне</string>
<string name="a11y_drag_and_drop_handle">якорь перетягивания</string>
<string name="search">Поиск</string>
<!-- Aidex Cgms -->
<string name="aidex">Aidex GlucoRx</string>
<string name="aidex_short">Aidex </string>
<string name="description_source_aidex">Получить значения ГК от GlucoRx Aidex</string>
<string name="blocked_by_charging">Заблокировано опциями зарядки</string>
<string name="blocked_by_connectivity">Заблокировано настройками подключения</string>
<string name="no_watch_connected">(Часы не подключены)</string>
<string name="error_asking_for_permissions">Ошибка при запросе разрешения</string>
</resources>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Porovnaj hodnoty v AndroidAPS z históriou v tvojej pumpe (ak pumpa má túto funkciu).</string>
<string name="wronginsulin_prime">Pošlite bolus na vypočítaný „chýbajúci“ inzulín buď injekčnou striekačkou, alebo perom, alebo pomocou plnenia na pumpe.</string>
<string name="wronginsulin_donothing">Nerobte nič a dovoľte AndroidAPS upraviť akúkoľvek výslednú vysokú hladinu glukózy v krvi.</string>
<string name="cob_label">Aktívne sacharidy (COB)</string>
<string name="cob_question">Ako ovplyvňuje zmena hodnoty citlivosti výpočet COB?</string>
<string name="cob_longer">Zvýšenie hodnoty citlivosti predĺži dobu absorbcie sacharidov</string>
<string name="cob_shorter">Zvýšenie hodnoty citlivosti skráti dobu absorbcie sacharidov</string>
<string name="cob_no_effect">Zvýšenie citlivosti neovplyvní vypočítanú absorbciu sacharidov</string>
<string name="cob2_question">Ako ovplyvňuje zmena inzulíno-sacharidového pomeru výpočet COB?</string>
<string name="cob2_longer">Zvýšenie hodnoty inzulíno-sacharidového pomeru predĺži dobu absorbcie sacharidov</string>
<string name="cob2_shorter">Zvýšenie hodnoty inzulíno-sacharidového pomeru skráti dobu absorbcie sacharidov</string>
<string name="cob2_no_effect">Zvýšenie inzulíno-sacharidového pomeru neovplyvní vypočítanú absorbciu sacharidov</string>
<string name="cob3_question">Ako ovplyvňuje percentuálna zmena profilu výpočet COB?</string>
<string name="cob3_longer">Nastavením profilu na 150 % dôjde k predĺženiu doby absorbcie sacharidov</string>
<string name="cob3_shorter">Nastavením profilu na 150 % dôjde ku skráteniu doby absorbcie sacharidov</string>
<string name="cob3_no_effect">Nastavenie profilu na 150% neovplyvní vypočítanú absorbciu sacharidov</string>
<string name="iob_label">Aktívny inzulín (IOB)</string>
<string name="iob_which">Zaškrtnite všetky správne odpovede.</string>
<string name="iob_value">Hodnota IOB je ovplyvnená vydanými dočasnými bazálmi.</string>
<string name="iob_hightemp">Vysoký dočasný bazál nebude spustený, pokiaľ je Vaša glykémia nižšia, ako cieľ.</string>
<string name="iob_negiob">Negatívne IOB po značnú dobu bez cvičenia naznačuje, že váš profil je príliš \"silný\" a vo vašom profile je potrebného menej inzulínu.</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Bezpečnosť zadania ošetrenia</string>
<string name="treatmentssafety_maxbolus_title">Maximálny povolený bolus [JI]</string>
<string name="treatmentssafety_maxcarbs_title">Maximálne povolené množstvo sacharidov [g]</string>
<string name="treatmentssafety_lgsThreshold_title">Hodnota glykémie, pri ktorej sa aktivuje LGS</string>
<string name="nav_preferences_plugin">Nastavenie pluginu %1$s</string>
<string name="nav_preferences">Nastavenia</string>
<string name="nav_refreshtreatments">Obnoviť ošetrenia z NS</string>
@ -432,8 +433,8 @@
<string name="ns_localbroadcasts_title">Povoliť lokálne vysielanie.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamická ISF</string>
<string name="DynISFAdjust_title">Korekčný faktor pre Dynamickú ISF v %%</string>
<string name="DynISFAdjust_summary">Korekčný faktor pre dynamickú ISF. Pre agresivnejšie korekčné dávky nastavte hodnoty väčšie ako 100%% a pre menej agresivne korekcie menšie než 100%%.</string>
<string name="DynISFAdjust_title" formatted="false">Korekčný faktor pre Dynamickú ISF v %</string>
<string name="DynISFAdjust_summary" formatted="false">Korekčný faktor pre dynamickú ISF. Pre agresivnejšie korekčné dávky nastavte hodnoty väčšie ako 100%, pre menej agresívne korekcie, menšie než 100%.</string>
<string name="enableuam">Povoliť UAM</string>
<string name="enablesmb">Povoliť SMB</string>
<string name="enablesmb_summary">Použiť Super Mikro Bolusy namiesto dočasných bazálov, pre zrýchleniu účinku</string>
@ -592,6 +593,7 @@
<string name="openapssmb_maxiob_summary">Táto hodnota je v kontexte OpenAPS nazývaná Max IOB.\nOpenAPS nikdy nepridá inzulín, pokiaľ je súčasné IOB väčšie, ako táto hodnota</string>
<string name="absorption_cutoff_title">Maximálna doba vstrebávania sacharidov [h]</string>
<string name="absorption_cutoff_summary">Doba, po ktorej sú všetky sacharidy považované za vstrebané. Zvyšné budú orezané.</string>
<string name="treatmentssafety_lgsThreshold_summary">Hodnota glykémie, pri ktorej bude podávanie inzulínu zastavené. Východzia hodnota využíva štandardný cieľový model. Užívateľ môže nastaviť hodnoty od 3,3 mmol/l do 5,5 mmol/l. Pri hodnotách pod 3,6 mmol/l se použije východzí model.</string>
<string name="overview_show_notes_field_in_dialogs_title">Zobrazovať kolónku poznámky v dialógoch ošetrení</string>
<string name="next_button">Ďalšia</string>
<string name="previous_button">Späť</string>
@ -643,7 +645,6 @@
<string name="needsystemwindowpermission">Aplikácia vyžaduje pre oznámenia systémové oprávnenie</string>
<string name="needlocationpermission">Aplikácia vyžaduje oprávnenie polohy, pre vyhľadávanie BT a identifikáciu WiFi</string>
<string name="needstoragepermission">Aby bolo možné nahrávať logy a exportovať nastavenia, je nutné pre aplikáciu povoliť oprávnenie prístupu k úložisku</string>
<string name="needconnectpermission">Aplikácia vyžaduje povolenie bluetooth</string>
<string name="request">Požiadavka</string>
<string name="open_navigation">Otvoriť Menu</string>
<string name="close_navigation">Zavrieť Menu</string>
@ -1035,10 +1036,12 @@
<string name="a11y_only_on_watch">iba na hodinkách</string>
<string name="a11y_only_on_phone">iba na telefóne</string>
<string name="a11y_drag_and_drop_handle">úchop potiahni a pusť</string>
<string name="search">Hľadať</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Prijímať hodnoty glykémie zo senzora GlucoRx Aidex.</string>
<string name="blocked_by_charging">Zablokované možnosti nabíjania</string>
<string name="blocked_by_connectivity">Zablokované možnosti pripojenia</string>
<string name="no_watch_connected">(Žiadne hodinky nie sú pripojené)</string>
</resources>

View file

@ -134,7 +134,6 @@
<string name="wronginsulin_prime">Ge en bolus med en del av det insulin du saknar antingen med penna eller genom att använda förfyllningsfunktionen.</string>
<string name="wronginsulin_donothing">Gör ingenting och låt AndroidAPS korrigera eventuella höga blodglukosnivåer.</string>
<string name="iob_label">Aktivt Insulin (IOB)</string>
<string name="iob_which">Markera ett eller flera alternativ.</string>
<string name="iob_value">IOB-värdet påverkas av temp basaler.</string>
<string name="iob_hightemp">Hög temp basal kommer inte att ges när ditt BG-värde är under målet.</string>
<string name="iob_negiob">Negativ IOB under en längre period även om du inte motionerat, tyder på att din profil ger för mycket insulin.</string>

View file

@ -636,7 +636,6 @@ Eversense-appen.</string>
<string name="needsystemwindowpermission">Applikationen behöver förhöjd behörighet för aviseringar</string>
<string name="needlocationpermission">Appen behöver platsåtkomst för bluetooth- och WiFi-identifiering</string>
<string name="needstoragepermission">Applikationen behöver lagringsbehörighet för att kunna lagra loggfiler och exportinställningar</string>
<string name="needconnectpermission">Applikationen behöver bluetooth-behörighet</string>
<string name="request">Begäran</string>
<string name="open_navigation">Öppna menyn</string>
<string name="close_navigation">Stäng menyn</string>
@ -941,7 +940,6 @@ Eversense-appen.</string>
<string name="wear_action_tempt_max_bg_error">Ogiltigt maximum BG!</string>
<string name="wear_action_tempt_manual_range_message">Temp-mål:\nMin: %1$s\nMax: %2$s\nVaraktighet: %3$s</string>
<string name="wear_action_tempt_manual_message">Temp-mål:\nMål: %1$s\nDuration: %2$s</string>
<string name="wear_action_tempt_preset_message">Temp-mål:\Orsak: %1$s\nMål: %2$s\nVaraktighet: %3$s</string>
<string name="quick_wizard_message">Snabbsteg: %1$s\nInsulin: %2$.2fU\nKolhydrater: %3$dg</string>
<string name="wizard_result">Kalkylator:\nInsulin: %1$.2fU\nKolhydrater: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Visa post på enhet:</string>

View file

@ -136,16 +136,28 @@
<string name="wronginsulin_compare">AndroidAPS ve pompa geçmişindeki değerleri karşılaştırın (pompa bunu destekliyorsa).</string>
<string name="wronginsulin_prime">Şırınga/kalem veya başlatma kullanarak hesaplanan \"eksik\" insülininizi bolus olarak karşılayın.</string>
<string name="wronginsulin_donothing">Hiçbir şey yapmayın ve AndroidAPS\'in ortaya çıkabilecek yüksek kan şekeri seviyesini düzeltmesine müsade edin.</string>
<string name="iob_label">Aktif İnsülin (IOB)</string>
<string name="iob_which">Tüm doğru cevapları kontrol edin.</string>
<string name="iob_value">IOB değeri, verilen geçici bazallardan etkilenir.</string>
<string name="cob_label">Aktif Karbonhidrat (AKRB)</string>
<string name="cob_question">İDF değerinin değiştirilmesi AKRB (Aktif karbonhidrat) hesaplamasını nasıl etkiler?</string>
<string name="cob_longer">Artan İDF, karbonhidratların daha uzun süre emilmesini sağlayacaktır</string>
<string name="cob_shorter">Artan İDF, karbonhidratların daha kısa sürede emilmesini sağlayacaktır</string>
<string name="cob_no_effect">Artan İDF, hesaplanan karbonhidrat emilimini etkilemez</string>
<string name="cob2_question">Değişen Kİ değeri AKRB hesaplamasını nasıl etkiler?</string>
<string name="cob2_longer">Artan Kİ oranı, karbonhidratların daha uzun sürede emilmesini sağlar</string>
<string name="cob2_shorter">Artan Kİ, karbonhidratların daha kısa sürede emilmesini sağlayacaktır</string>
<string name="cob2_no_effect">Artan Kİ oranı, hesaplanan karbonhidrat emilimini etkilemez</string>
<string name="cob3_question">Değişen profil yüzdesi AKRB hesaplamasını nasıl etkiler?</string>
<string name="cob3_longer">Profili %150\'ye ayarlamak karbonhidratların daha uzun sürede emilmesini sağlar</string>
<string name="cob3_shorter">Profili %150\'ye ayarlamak karbonhidratların daha kısa sürede emilmesini sağlar</string>
<string name="cob3_no_effect">Profili %150\'ye ayarlamak hesaplanan karbonhidrat emilimini etkilemez</string>
<string name="iob_label">Aktif İnsülin (AİNS)</string>
<string name="iob_value">AİNS değeri, verilen geçici bazallardan etkilenir.</string>
<string name="iob_hightemp">Kan şekeriniz hedefin altına düştüğünde yüksek geçici bazal verilmeyecektir.</string>
<string name="iob_negiob">Egzersiz yapmadığınız halde uzun bir dönem için negatif IOB, profilinizin çok güçlü olduğunu ve ayarlarınızda daha az insüline ihtiyaç duyulduğunu gösterir.</string>
<string name="iob_negiob">Egzersiz yapmadığınız halde uzun bir dönem için negatif AİNS, profilinizin çok güçlü olduğunu ve ayarlarınızda daha az insüline ihtiyaç duyulduğunu gösterir.</string>
<string name="iob_posiob">Önemli bir süre için pozitif IOB, insülin direncini veya habersiz öğünleri gösterir.</string>
<string name="breadgrams_label">Karbonhidrat girişi ve boluslar</string>
<string name="breadgrams_grams">Tüketilen karbonhidratları tahmin etmek ve kaydetmek için sadece gram kullanılmalıdır.</string>
<string name="breadgrams_exchange">Tüketilen karbonhidratlar uygun bir değişim sistemi kullanılarak kaydedilebilir (örn. DAFNE \"CHO\" değişimleri veya Avrupa \"Ekmek Birimleri\").</string>
<string name="breadgrams_decay">AndroidAPS, karbonhidrat \"çözünmesini\" tahmin etmek ve COB\'ı hesaplamak için dinamik bir model kullanır.</string>
<string name="breadgrams_decay">AndroidAPS, karbonhidrat \"çözünmesini\" tahmin etmek ve AKRB\'ı hesaplamak için dinamik bir model kullanır.</string>
<string name="breadgrams_calc">Kan şekeri seviyeleri kabul edilebilir değerlerin dışındaysa (çok düşük veya çok yüksek), karbonhidrat veya insülin düzeltmeleri için öneriler sağlamak için bolus hesaplayıcı kullanılabilir.</string>
<string name="breadgrams_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u</string>
<string name="extendedcarbs_label">yayma-karbonhidratlar</string>
@ -158,11 +170,11 @@
<string name="nsclient_label">Uzaktan İzleme</string>
<string name="nsclient_howcanyou">AndroidAPS\'i (örneğin çocuğunuz için) uzaktan nasıl izleyebilirsiniz?</string>
<string name="nsclient_nightscout">NS Client uygulaması, Nightscout uygulaması ve Nightscout web sayfasının tümü, AndroidAPS\'i uzaktan takip etmenize olanak tanır.</string>
<string name="nsclient_dexcomfollow">Diğer uygulamalar (ör. Dexcom takip, xDrip) bazı parametreleri (ör. kan şekeri/sensör değerleri) uzaktan takip etmenize izin verir, ancak farklı algoritma kullanımı, hatalı IOB veya COB değerlerine sebep olabilir.</string>
<string name="nsclient_dexcomfollow">Diğer uygulamalar (ör. Dexcom takip, xDrip) bazı parametreleri (ör. kan şekeri/sensör değerleri) uzaktan takip etmenize izin verir, ancak farklı algoritma kullanımı, hatalı AİNS veya AKRB değerlerine sebep olabilir.</string>
<string name="nsclient_data">AndroidAPS\'yi uzaktan takip etmek için her iki cihazın da internet erişimine sahip olması gerekir (ör. Wi-Fi veya mobil/hücresel ağ verileri aracılığıyla).</string>
<string name="nsclient_fullcontrol">Uzak takipçi olarak kullanılan NS İstemcisi, AndroidAPS\'i hem izleyecek hem de tam kontrol sağlayacaktır.</string>
<string name="nsclient_hint1">https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html</string>
<string name="isf_label_exam">İnsülin Duyarlılık Faktörü (ISF)</string>
<string name="isf_label_exam">İnsülin Duyarlılık Faktörü (İDF)</string>
<string name="isf_increasingvalue">ISF değerlerini yükseltmek, belirli bir karbonhidrat miktarını karşılamak için daha fazla insülin verilmesine yol açacaktır.</string>
<string name="isf_decreasingvalue">ISF değerinin düşürülmesi, hedeflenen kan şekerinin üzerinde bir düzeltme için daha fazla insülin verilmesine yol açar.</string>
<string name="isf_noeffect">Kan şekeri seviyeleri hedefin altında olduğunda ISF\'yi yükseltmenin veya düşürmenin insülin iletimi üzerinde hiçbir etkisi yoktur.</string>
@ -175,7 +187,7 @@
<string name="ic_label_exam">Karbonhidrat insülin Oranı (I:C oranı)</string>
<string name="ic_increasingvalue">Daha yüksek I:C oranları, belirli bir miktarda karbonhidrat için daha az insülin verilmesine yol açar.</string>
<string name="ic_decreasingvalue">Daha düşük I:C oranları, belirli bir miktarda karbonhidrat için daha az insülin verilmesine yol açar.</string>
<string name="ic_noeffect">0 COB\'niz varsa, IC oranını değiştirmek, belirli bir KŞ değerini düzeltmek için farklı insülin miktarına sebep olur.</string>
<string name="ic_noeffect">0 AKRB varsa, Kİ oranını değiştirmek, belirli bir KŞ değerini düzeltmek için farklı insülin miktarına sebep olur.</string>
<string name="ic_different">Ekmek (değişim) birimini 10g veya 12g olarak sayarsanız IC farklı olacaktır.</string>
<string name="ic_meaning">IC anlamı şudur: 1Ü insülin kaç ekmek birimi (değişim) kapsar.</string>
<string name="ic_hint1">https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u</string>

View file

@ -11,7 +11,7 @@
<string name="objectives_openloop_gate">Birkaç gün boyunca Açık Döngü modunda çalıştırın ve birçok geçici bazalı el yordamı ile girin. Geçici ve varsayılan geçici hedefleri düzenleyin ve kullanın (örn. egzersiz ve hipo-tedaviyi desteklemek için)</string>
<string name="objectives_maxbasal_objective">Geçici bazal tavsiyeleri de dahil olmak üzere Açık Döngüyü anlamak</string>
<string name="objectives_maxbasal_gate">Bu deneyime dayanarak, max bazalın ne olması gerektiğine karar vermeli ve bunu pompa ve tercihlere koymalısınız</string>
<string name="objectives_maxiobzero_objective">Kapalı Döngü, (LGS) Düşük Glikoz Süspansiyonu modunda başlatılıyor</string>
<string name="objectives_maxiobzero_objective">Kapalı Döngü, (LGS) Düşük Glikoz Duraklatma modunda başlatılıyor</string>
<string name="objectives_maxiobzero_gate">Kapalı Döngüyü, maks IOB = 0 olacak şekilde çok sayıda LGS (düşük KŞ) olmadan birkaç gün boyunca deneyin</string>
<string name="objectives_maxiob_objective">Kapalı Döngü\'de ince ayarlar, maks (IOB) Aktif İnsülini 0\'ın üzerine yükseltme ve yavaş yavaş KŞ hedeflerini aşağıya çekme</string>
<string name="objectives_maxiob_gate">KŞ hedefini azaltmadan önce birkaç gün ve en az bir gece düşük KŞ (Hipo) alarmı olmadan deneyin</string>

View file

@ -6,6 +6,7 @@
<string name="treatmentssafety_title">Tedavi güvenliği</string>
<string name="treatmentssafety_maxbolus_title">Maks izin verilen bolus [U]</string>
<string name="treatmentssafety_maxcarbs_title">Maks izin verilen karbonhidrat [g]</string>
<string name="treatmentssafety_lgsThreshold_title">KŞ seviyesi altında düşük glikoz duraklatma meydana gelir</string>
<string name="nav_preferences_plugin">%1$s Tercihler</string>
<string name="nav_preferences">Tercihler</string>
<string name="nav_refreshtreatments">NS\'tan tedavileri güncelle</string>
@ -44,27 +45,27 @@
<string name="description_sms_communicator">SMS komutlarını kullanarak uzaktan AndroidAPS kontrolü.</string>
<string name="treatments_insulin_label_string">İnsülin:</string>
<string name="treatments_carbs_label_string">Karbonhidrat:</string>
<string name="treatments_iob_label_string">IOB:</string>
<string name="sms_iob">IOB:</string>
<string name="treatments_iobtotal_label_string">Toplam IOB:</string>
<string name="treatments_iobactivitytotal_label_string">Toplam IOB etkinliği:</string>
<string name="treatments_iob_label_string">AİNS:</string>
<string name="sms_iob">AİNS:</string>
<string name="treatments_iobtotal_label_string">Toplam AİNS:</string>
<string name="treatments_iobactivitytotal_label_string">Toplam AİNS etkinliği:</string>
<string name="tempbasals_realduration_label_string">Süre:</string>
<string name="tempbasals_netratio_label_string">Oran:</string>
<string name="tempbasals_netinsulin_label_string">İns:</string>
<string name="tempbasals_iob_label_string">IOB:</string>
<string name="tempbasals_iobtotal_label_string">Toplam IOB:</string>
<string name="tempbasals_iob_label_string">AİNS:</string>
<string name="tempbasals_iobtotal_label_string">Toplam AİNS:</string>
<string name="treatments_wizard_bg_label"></string>
<string name="treatments_wizard_tt_label">GH</string>
<string name="treatments_wizard_carbs_label">Karbonhidrat</string>
<string name="treatments_wizard_correction_label">Düzeltme</string>
<string name="bolus_iob_label">Bolus IOB</string>
<string name="bolus_iob_label">Bolus AİNS</string>
<string name="openapsma_run">Şimdi Çalıştır</string>
<string name="vitualpump_label">SANAL POMPA</string>
<string name="openapsma_lastrun_label">Son Çalıştırma</string>
<string name="openapsma_inputparameters_label">Girdi Parametreleri</string>
<string name="openapsma_glucosestatus_label">Glikoz durumu</string>
<string name="openapsma_currenttemp_label">Mevcut Geçici Bazal</string>
<string name="openapsma_iobdata_label">IOB Verisi</string>
<string name="openapsma_iobdata_label">AİNS Verisi</string>
<string name="openapsma_profile_label">Profil</string>
<string name="openapsma_mealdata_label">Yemek Verisi</string>
<string name="result">Sonuç</string>
@ -110,12 +111,12 @@
<string name="apsmode_title">APS modu</string>
<string name="closedloop">Kapalı Döngü</string>
<string name="openloop">ık Döngü</string>
<string name="lowglucosesuspend">Düşük Glikoz Süspansiyonu</string>
<string name="lowglucosesuspend">Düşük Glikoz Duraklatma (LGS)</string>
<string name="disabledloop">Döngü devre dışı</string>
<string name="openloop_newsuggestion">Yeni öneri mevcut</string>
<string name="carbssuggestion">Karbonhidrat Önerisi</string>
<string name="unsupportednsversion">Nightscout\'un desteklenmeyen sürümü</string>
<string name="treatments_wizard_basaliob_label">Bazal IOB</string>
<string name="treatments_wizard_basaliob_label">Bazal AİNS</string>
<string name="bolusconstraintapplied">Bolus kısıtlaması uygulandı</string>
<string name="carbsconstraintapplied">Karbonhidrat kısıtlaması uygulandı</string>
<string name="careportal_newnstreatment_other">Diğer</string>
@ -139,8 +140,8 @@
<string name="nav_import">İçe aktarma ayarları</string>
<string name="openapsma_maxbasal_title">Maks Ü/s geçici Bazal ayarlanabilir</string>
<string name="openapsma_maxbasal_summary">Bu değer OpenAPS\'te \"maksimum bazal\" olarak adlandırılır</string>
<string name="openapsma_maxiob_title">OpenAPS\'nin vermesine izin verilen maksimum bazal IOB (Aktif insülin) [U]</string>
<string name="openapsma_maxiob_summary">Bu değere OpenAPS bağlamında Maks IOB denir.\nAPS\'de bir kerede verilebilen maksimum insülin [U] ü.</string>
<string name="openapsma_maxiob_title">OpenAPS\'in gönderebileceği maksimum bazal AİNS (Aktif insülin) [U]</string>
<string name="openapsma_maxiob_summary">Bu değere OpenAPS bağlamında Maks AİNS denir.\nAPS\'de bir kerede verilebilen maksimum insülin [U] ü.</string>
<string name="password_preferences_encrypt_prompt">Dışa aktarılan tercihleri şifrelemek için kullanılacak ana parola sorulacaktır.</string>
<string name="password_preferences_decrypt_prompt">İçe aktarılan tercihlerin şifresini çözmek için gerekli olan ana parola sorulacaktır.</string>
<string name="preferences_export_canceled">Aktarım iptal edildi! Tercihler dışa aktarılmadı!</string>
@ -316,8 +317,8 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="clearlog">Günlüğü temizle</string>
<string name="nowritepermission">NSCLIENT yazma izni yok. Yanlış API Anahtarı?</string>
<string name="wear_settings">Wear ayarları</string>
<string name="wear_detailedIOB_title">Ayrıntılı IOB göster</string>
<string name="wear_detailedIOB_summary">Saat arayüzü üzerinde IOB\'yi bolus ve bazal olarak ayırın</string>
<string name="wear_detailedIOB_title">Ayrıntılı AİNS göster</string>
<string name="wear_detailedIOB_summary">Saat arayüzü üzerinde AİNS\'i bolus ve bazal olarak ayırın</string>
<string name="nosuccess">başarısız - lütfen telefonu kontrol edin</string>
<string name="notavailable">n/a</string>
<string name="patientage">Hasta tipi</string>
@ -356,7 +357,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="smscommunicator_loopsuspended">Döngü duraklatıldı</string>
<string name="smscommunicator_loopresumed">Döngü devam ettirildi</string>
<string name="bg_trend_label">15 dk eğilim</string>
<string name="treatments_wizard_cob_label">COB</string>
<string name="treatments_wizard_cob_label">AKRB</string>
<string name="superbolus">Süperbolus</string>
<string name="ns_logappstartedevent">NS\'a uygulama başlangıcını kaydet</string>
<string name="restartingapp">Ayarları uygulamak için uygulamadan çıkılıyor.</string>
@ -433,13 +434,13 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="ns_localbroadcasts_title">Yerel yayınları etkinleştirin.</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dinamik İDF</string>
<string name="DynISFAdjust_title">DinamikİDF ayarlama faktörü %%</string>
<string name="DynISFAdjust_summary">DinamikİDF için ayarlama faktörü. Daha agresif düzeltme dozları için %%100\'den fazla ve de az agresif düzeltmeler için %%100\'den az ayarlayın.</string>
<string name="DynISFAdjust_title" formatted="false">DinamikİDF Ayar Faktörü %</string>
<string name="DynISFAdjust_summary" formatted="false">DinamikİDF için ayarlama faktörü. Daha agresif düzeltme dozları için %100\'den fazla ve daha az agresif düzeltmeler için %100\'den az ayarlayın.</string>
<string name="enableuam">UAM etkinleştir</string>
<string name="enablesmb">SMB (Super Micro Bolus) etkinleştir</string>
<string name="enablesmb_summary">Daha hızlı bir etki için geçici bazal yerine Super Micro Bolus kullanın</string>
<string name="enableuam_summary">(Uam) Bildirilmemiş öğünlerin tespiti</string>
<string name="insulin_oref_peak">IOB Eğrisi Tepe Zamanı</string>
<string name="insulin_oref_peak">AİNS Eğrisi Tepe Zamanı</string>
<string name="insulin_peak_time">Tepe zamanı [min]</string>
<string name="insulin_peak">Tepe</string>
<string name="free_peak_oref">Serbest tepe Oref</string>
@ -495,28 +496,28 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="nsclientbg">Nightscout Client KŞ</string>
<string name="nsclientbgshort">NS KŞ</string>
<string name="overview_editquickwizard_usebg">KŞ Hesaplaması</string>
<string name="overview_editquickwizard_usebolusiob">Bolus IOB (Aktif İnsülin) hesaplaması</string>
<string name="overview_editquickwizard_usebasaliob">Bazal IOB (Aktif İnsülin) hesaplaması</string>
<string name="overview_editquickwizard_usebolusiob">Bolus AİNS hesaplaması</string>
<string name="overview_editquickwizard_usebasaliob">Bazal AİNS hesaplaması</string>
<string name="overview_editquickwizard_usetrend">Trend hesapla</string>
<string name="overview_editquickwizard_usesuperbolus">Süperbolus hesapla</string>
<string name="positiveonly">Sadece pozitif</string>
<string name="negativeonly">Sadece negatif</string>
<string name="overview_editquickwizard_usecob">COB (Aktif Karbonhidrat) hesaplaması</string>
<string name="overview_editquickwizard_usecob">AKRB (Aktif Karbonhidrat) hesaplaması</string>
<string name="overview_editquickwizard_usetemptarget">Geçici hedef hesaplaması</string>
<string name="overview_editquickwizard_usepercentage">Yüzde Hesaplaması</string>
<string name="loopenabled">Döngü etkin</string>
<string name="apsselected">APS Seçildi</string>
<string name="nsclienthaswritepermission">NSClient\'in yazma izni var</string>
<string name="closedmodeenabled">Kapalı mod etkin</string>
<string name="maxiobset">Maksimal IOB doğru şekilde ayarlandı</string>
<string name="maxiobset">Maksimal AİNS doğru şekilde ayarlandı</string>
<string name="hasbgdata">Seçili kaynaktan KŞ kullanılabilir</string>
<string name="extendedbolusdeliveryerror">Yayma bolus iletim hatası</string>
<string name="enablesmbalways">SMB\'yi her zaman etkinleştir</string>
<string name="enablesmbalways_summary">SMB\'yi her zaman bağımsız olarak boluslarla etkinleştirin. G5 gibi verilerin yalnızca filtrelenmesiyle yalnızca KŞ kaynağıyla mümkündür</string>
<string name="enablesmbaftercarbs">Yemeklerden sonra SMB\'yi etkinleştir</string>
<string name="enablesmbaftercarbs_summary">Karbonhidrat alındıktan sonra 6 saat süreyle SMB\'yi (Super Micro Bolus) etkinleştirin.0 COB (Aktif Karbonhidrat) ile de çalışır, Şayet KŞ kaynağıyla kullanılacaksa verilerin iyice filtrelenmesiyle mümkündür.örn. Dexcom G5 gibi</string>
<string name="enablesmbwithcob">SMB\'yi COB ile etkinleştir</string>
<string name="enablesmbwithcob_summary">COB (Aktif Karbonhidrat) aktif olduğunda SMB\'yi (Super Micro Bolus) etkinleştirin.</string>
<string name="enablesmbaftercarbs_summary">0 AKRB (Aktif Karbonhidrat) olsa dahi, karbonhidrat alındıktan sonra 6 saat süreyle SMB\'yi (Süper Mikro Bolus) etkinleştirir. Şayet KŞ kaynağıyla kullanılacaksa verilerin iyice filtrelenmesiyle (Dexcom G5-G6 gibi) mümkündür.</string>
<string name="enablesmbwithcob">SMB\'yi AKRB ile etkinleştir</string>
<string name="enablesmbwithcob_summary">AKRB (Aktif Karbonhidrat) aktif olduğunda SMB\'yi (Süper Mikro Bolus) etkinleştirin.</string>
<string name="enablesmbwithtemptarget">Geçici hedeflerle SMB\'yi etkinleştir</string>
<string name="enablesmbwithtemptarget_summary">Geçici hedef aktif olduğunda SMB\'yi etkinleştir (yakında yeme, egzersiz)</string>
<string name="enablesmbwithhightemptarget">Yüksek geçici hedeflerle SMB\'yi etkinleştir</string>
@ -579,7 +580,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="basal_set_correctly">Bazal doğru ayarlanmış</string>
<string name="limitingextendedbolus">%2$s\'den dolayı yayma bolus %1$.1f Ü ile sınırlandırılıyor</string>
<string name="limitingcarbs">%2$s\'den dolayı karbonhidratlar %1$d g ile sınırlandırılıyor</string>
<string name="limitingiob">%2$s\'den dolayı IOB (Aktif İnsülin)%1$.1f Ü ile sınırlandırılıyor</string>
<string name="limitingiob">%2$s\'den dolayı AİNS %1$.1f Ü ile sınırlandırılıyor</string>
<string name="maxvalueinpreferences">tercihlerde maksimum değer</string>
<string name="hardlimit">sert sınır</string>
<string name="readstatusfailed">Durumu okumak başarısız oldu</string>
@ -589,8 +590,8 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="smbnotallowedinopenloopmode">ık Döngü modunda SMB\'ye (Super Micro Bolus) izin verilmiyor</string>
<string name="food_short">Yiyecek</string>
<string name="reset">sıfırla</string>
<string name="openapssmb_maxiob_title">OpenAPS tarafından aşılmayacak, maksimum toplam IOB(Aktif İnsülin)[U]</string>
<string name="openapssmb_maxiob_summary">Bu değer OpenAPS bağlamında Max IOB (Aktif İnsülin) olarak adlandırılır\nOpenAPS, mevcut IOB bu değerden daha büyükse daha fazla insülin eklemez</string>
<string name="openapssmb_maxiob_title">OpenAPS tarafından aşılamayacak maksimum toplam AİNS (Aktif İnsülin)[U]</string>
<string name="openapssmb_maxiob_summary">Bu değer OpenAPS bağlamında Max AİNS (Aktif İnsülin) olarak adlandırılır\nOpenAPS, mevcut AİNS bu değerden daha büyükse daha fazla insülin vermez</string>
<string name="absorption_cutoff_title">Besinin maksimum emilim süresi [h]</string>
<string name="absorption_cutoff_summary">Herhangi bir öğünün emildiği kabul edilen zaman. Kalan karbonhidratlar kesilecek.</string>
<string name="treatmentssafety_lgsThreshold_summary">Altına düştüğünde insülinin askıya alındığı KŞ değeri. Varsayılan değer, standart hedef modeli kullanır. Kullanıcı değeri 60mg/dl (3,3mmol/l) ile 100mg/dl(5.5mmol/l) arasında ayarlayabilir. 65/3,6\'nın altındaki değerler varsayılan modelin kullanılmasına neden olur</string>
@ -632,7 +633,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="readstatus">Durum oku</string>
<string name="exitwizard">Kurulum sihirbazını atla</string>
<string name="setupwizard_loop_description">AndroidAPS\'ın bazal değişiklikleri önerme/yapmasını sağlamak için aşağıdaki düğmeye basın</string>
<string name="setupwizard_sensitivity_description">Duyarlılık eklentisi, duyarlılık tespiti ve COB hesaplaması için kullanılır. Daha fazla bilgi için ziyaret edin:</string>
<string name="setupwizard_sensitivity_description">Duyarlılık eklentisi, duyarlılık tespiti ve AKRB hesaplaması için kullanılır. Daha fazla bilgi için ziyaret edin:</string>
<string name="setupwizard_sensitivity_url">https://androidaps.readthedocs.io/en/latest/Configuration/Sensitivity-detection-and-COB.html</string>
<string name="nsclientinfotext">NSClient, Nightscout\'a bağlantıyı sağlar. Şimdi bu kısmı atlayabilirsiniz, ancak ayarlamadan görevleri geçemezsiniz.</string>
<string name="diawarning">Lütfen unutmayın: yeni insülin profilleri en az 5 saat DIA gerektirir. Yeni profildeki DIA 56 saat, eski insülin profillerinde DIA 3saat\'e eşittir.</string>
@ -645,7 +646,6 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="needsystemwindowpermission">Uygulama, bildirimler için sistem iznine ihtiyaç duyuyor</string>
<string name="needlocationpermission">Uygulamanın BT taraması ve WiFi tanımlaması için konum iznine ihtiyacı var</string>
<string name="needstoragepermission">Uygulamanın, günlük dosyalarını saklayabilmesi ve ayarları dışa aktarabilmesi için depolama iznine ihtiyacı var</string>
<string name="needconnectpermission">Uygulama bluetooth iznine ihtiyac duyuyor</string>
<string name="request">İstek</string>
<string name="open_navigation">Navigasyonu aç</string>
<string name="close_navigation">Navigasyonu kapat</string>
@ -736,9 +736,9 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="dexcom_app_patched">BYODA</string>
<string name="dexcom_short">BYODA</string>
<string name="description_source_dexcom">\'Kendi Dexcom Uygulamanızı Oluşturun\' uygulamasından KŞ değerlerini alın.</string>
<string name="cobvsiob">COB vs IOB</string>
<string name="cobvsiob">AKRB vs AİNS</string>
<string name="bolusconstraintappliedwarn">Bolus kısıtlaması uygulandı: %1$.2f Ü ile %2$.2f Ü</string>
<string name="slowabsorptiondetected"><![CDATA[<font color=\'%1$s\'>!!!!! Yavaş karbonhidrat emilimi tespit edildi: zamanın %2$d%% si. Hesaplamanızı iki kez kontrol edin. Aktif Karbonhidrat (COB) olduğundan fazla tahmin edilebilir, bu nedenle daha fazla insülin verilebilir !!!!!</font>]]></string>
<string name="slowabsorptiondetected"><![CDATA[<font color=\'%1$s\'>!!!!! Yavaş karbonhidrat emilimi tespit edildi: zamanın %2$d%% si. Hesaplamanızı iki kez kontrol edin. Aktif Karbonhidrat (AKRB) olduğundan fazla tahmin edilebilir, bu nedenle daha fazla insülin verilebilir !!!!!</font>]]></string>
<string name="partialboluswizard">Bolus sihirbazı sonucunun bu kadarını ilet [%]</string>
<string name="deliverpartofboluswizard">Bolus sihirbazı hesaplamayı gerçekleştirir ancak hesaplanan insülinin yalnızca bu kısmı iletilir. SMB algoritması ile kullanışlıdır.</string>
<string name="snooze">Ertele</string>
@ -746,7 +746,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="smscommunicator_messagebody">Geçersiz mesaj</string>
<string name="format_bg_isf">%1$s ISF: %2$.1f</string>
<string name="format_carbs_ic">%1$.0fg IC: %2$.1f</string>
<string name="format_cob_ic">%1$.1fg IC: %2$.1f</string>
<string name="format_cob_ic">%1$.1fg : %2$.1f</string>
<string name="format_percent">%1$d%%</string>
<string name="unit_minute_short">dk.</string>
<string name="profile_name">Profil adı:</string>
@ -897,7 +897,7 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="ns_receive_tbr_eb">GBO ve EB (Yayma Bolus) alın</string>
<string name="ns_receive_tbr_eb_summary">Başka bir örnek üzerinden girilen GBO ve EB (Yayma Bolusu) kabul edin</string>
<string name="ns_receive_insulin">İnsülinleri alın</string>
<string name="ns_receive_insulin_summary">NS veya NSClient aracılığıyla girilen insülini kabul edin (iletilmez, yalnızca aktif insüline göre (IOB) hesaplanır)</string>
<string name="ns_receive_insulin_summary">NS veya NSClient aracılığıyla girilen insülini kabul edin (iletilmez, yalnızca AİNS\'e göre hesaplanır)</string>
<string name="ns_receive_carbs">Karbonhidratları alın</string>
<string name="ns_receive_carbs_summary">NS veya NSClient aracılığıyla girilen karbonhidratları kabul edin</string>
<string name="ns_receive_therapy_events">Terapi etkinlikleri alın</string>
@ -970,20 +970,20 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="wear_action_tempt_max_bg_error">Maks-KŞ aralık dışında!</string>
<string name="wear_action_tempt_manual_range_message">Geçici Hedef:\nMin: %1$s\nMaks: %2$s\nSüre: %3$s</string>
<string name="wear_action_tempt_manual_message">Geçici Hedef:\nHedef: %1$s\nSüre: %2$s</string>
<string name="wear_action_tempt_preset_message">Geçici Hedef:\Neden: %1$s\nHedef: %2$s\nSüre: %3$s</string>
<string name="wear_action_tempt_preset_message">Geçicihedef:\nNeden: %1$s\nHedef: %2$s\nSüre: %3$s</string>
<string name="quick_wizard_message">Hızlı Asistan: %1$s\nİnsülin: %2$.2fU\nKarb: %3$dg</string>
<string name="wizard_result">Hesap Mak.:\nİnsulin: %1$.2fÜ\nKarb: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Girişi cihazda göster:</string>
<string name="quick_wizard_not_available">Seçili hızlı asistan artık mevcut değil, lütfen kutucuğu yenileyin</string>
<string name="wizard_no_actual_bg">Hesaplamayı temel alacak yeni bir KŞ yok!</string>
<string name="wizard_no_active_profile">Etkin profil ayarlanmadı!</string>
<string name="wizard_no_cob">Aktif karbonhidrat bilinmiyor! KŞ okuması eksik veya son uygulama yeniden başlatılsın mı?</string>
<string name="wizard_no_cob">Aktif karbonhidrat (AKRB) bilinmiyor! KŞ okuması eksik veya son uygulama yeniden başlatılsın mı?</string>
<string name="wizard_carbs_constraint">Karbonhidrat kısıtlaması ihlali!</string>
<string name="wizard_explain_calc">Hesap (KİO: %1$.1f, İDF: %2$.1f)</string>
<string name="wizard_explain_carbs">Karb: %1$.2fÜ</string>
<string name="wizard_explain_cob">COB: %1$.0fg %2$.2fÜ</string>
<string name="wizard_explain_cob">AKRB: %1$.0fg %2$.2fÜ</string>
<string name="wizard_explain_bg">KŞ: %1$.2fÜ</string>
<string name="wizard_explain_iob">Aktif İnsülin: %1$.2fÜ</string>
<string name="wizard_explain_iob">AİNS: %1$.2fÜ</string>
<string name="wizard_explain_superbolus">Süperbolus: %1$.2fÜ</string>
<string name="wizard_explain_trend">15\' trend: %1$.2fÜ</string>
<string name="wizard_explain_percent">Yüzde: %1$.2fÜ x %2$d%% ≈ %3$.2fÜ</string>
@ -1037,10 +1037,13 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
<string name="a11y_only_on_watch">sadece saatte</string>
<string name="a11y_only_on_phone">sadece telefonda</string>
<string name="a11y_drag_and_drop_handle">sürükle ve bırak kolu</string>
<string name="search">Ara</string>
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">GlucoRx Aidex CGMS\'den KŞ değerleri alır.</string>
<string name="blocked_by_charging">Şarj seçenekleri tarafından engellendi</string>
<string name="blocked_by_connectivity">Bağlantı seçenekleri tarafından engellendi</string>
<string name="no_watch_connected">(Saat Bağlı Değil)</string>
<string name="error_asking_for_permissions">İzin istenirken hata</string>
</resources>

View file

@ -137,7 +137,6 @@
<string name="wronginsulin_prime">通过注射器或胰岛素笔输注你计算出的“遗漏”胰岛素的一部分。</string>
<string name="wronginsulin_donothing">不做任何事情允许AndroidAPS纠正高血糖导致的任何结果。</string>
<string name="iob_label">活性胰岛素(IOB)</string>
<string name="iob_which">选择所有正确的答案。</string>
<string name="iob_value">活性胰岛素IOB数值受发布的临时基础率影响。</string>
<string name="iob_hightemp">当您的血糖低于目标值时,不会被给予高临时基础率。</string>
<string name="iob_negiob">在没有运动的情况下活性胰岛素IOB长时间负数表明你的个人配置太强你需要在配置中减少的胰岛素用量。</string>

View file

@ -432,8 +432,7 @@
<string name="ns_localbroadcasts_title">启用本地广播。</string>
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">动态ISF(胰岛素敏感系数)</string>
<string name="DynISFAdjust_title">动态ISF胰岛素敏系数调整比例 %%</string>
<string name="DynISFAdjust_summary">动态ISF的调整因子。设置100%%以上用于更积极的校正100%%以下则不那么积极校正。</string>
<string name="DynISFAdjust_summary" formatted="false">动态ISF的调整因子。设置100%以上用于更积极的校正100%以下则不那么积极校正。</string>
<string name="enableuam">启用 UAM</string>
<string name="enablesmb">启用微型大剂量</string>
<string name="enablesmb_summary">使用微型大剂量代替使用临时基础率,更快的干预</string>
@ -638,7 +637,6 @@
<string name="needsystemwindowpermission">应用程序需要悬浮窗权限用于发送通知。</string>
<string name="needlocationpermission">应用程序需要定位权限才能进行蓝牙扫描及WIFI识别。</string>
<string name="needstoragepermission">应用程序需要文件存储权限,才能存储日志文件及导出设置。</string>
<string name="needconnectpermission">应用程序需要蓝牙权限。</string>
<string name="request">请求</string>
<string name="open_navigation">打开导航栏</string>
<string name="close_navigation">关闭导航栏</string>
@ -957,7 +955,6 @@
<string name="wear_action_tempt_max_bg_error">目标血糖最大值超出范围!</string>
<string name="wear_action_tempt_manual_range_message">临时目标:\n最小: %1$s\n最大: %2$s\n持续时间: %3$s</string>
<string name="wear_action_tempt_manual_message">临时目标:\n目标: %1$s\n持续时间: %2$s</string>
<string name="wear_action_tempt_preset_message">临时目标:\原因: %1$s\n目标: %2$s\n持续时间: %3$s</string>
<string name="quick_wizard_message">快速向导: %1$s\n胰岛素: %2$.2fU\n碳水: %3$d克</string>
<string name="wizard_result">计算. 向导:\n胰岛素: %1$.2fU\n碳水: %2$d克</string>
<string name="overview_editquickwizard_show_on_device">在设备上显示条目:</string>

View file

@ -28,6 +28,7 @@
<item>@string/bg_lang</item>
<item>@string/cs_lang</item>
<item>@string/de_lang</item>
<item>@string/dk_lang</item>
<item>@string/fr_lang</item>
<item>@string/nl_lang</item>
<item>@string/es_lang</item>
@ -55,6 +56,7 @@
<item>bg</item>
<item>cs</item>
<item>de</item>
<item>dk</item>
<item>fr</item>
<item>nl</item>
<item>es</item>

View file

@ -136,8 +136,20 @@
<string name="wronginsulin_compare">Compare values in AndroidAPS and pump history (if pump supports this).</string>
<string name="wronginsulin_prime">Bolus a proportion of your calculated missed insulin by either syringe/pen or using a prime.</string>
<string name="wronginsulin_donothing">Do nothing and allow AndroidAPS to correct any resulting high blood glucose level.</string>
<string name="cob_label">Carbs on Board (COB)</string>
<string name="cob_question">How changing ISF value affects COB calculation?</string>
<string name="cob_longer">Increasing ISF will take absorbing carbs a longer time</string>
<string name="cob_shorter">Increasing ISF will take absorbing carbs a shorter time</string>
<string name="cob_no_effect">Increasing ISF will not affect calculated carbs absorption</string>
<string name="cob2_question">How changing IC value affects COB calculation?</string>
<string name="cob2_longer">Increasing IC will take absorbing carbs a longer time</string>
<string name="cob2_shorter">Increasing IC will take absorbing carbs a shorter time</string>
<string name="cob2_no_effect">Increasing IC will not affect calculated carbs absorption</string>
<string name="cob3_question">How changing profile percentage affects COB calculation?</string>
<string name="cob3_longer">Setting profile to 150% will take absorbing carbs a longer time</string>
<string name="cob3_shorter">Setting profile to 150% will take absorbing carbs a shorter time</string>
<string name="cob3_no_effect">Setting profile to 150% will not affect calculated carbs absorption</string>
<string name="iob_label">Insulin on Board (IOB)</string>
<string name="iob_which">Check all the correct answers.</string>
<string name="iob_value">IOB value is affected by issued temporary basals.</string>
<string name="iob_hightemp">High temp basal will not be given when your blood sugar is below target.</string>
<string name="iob_negiob">Negative IOB for a substantial period in the absence of exercise suggests your profile is too strong and less insulin is needed in your settings.</string>

View file

@ -9,6 +9,7 @@
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
<string name="fr_lang" translatable="false">French</string>
<string name="de_lang" translatable="false">German</string>
<string name="dk_lang" translatable="false">Danish</string>
<string name="el_lang" translatable="false">Greek</string>
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
<string name="zh_lang" translatable="false">Chinese</string>
@ -520,8 +521,8 @@
<string name="openapssmb">OpenAPS SMB</string>
<string name="openaps_smb_dynamic_isf">Dynamic ISF</string>
<string name="key_DynISFAdjust" translatable="false">DynISFAdjust</string>
<string name="DynISFAdjust_title">DynamicISF Adjustment Factor %%</string>
<string name="DynISFAdjust_summary">Adjustment factor for DynamicISF. Set more than 100%% for more aggressive correction doses, and less than 100%% for less aggressive corrections.</string>
<string name="DynISFAdjust_title" formatted="false">DynamicISF Adjustment Factor %</string>
<string name="DynISFAdjust_summary" formatted="false">Adjustment factor for DynamicISF. Set more than 100% for more aggressive correction doses, and less than 100% for less aggressive corrections.</string>
<string name="key_use_smb" translatable="false">use_smb</string>
<string name="key_use_uam" translatable="false">use_uam</string>
<string name="key_smb_enable_carbs_suggestions_threshold" translatable="false">smb_enable_carbs_suggestions_threshold</string>
@ -789,7 +790,6 @@
<string name="needsystemwindowpermission">Application needs system window permission for notifications</string>
<string name="needlocationpermission">Application needs location permission for BT scan and WiFi identification</string>
<string name="needstoragepermission">Application needs storage permission to be able store log files and export settings</string>
<string name="needconnectpermission">Application needs bluetooth permission</string>
<string name="request">Request</string>
<string name="open_navigation">Open navigation</string>
<string name="close_navigation">Close navigation</string>
@ -1175,7 +1175,7 @@
<string name="wear_action_tempt_max_bg_error">Max-BG out of range!</string>
<string name="wear_action_tempt_manual_range_message">Temptarget:\nMin: %1$s\nMax: %2$s\nDuration: %3$s</string>
<string name="wear_action_tempt_manual_message">Temptarget:\nTarget: %1$s\nDuration: %2$s</string>
<string name="wear_action_tempt_preset_message">Temptarget:\Reason: %1$s\nTarget: %2$s\nDuration: %3$s</string>
<string name="wear_action_tempt_preset_message">Temptarget:\nReason: %1$s\nTarget: %2$s\nDuration: %3$s</string>
<string name="quick_wizard_message">QuickWizard: %1$s\nInsulin: %2$.2fU\nCarbs: %3$dg</string>
<string name="wizard_result">Calc. Wizard:\nInsulin: %1$.2fU\nCarbs: %2$dg</string>
<string name="overview_editquickwizard_show_on_device">Show entry on device:</string>
@ -1242,13 +1242,17 @@
<string name="a11y_only_on_watch">only on watch</string>
<string name="a11y_only_on_phone">only on phone</string>
<string name="a11y_drag_and_drop_handle">drag and drop handle</string>
<string name="search">Search</string>
<!-- Aidex Cgms -->
<!-- Aidex Cgms -->
<string name="aidex">GlucoRx Aidex</string>
<string name="aidex_short">Aidex</string>
<string name="description_source_aidex">Receive BG values from GlucoRx Aidex CGMS.</string>
<string name="blocked_by_charging">Blocked by charging options</string>
<string name="blocked_by_connectivity">Blocked by connectivity options</string>
<string name="no_watch_connected">(No Watch Connected)</string>
<string name="error_asking_for_permissions">Error asking for permissions</string>
<string name="key_adjust_sensitivity" translatable="false">dynisf_adjust_sensitivity</string>
<string name="dynisf_adjust_sensitivity">Adjust sensitivity and BG</string>
</resources>

Some files were not shown because too many files have changed in this diff Show more