Merge remote-tracking branch 'origin/intelligo' into intelligo
This commit is contained in:
commit
4fac0cc241
124 changed files with 1316 additions and 596 deletions
|
@ -105,7 +105,7 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
versionCode 1500
|
versionCode 1500
|
||||||
version "3.1.0.2-dev-a"
|
version "3.1.0.3-dev-a"
|
||||||
buildConfigField "String", "VERSION", '"' + version + '"'
|
buildConfigField "String", "VERSION", '"' + version + '"'
|
||||||
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
|
buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"'
|
||||||
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
|
buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"'
|
||||||
|
|
|
@ -203,16 +203,6 @@ 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)
|
// 80 mg/dL with low_temptarget_lowers_sensitivity would give 1.5x basal, but is limited to autosens_max (1.2x by default)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var profile_sens = round(profile.sens,1)
|
|
||||||
var sens = profile.sens;
|
|
||||||
|
|
||||||
var now = new Date().getHours();
|
|
||||||
if (now < 1){
|
|
||||||
now = 1;}
|
|
||||||
else {
|
|
||||||
console.error("Time now is "+now+"; ");
|
|
||||||
}
|
|
||||||
//*********************************************************************************
|
//*********************************************************************************
|
||||||
//** Start of Dynamic ISF code for predictions **
|
//** Start of Dynamic ISF code for predictions **
|
||||||
//*********************************************************************************
|
//*********************************************************************************
|
||||||
|
@ -221,96 +211,17 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
console.error( " Dynamic ISF version Beta 1.6.5 ");
|
console.error( " Dynamic ISF version Beta 1.6.5 ");
|
||||||
console.error("---------------------------------------------------------");
|
console.error("---------------------------------------------------------");
|
||||||
|
|
||||||
|
var variable_sens = profile.variable_sens;
|
||||||
if (meal_data.TDDAIMI7){
|
var TDD = profile.TDD;
|
||||||
var tdd7 = meal_data.TDDAIMI7;
|
var insulinDivisor = profile.insulinDivisor;
|
||||||
}
|
|
||||||
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;
|
|
||||||
} else {
|
|
||||||
ins_val = 75; // rapid peak: 75
|
|
||||||
}
|
|
||||||
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 **
|
//** 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 ) {
|
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
|
// 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
|
// 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);
|
//sensitivityRatio = 2/(2+(target_bg-normalTarget)/40);
|
||||||
|
@ -320,47 +231,29 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max);
|
sensitivityRatio = Math.min(sensitivityRatio, profile.autosens_max);
|
||||||
sensitivityRatio = round(sensitivityRatio,2);
|
sensitivityRatio = round(sensitivityRatio,2);
|
||||||
console.log("Sensitivity ratio set to "+sensitivityRatio+" based on temp target of "+target_bg+"; ");
|
console.log("Sensitivity ratio set to "+sensitivityRatio+" based on temp target of "+target_bg+"; ");
|
||||||
sens = sens / sensitivityRatio ;
|
} else if (typeof autosens_data !== 'undefined' && autosens_data) {
|
||||||
sens = round(sens, 1);
|
sensitivityRatio = autosens_data.ratio;
|
||||||
console.log("ISF from "+variable_sens+" to "+sens+ "due to temp target; ");
|
console.log("Autosens ratio: "+sensitivityRatio+"; ");
|
||||||
}
|
}
|
||||||
else {
|
if (sensitivityRatio) {
|
||||||
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 = profile.current_basal * sensitivityRatio;
|
||||||
basal = round_basal(basal, profile);
|
basal = round_basal(basal, profile);
|
||||||
if (basal !== profile_current_basal) {
|
if (basal !== profile_current_basal) {
|
||||||
console.log("Adjusting basal from "+profile_current_basal+" to "+basal+"; ");
|
console.log("Adjusting basal from "+profile_current_basal+" to "+basal+"; ");
|
||||||
} else {
|
} else {
|
||||||
console.log("Autosens disabled. Basal unchanged: "+basal+"; ");
|
console.log("Basal unchanged: "+basal+"; ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust min, max, and target BG for sensitivity, such that 50% increase in ISF raises target from 100 to 120
|
// adjust min, max, and target BG for sensitivity, such that 50% increase in ISF raises target from 100 to 120
|
||||||
if (profile.temptargetSet) {
|
if (profile.temptargetSet) {
|
||||||
//console.log("Temp Target set, not adjusting with autosens; ");
|
//console.log("Temp Target set, not adjusting with autosens; ");
|
||||||
} else {
|
} else if (typeof autosens_data !== 'undefined' && autosens_data) {
|
||||||
if ( profile.sensitivity_raises_target && sensitivityRatio < 1 && profile.openapsama_useautosens === true || profile.resistance_lowers_target && sensitivityRatio > 1 && profile.openapsama_useautosens === true) {
|
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
|
// 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;
|
min_bg = round((min_bg - 60) / autosens_data.ratio) + 60;
|
||||||
max_bg = round((max_bg - 60) / sensitivityRatio) + 60;
|
max_bg = round((max_bg - 60) / autosens_data.ratio) + 60;
|
||||||
var new_target_bg = round((target_bg - 60) / sensitivityRatio) + 60;
|
var new_target_bg = round((target_bg - 60) / autosens_data.ratio) + 60;
|
||||||
// don't allow target_bg below 80
|
// don't allow target_bg below 80
|
||||||
new_target_bg = Math.max(80, new_target_bg);
|
new_target_bg = Math.max(80, new_target_bg);
|
||||||
if (target_bg === new_target_bg) {
|
if (target_bg === new_target_bg) {
|
||||||
|
@ -372,7 +265,6 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (typeof iob_data === 'undefined' ) {
|
if (typeof iob_data === 'undefined' ) {
|
||||||
rT.error ='Error: iob_data undefined. ';
|
rT.error ='Error: iob_data undefined. ';
|
||||||
return rT;
|
return rT;
|
||||||
|
@ -401,8 +293,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
var minAvgDelta = Math.min(glucose_status.short_avgdelta, glucose_status.long_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 maxDelta = Math.max(glucose_status.delta, glucose_status.short_avgdelta, glucose_status.long_avgdelta);
|
||||||
|
|
||||||
|
var sens = variable_sens
|
||||||
console.error("; CR:",profile.carb_ratio);
|
|
||||||
|
|
||||||
// compare currenttemp to iob_data.lastTemp and cancel temp if they don't match
|
// compare currenttemp to iob_data.lastTemp and cancel temp if they don't match
|
||||||
var lastTempAge;
|
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");
|
//console.error("currenttemp:",currenttemp,"lastTemp:",JSON.stringify(iob_data.lastTemp),"lastTempAge:",lastTempAge,"m");
|
||||||
var tempModulus = (lastTempAge + currenttemp.duration) % 30;
|
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.temp = 'absolute';
|
||||||
rT.deliverAt = deliverAt;
|
rT.deliverAt = deliverAt;
|
||||||
if ( microBolusAllowed && currenttemp && iob_data.lastTemp && currenttemp.rate !== iob_data.lastTemp.rate && lastTempAge > 10 && currenttemp.duration ) {
|
if ( microBolusAllowed && currenttemp && iob_data.lastTemp && currenttemp.rate !== iob_data.lastTemp.rate && lastTempAge > 10 && currenttemp.duration ) {
|
||||||
|
@ -832,21 +723,21 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
var fSensBG = Math.min(minPredBG,bg);
|
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 ) {
|
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))/ins_val)+1)*TDD));
|
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 ))));
|
//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");
|
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;";
|
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( glucose_status.delta > 0 && eventualBG > target_bg || eventualBG > bg ) {
|
else if( glucose_status.delta > 0 && eventualBG > target_bg || eventualBG > bg) {
|
||||||
var future_sens = ( 1800 / (Math.log((bg/ins_val)+1)*TDD));
|
var future_sens = ( 1800 / (Math.log((bg/insulinDivisor)+1)*TDD));
|
||||||
//var future_sens_old = ( 277700 / (TDD * bg));
|
//var future_sens_old = ( 277700 / (TDD * bg));
|
||||||
console.log("Future state sensitivity is " +future_sens+" using current bg due to small delta or variation");
|
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;";
|
rT.reason += "Dosing sensitivity: " +future_sens+" using current BG;";
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
var future_sens = ( 1800 / (Math.log((fSensBG/ins_val)+1)*TDD));
|
var future_sens = ( 1800 / (Math.log((fSensBG/insulinDivisor)+1)*TDD));
|
||||||
//var future_sens_old = ( 277700 / (TDD * eventualBG));
|
//var future_sens_old = ( 277700 / (TDD * eventualBG));
|
||||||
console.log("Future state sensitivity is " +future_sens+" based on eventual bg due to -ve delta");
|
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;";
|
rT.reason += "Dosing sensitivity: " +future_sens+" using eventual BG;";
|
||||||
|
@ -854,9 +745,6 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
future_sens = round(future_sens,1);
|
future_sens = round(future_sens,1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var fractionCarbsLeft = meal_data.mealCOB/meal_data.carbs;
|
var fractionCarbsLeft = meal_data.mealCOB/meal_data.carbs;
|
||||||
// if we have COB and UAM is enabled, average both
|
// if we have COB and UAM is enabled, average both
|
||||||
if ( minUAMPredBG < 999 && minCOBPredBG < 999 ) {
|
if ( minUAMPredBG < 999 && minCOBPredBG < 999 ) {
|
||||||
|
@ -1079,11 +967,8 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// calculate 30m low-temp required to get projected BG up to target
|
// calculate 30m low-temp required to get projected BG up to target
|
||||||
// multiply by 2 to low-temp faster for increased hypo safety
|
// multiply by 2 to low-temp faster for increased hypo safety
|
||||||
|
|
||||||
var insulinReq = 2 * Math.min(0, (eventualBG - target_bg) / future_sens);
|
var insulinReq = 2 * Math.min(0, (eventualBG - target_bg) / future_sens);
|
||||||
insulinReq = round( insulinReq , 2);
|
insulinReq = round( insulinReq , 2);
|
||||||
// calculate naiveInsulinReq based on naive_eventualBG
|
// calculate naiveInsulinReq based on naive_eventualBG
|
||||||
|
|
|
@ -80,7 +80,7 @@ class MainApp : DaggerApplication() {
|
||||||
@Inject lateinit var uel: UserEntryLogger
|
@Inject lateinit var uel: UserEntryLogger
|
||||||
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper
|
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper
|
||||||
@Inject lateinit var notificationStore: NotificationStore
|
@Inject lateinit var notificationStore: NotificationStore
|
||||||
@Inject lateinit var processLifecycleListener: ProcessLifecycleListener
|
@Inject lateinit var processLifecycleListener: Provider<ProcessLifecycleListener>
|
||||||
@Inject lateinit var profileSwitchPlugin: ThemeSwitcherPlugin
|
@Inject lateinit var profileSwitchPlugin: ThemeSwitcherPlugin
|
||||||
@Inject lateinit var localAlertUtils: LocalAlertUtils
|
@Inject lateinit var localAlertUtils: LocalAlertUtils
|
||||||
@Inject lateinit var rh: Provider<ResourceHelper>
|
@Inject lateinit var rh: Provider<ResourceHelper>
|
||||||
|
@ -94,7 +94,6 @@ class MainApp : DaggerApplication() {
|
||||||
RxDogTag.install()
|
RxDogTag.install()
|
||||||
setRxErrorHandler()
|
setRxErrorHandler()
|
||||||
LocaleHelper.update(this)
|
LocaleHelper.update(this)
|
||||||
ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleListener)
|
|
||||||
|
|
||||||
var gitRemote: String? = BuildConfig.REMOTE
|
var gitRemote: String? = BuildConfig.REMOTE
|
||||||
var commitHash: String? = BuildConfig.HEAD
|
var commitHash: String? = BuildConfig.HEAD
|
||||||
|
@ -151,6 +150,7 @@ class MainApp : DaggerApplication() {
|
||||||
localAlertUtils.preSnoozeAlarms()
|
localAlertUtils.preSnoozeAlarms()
|
||||||
doMigrations()
|
doMigrations()
|
||||||
uel.log(UserEntry.Action.START_AAPS, UserEntry.Sources.Aaps)
|
uel.log(UserEntry.Action.START_AAPS, UserEntry.Sources.Aaps)
|
||||||
|
ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleListener.get())
|
||||||
|
|
||||||
// schedule widget update
|
// schedule widget update
|
||||||
refreshWidget = Runnable {
|
refreshWidget = Runnable {
|
||||||
|
|
|
@ -12,7 +12,7 @@ import com.google.android.material.datepicker.MaterialDatePicker
|
||||||
import com.jjoe64.graphview.GraphView
|
import com.jjoe64.graphview.GraphView
|
||||||
import dagger.android.HasAndroidInjector
|
import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.R
|
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.databinding.ActivityHistorybrowseBinding
|
||||||
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
|
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
|
||||||
import info.nightscout.androidaps.events.EventCustomCalculationFinished
|
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.toVisibility
|
||||||
import info.nightscout.androidaps.extensions.toVisibilityKeepSpace
|
import info.nightscout.androidaps.extensions.toVisibilityKeepSpace
|
||||||
import info.nightscout.androidaps.interfaces.ActivePlugin
|
import info.nightscout.androidaps.interfaces.ActivePlugin
|
||||||
import info.nightscout.androidaps.interfaces.Config
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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.plugins.general.overview.OverviewMenus
|
import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph
|
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph
|
||||||
import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData
|
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.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||||
import info.nightscout.androidaps.receivers.DataWorker
|
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.T
|
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.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||||
import info.nightscout.shared.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -50,23 +41,16 @@ import kotlin.math.min
|
||||||
|
|
||||||
class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
||||||
|
@Inject lateinit var historyBrowserData: HistoryBrowserData
|
||||||
@Inject lateinit var injector: HasAndroidInjector
|
@Inject lateinit var injector: HasAndroidInjector
|
||||||
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
||||||
@Inject lateinit var sp: SP
|
|
||||||
@Inject lateinit var profileFunction: ProfileFunction
|
|
||||||
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
||||||
@Inject lateinit var activePlugin: ActivePlugin
|
@Inject lateinit var activePlugin: ActivePlugin
|
||||||
@Inject lateinit var buildHelper: BuildHelper
|
@Inject lateinit var buildHelper: BuildHelper
|
||||||
@Inject lateinit var repository: AppRepository
|
|
||||||
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
||||||
@Inject lateinit var overviewMenus: OverviewMenus
|
@Inject lateinit var overviewMenus: OverviewMenus
|
||||||
@Inject lateinit var dateUtil: DateUtil
|
@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 context: Context
|
||||||
@Inject lateinit var dataWorker: DataWorker
|
|
||||||
@Inject lateinit var calculationWorkflow: CalculationWorkflow
|
@Inject lateinit var calculationWorkflow: CalculationWorkflow
|
||||||
|
|
||||||
private val disposable = CompositeDisposable()
|
private val disposable = CompositeDisposable()
|
||||||
|
@ -78,9 +62,6 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
private var rangeToDisplay = 24 // for graph
|
private var rangeToDisplay = 24 // for graph
|
||||||
// private var start: Long = 0
|
// private var start: Long = 0
|
||||||
|
|
||||||
private lateinit var iobCobCalculator: IobCobCalculatorPlugin
|
|
||||||
private lateinit var overviewData: OverviewData
|
|
||||||
|
|
||||||
private lateinit var binding: ActivityHistorybrowseBinding
|
private lateinit var binding: ActivityHistorybrowseBinding
|
||||||
private var destroyed = false
|
private var destroyed = false
|
||||||
|
|
||||||
|
@ -89,42 +70,12 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
binding = ActivityHistorybrowseBinding.inflate(layoutInflater)
|
binding = ActivityHistorybrowseBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
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 {
|
binding.left.setOnClickListener {
|
||||||
adjustTimeRange(overviewData.fromTime - T.hours(rangeToDisplay.toLong()).msecs())
|
adjustTimeRange(historyBrowserData.overviewData.fromTime - T.hours(rangeToDisplay.toLong()).msecs())
|
||||||
loadAll("onClickLeft")
|
loadAll("onClickLeft")
|
||||||
}
|
}
|
||||||
binding.right.setOnClickListener {
|
binding.right.setOnClickListener {
|
||||||
adjustTimeRange(overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs())
|
adjustTimeRange(historyBrowserData.overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs())
|
||||||
loadAll("onClickRight")
|
loadAll("onClickRight")
|
||||||
}
|
}
|
||||||
binding.end.setOnClickListener {
|
binding.end.setOnClickListener {
|
||||||
|
@ -138,7 +89,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
}
|
}
|
||||||
binding.zoom.setOnLongClickListener {
|
binding.zoom.setOnLongClickListener {
|
||||||
Calendar.getInstance().also { calendar ->
|
Calendar.getInstance().also { calendar ->
|
||||||
calendar.timeInMillis = overviewData.fromTime
|
calendar.timeInMillis = historyBrowserData.overviewData.fromTime
|
||||||
calendar[Calendar.MILLISECOND] = 0
|
calendar[Calendar.MILLISECOND] = 0
|
||||||
calendar[Calendar.SECOND] = 0
|
calendar[Calendar.SECOND] = 0
|
||||||
calendar[Calendar.MINUTE] = 0
|
calendar[Calendar.MINUTE] = 0
|
||||||
|
@ -151,13 +102,13 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
||||||
binding.date.setOnClickListener {
|
binding.date.setOnClickListener {
|
||||||
MaterialDatePicker.Builder.datePicker()
|
MaterialDatePicker.Builder.datePicker()
|
||||||
.setSelection(dateUtil.timeStampToUtcDateMillis(overviewData.fromTime))
|
.setSelection(dateUtil.timeStampToUtcDateMillis(historyBrowserData.overviewData.fromTime))
|
||||||
.setTheme(R.style.DatePicker)
|
.setTheme(R.style.DatePicker)
|
||||||
.build()
|
.build()
|
||||||
.apply {
|
.apply {
|
||||||
addOnPositiveButtonClickListener { selection ->
|
addOnPositiveButtonClickListener { selection ->
|
||||||
setTime(dateUtil.mergeUtcDateToTimestamp(overviewData.fromTime, selection))
|
setTime(dateUtil.mergeUtcDateToTimestamp(historyBrowserData.overviewData.fromTime, selection))
|
||||||
binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
|
binding.date.text = dateUtil.dateAndTimeString(historyBrowserData.overviewData.fromTime)
|
||||||
loadAll("onClickDate")
|
loadAll("onClickDate")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,8 +131,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
prepareGraphsIfNeeded(overviewMenus.setting.size)
|
prepareGraphsIfNeeded(overviewMenus.setting.size)
|
||||||
savedInstanceState?.let { bundle ->
|
savedInstanceState?.let { bundle ->
|
||||||
rangeToDisplay = bundle.getInt("rangeToDisplay", 0)
|
rangeToDisplay = bundle.getInt("rangeToDisplay", 0)
|
||||||
overviewData.fromTime = bundle.getLong("start", 0)
|
historyBrowserData.overviewData.fromTime = bundle.getLong("start", 0)
|
||||||
overviewData.toTime = bundle.getLong("end", 0)
|
historyBrowserData.overviewData.toTime = bundle.getLong("end", 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,11 +171,11 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
.observeOn(aapsSchedulers.main)
|
.observeOn(aapsSchedulers.main)
|
||||||
.subscribe({
|
.subscribe({
|
||||||
rangeToDisplay = it.hours
|
rangeToDisplay = it.hours
|
||||||
setTime(overviewData.fromTime)
|
setTime(historyBrowserData.overviewData.fromTime)
|
||||||
loadAll("rangeChange")
|
loadAll("rangeChange")
|
||||||
}, fabricPrivacy::logException)
|
}, fabricPrivacy::logException)
|
||||||
|
updateCalcProgress(100)
|
||||||
if (overviewData.fromTime == 0L) {
|
if (historyBrowserData.overviewData.fromTime == 0L) {
|
||||||
// set start of current day
|
// set start of current day
|
||||||
setTime(dateUtil.now())
|
setTime(dateUtil.now())
|
||||||
loadAll("onResume")
|
loadAll("onResume")
|
||||||
|
@ -236,8 +187,8 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
super.onSaveInstanceState(outState)
|
super.onSaveInstanceState(outState)
|
||||||
outState.putInt("rangeToDisplay", rangeToDisplay)
|
outState.putInt("rangeToDisplay", rangeToDisplay)
|
||||||
outState.putLong("start", overviewData.fromTime)
|
outState.putLong("start", historyBrowserData.overviewData.fromTime)
|
||||||
outState.putLong("end", overviewData.toTime)
|
outState.putLong("end", historyBrowserData.overviewData.toTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareGraphsIfNeeded(numOfGraphs: Int) {
|
private fun prepareGraphsIfNeeded(numOfGraphs: Int) {
|
||||||
|
@ -293,18 +244,18 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun adjustTimeRange(start: Long) {
|
private fun adjustTimeRange(start: Long) {
|
||||||
overviewData.fromTime = start
|
historyBrowserData.overviewData.fromTime = start
|
||||||
overviewData.toTime = overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs()
|
historyBrowserData.overviewData.toTime = historyBrowserData.overviewData.fromTime + T.hours(rangeToDisplay.toLong()).msecs()
|
||||||
overviewData.endTime = overviewData.toTime
|
historyBrowserData.overviewData.endTime = historyBrowserData.overviewData.toTime
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun runCalculation(from: String) {
|
private fun runCalculation(from: String) {
|
||||||
calculationWorkflow.runCalculation(
|
calculationWorkflow.runCalculation(
|
||||||
CalculationWorkflow.HISTORY_CALCULATION,
|
CalculationWorkflow.HISTORY_CALCULATION,
|
||||||
iobCobCalculator,
|
historyBrowserData.iobCobCalculator,
|
||||||
overviewData,
|
historyBrowserData.overviewData,
|
||||||
from,
|
from,
|
||||||
overviewData.toTime,
|
historyBrowserData.overviewData.toTime,
|
||||||
bgDataReload = true,
|
bgDataReload = true,
|
||||||
limitDataToOldestAvailable = false,
|
limitDataToOldestAvailable = false,
|
||||||
cause = EventCustomCalculationFinished(),
|
cause = EventCustomCalculationFinished(),
|
||||||
|
@ -325,7 +276,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateDate() {
|
private fun updateDate() {
|
||||||
binding.date.text = dateUtil.dateAndTimeString(overviewData.fromTime)
|
binding.date.text = dateUtil.dateAndTimeString(historyBrowserData.overviewData.fromTime)
|
||||||
binding.zoom.text = rangeToDisplay.toString()
|
binding.zoom.text = rangeToDisplay.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,9 +288,9 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
updateDate()
|
updateDate()
|
||||||
|
|
||||||
val pump = activePlugin.activePump
|
val pump = activePlugin.activePump
|
||||||
val graphData = GraphData(injector, binding.bgGraph, overviewData)
|
val graphData = GraphData(injector, binding.bgGraph, historyBrowserData.overviewData)
|
||||||
val menuChartSettings = overviewMenus.setting
|
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)
|
graphData.addBgReadings(menuChartSettings[0][OverviewMenus.CharType.PRE.ordinal], context)
|
||||||
if (buildHelper.isDev()) graphData.addBucketedData()
|
if (buildHelper.isDev()) graphData.addBucketedData()
|
||||||
graphData.addTreatments(context)
|
graphData.addTreatments(context)
|
||||||
|
@ -355,7 +306,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
||||||
// set manual x bounds to have nice steps
|
// set manual x bounds to have nice steps
|
||||||
graphData.setNumVerticalLabels()
|
graphData.setNumVerticalLabels()
|
||||||
graphData.formatAxis(overviewData.fromTime, overviewData.endTime)
|
graphData.formatAxis(historyBrowserData.overviewData.fromTime, historyBrowserData.overviewData.endTime)
|
||||||
|
|
||||||
graphData.performUpdate()
|
graphData.performUpdate()
|
||||||
|
|
||||||
|
@ -365,7 +316,7 @@ class HistoryBrowseActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
for (g in 0 until min(secondaryGraphs.size, menuChartSettings.size + 1)) {
|
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 useABSForScale = false
|
||||||
var useIobForScale = false
|
var useIobForScale = false
|
||||||
var useCobForScale = 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)
|
if (menuChartSettings[g + 1][OverviewMenus.CharType.DEVSLOPE.ordinal] && buildHelper.isDev()) secondGraphData.addDeviationSlope(useDSForScale, 1.0)
|
||||||
|
|
||||||
// set manual x bounds to have nice steps
|
// 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)
|
secondGraphData.addNowLine(now)
|
||||||
secondaryGraphsData.add(secondGraphData)
|
secondaryGraphsData.add(secondGraphData)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,6 +22,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
|
import info.nightscout.androidaps.utils.Round
|
||||||
import info.nightscout.androidaps.utils.stats.TddCalculator
|
import info.nightscout.androidaps.utils.stats.TddCalculator
|
||||||
import info.nightscout.shared.SafeParse
|
import info.nightscout.shared.SafeParse
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
|
@ -36,6 +37,7 @@ import java.io.IOException
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import kotlin.math.ln
|
||||||
|
|
||||||
class DetermineBasalAdapterSMBDynamicISFJS internal constructor(private val scriptReader: ScriptReader, private val injector: HasAndroidInjector) : DetermineBasalAdapterInterface {
|
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("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)))
|
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));
|
//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))
|
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));
|
//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("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("maxSMBBasalMinutes", sp.getInt(R.string.key_smbmaxminutes, SMBDefaults.maxSMBBasalMinutes))
|
||||||
this.profile.put("maxUAMSMBBasalMinutes", sp.getInt(R.string.key_uamsmbmaxminutes, SMBDefaults.maxUAMSMBBasalMinutes))
|
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))
|
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.
|
//set the min SMB amount to be the amount set by the pump.
|
||||||
this.profile.put("bolus_increment", pumpBolusStep)
|
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("current_basal", basalRate)
|
||||||
this.profile.put("temptargetSet", tempTargetSet)
|
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_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("autosens_min", SafeParse.stringToDouble(sp.getString(R.string.key_openapsama_autosens_min, "0.7")))
|
||||||
this.profile.put("openapsama_useautosens", sp.getBoolean(R.string.key_openapsama_useautosens, false))
|
|
||||||
//set the min SMB amount to be the amount set by the pump.
|
//set the min SMB amount to be the amount set by the pump.
|
||||||
if (profileFunction.getUnits() == GlucoseUnit.MMOL) {
|
if (profileFunction.getUnits() == GlucoseUnit.MMOL) {
|
||||||
this.profile.put("out_units", "mmol/L")
|
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("lastBolusTime", mealData.lastBolusTime)
|
||||||
this.mealData.put("lastCarbTime", mealData.lastCarbTime)
|
this.mealData.put("lastCarbTime", mealData.lastCarbTime)
|
||||||
|
|
||||||
this.mealData.put("TDDAIMI1", tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount)
|
val tdd1D = tddCalculator.averageTDD(tddCalculator.calculate(1))?.totalAmount
|
||||||
this.mealData.put("TDDAIMI7", tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount)
|
val tdd7D = tddCalculator.averageTDD(tddCalculator.calculate(7))?.totalAmount
|
||||||
this.mealData.put("TDDLast4", tddCalculator.calculateDaily(-4, 0).totalAmount)
|
val tddLast24H = tddCalculator.calculateDaily(-24, 0).totalAmount
|
||||||
this.mealData.put("TDD4to8", tddCalculator.calculateDaily(-8, -4).totalAmount)
|
val tddLast4H = tddCalculator.calculateDaily(-4, 0).totalAmount
|
||||||
this.mealData.put("TDD24", tddCalculator.calculateDaily(-24, 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()) {
|
// console.log("Insulin Peak = " + insulin.peak + "; ");
|
||||||
autosensData.put("ratio", autosensDataRatio)
|
|
||||||
} else {
|
val insulin = activePlugin.activeInsulin
|
||||||
autosensData.put("ratio", 1.0)
|
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
|
this.microBolusAllowed = microBolusAllowed
|
||||||
smbAlwaysAllowed = advancedFiltering
|
smbAlwaysAllowed = advancedFiltering
|
||||||
currentTime = now
|
currentTime = now
|
||||||
|
|
|
@ -312,7 +312,7 @@ class ActionsFragment : DaggerFragment() {
|
||||||
for (customAction in customActions) {
|
for (customAction in customActions) {
|
||||||
if (!customAction.isEnabled) continue
|
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)
|
btn.text = rh.gs(customAction.name)
|
||||||
|
|
||||||
val layoutParams = LinearLayout.LayoutParams(
|
val layoutParams = LinearLayout.LayoutParams(
|
||||||
|
|
|
@ -115,6 +115,7 @@ class AutotuneFragment : DaggerFragment() {
|
||||||
}
|
}
|
||||||
autotunePlugin.selectedProfile = profileName
|
autotunePlugin.selectedProfile = profileName
|
||||||
resetParam()
|
resetParam()
|
||||||
|
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
|
||||||
}
|
}
|
||||||
updateGui()
|
updateGui()
|
||||||
}
|
}
|
||||||
|
@ -275,6 +276,7 @@ class AutotuneFragment : DaggerFragment() {
|
||||||
.observeOn(aapsSchedulers.main)
|
.observeOn(aapsSchedulers.main)
|
||||||
.subscribe({ updateGui() }, fabricPrivacy::logException)
|
.subscribe({ updateGui() }, fabricPrivacy::logException)
|
||||||
checkNewDay()
|
checkNewDay()
|
||||||
|
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
|
||||||
updateGui()
|
updateGui()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +289,6 @@ class AutotuneFragment : DaggerFragment() {
|
||||||
@Synchronized
|
@Synchronized
|
||||||
private fun updateGui() {
|
private fun updateGui() {
|
||||||
_binding ?: return
|
_binding ?: return
|
||||||
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
|
|
||||||
profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil)
|
profileStore = activePlugin.activeProfileSource.profile ?: ProfileStore(injector, JSONObject(), dateUtil)
|
||||||
profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString()
|
profileName = if (binding.profileList.text.toString() == rh.gs(R.string.active)) "" else binding.profileList.text.toString()
|
||||||
profileFunction.getProfile()?.let { currentProfile ->
|
profileFunction.getProfile()?.let { currentProfile ->
|
||||||
|
@ -387,7 +388,7 @@ class AutotuneFragment : DaggerFragment() {
|
||||||
try {
|
try {
|
||||||
if (autotunePlugin.calculationRunning)
|
if (autotunePlugin.calculationRunning)
|
||||||
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
|
binding.tuneDays.value = autotunePlugin.lastNbDays.toDouble()
|
||||||
if (binding.tuneDays.value != autotunePlugin.lastNbDays.toDouble()) {
|
if (binding.tuneDays.text != autotunePlugin.lastNbDays) {
|
||||||
autotunePlugin.lastNbDays = binding.tuneDays.text
|
autotunePlugin.lastNbDays = binding.tuneDays.text
|
||||||
resetParam(false)
|
resetParam(false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -381,9 +381,11 @@ open class AutotuneIob @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TherapyEvent.Type.COMBO_BOLUS ->
|
TherapyEvent.Type.COMBO_BOLUS ->
|
||||||
extendedBolus?.let {
|
extendedBolus?.let { ebr ->
|
||||||
val profile = profileFunction.getProfile(it.timestamp)
|
val profile = profileFunction.getProfile(ebr.timestamp)
|
||||||
it.toJson(true, profile!!, dateUtil)
|
profile?.let {
|
||||||
|
ebr.toJson(true, it, dateUtil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TherapyEvent.Type.CORRECTION_BOLUS -> bolusTreatment?.toJson(true, dateUtil)
|
TherapyEvent.Type.CORRECTION_BOLUS -> bolusTreatment?.toJson(true, dateUtil)
|
||||||
TherapyEvent.Type.CARBS_CORRECTION -> carbsTreatment?.toJson(true, dateUtil)
|
TherapyEvent.Type.CARBS_CORRECTION -> carbsTreatment?.toJson(true, dateUtil)
|
||||||
|
|
|
@ -120,7 +120,6 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
@Inject lateinit var repository: AppRepository
|
@Inject lateinit var repository: AppRepository
|
||||||
@Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider
|
@Inject lateinit var glucoseStatusProvider: GlucoseStatusProvider
|
||||||
@Inject lateinit var overviewData: OverviewData
|
@Inject lateinit var overviewData: OverviewData
|
||||||
@Inject lateinit var overviewPlugin: OverviewPlugin
|
|
||||||
@Inject lateinit var automationPlugin: AutomationPlugin
|
@Inject lateinit var automationPlugin: AutomationPlugin
|
||||||
@Inject lateinit var bgQualityCheckPlugin: BgQualityCheckPlugin
|
@Inject lateinit var bgQualityCheckPlugin: BgQualityCheckPlugin
|
||||||
|
|
||||||
|
@ -417,7 +416,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
uel.log(Action.ACCEPTS_TEMP_BASAL, Sources.Overview)
|
uel.log(Action.ACCEPTS_TEMP_BASAL, Sources.Overview)
|
||||||
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(Constants.notificationID)
|
(context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(Constants.notificationID)
|
||||||
rxBus.send(EventMobileToWear(EventData.CancelNotification(dateUtil.now())))
|
rxBus.send(EventMobileToWear(EventData.CancelNotification(dateUtil.now())))
|
||||||
Thread { loop.acceptChangeRequest() }.run()
|
Thread { loop.acceptChangeRequest() }.start()
|
||||||
binding.buttonsLayout.acceptTempButton.visibility = View.GONE
|
binding.buttonsLayout.acceptTempButton.visibility = View.GONE
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -582,7 +581,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
for (event in events)
|
for (event in events)
|
||||||
if (event.isEnabled && event.trigger.shouldRun())
|
if (event.isEnabled && event.trigger.shouldRun())
|
||||||
context?.let { context ->
|
context?.let { context ->
|
||||||
SingleClickButton(context).also {
|
SingleClickButton(context, null, R.attr.customBtnStyle).also {
|
||||||
it.setTextColor(rh.gac(context, R.attr.treatmentButton))
|
it.setTextColor(rh.gac(context, R.attr.treatmentButton))
|
||||||
it.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10f)
|
it.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10f)
|
||||||
it.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f).also { l ->
|
it.layoutParams = LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f).also { l ->
|
||||||
|
@ -827,7 +826,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateProfile() {
|
private fun updateProfile() {
|
||||||
val profile = profileFunction.getProfile()
|
val profile = profileFunction.getProfile()
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
_binding ?: return@runOnUiThread
|
_binding ?: return@runOnUiThread
|
||||||
|
@ -885,7 +884,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateTime() {
|
private fun updateTime() {
|
||||||
_binding ?: return
|
_binding ?: return
|
||||||
binding.infoLayout.time.text = dateUtil.timeString(dateUtil.now())
|
binding.infoLayout.time.text = dateUtil.timeString(dateUtil.now())
|
||||||
// Status lights
|
// Status lights
|
||||||
|
@ -915,7 +914,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateIobCob() {
|
private fun updateIobCob() {
|
||||||
val iobText = overviewData.iobText(iobCobCalculator)
|
val iobText = overviewData.iobText(iobCobCalculator)
|
||||||
val iobDialogText = overviewData.iobDialogText(iobCobCalculator)
|
val iobDialogText = overviewData.iobDialogText(iobCobCalculator)
|
||||||
val displayText = overviewData.cobInfo(iobCobCalculator).displayText(rh, dateUtil, buildHelper.isEngineeringMode())
|
val displayText = overviewData.cobInfo(iobCobCalculator).displayText(rh, dateUtil, buildHelper.isEngineeringMode())
|
||||||
|
@ -999,6 +998,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
val pump = activePlugin.activePump
|
val pump = activePlugin.activePump
|
||||||
val graphData = GraphData(injector, binding.graphsLayout.bgGraph, overviewData)
|
val graphData = GraphData(injector, binding.graphsLayout.bgGraph, overviewData)
|
||||||
val menuChartSettings = overviewMenus.setting
|
val menuChartSettings = overviewMenus.setting
|
||||||
|
if (menuChartSettings.isEmpty()) return
|
||||||
graphData.addInRangeArea(overviewData.fromTime, overviewData.endTime, defaultValueHelper.determineLowLine(), defaultValueHelper.determineHighLine())
|
graphData.addInRangeArea(overviewData.fromTime, overviewData.endTime, defaultValueHelper.determineLowLine(), defaultValueHelper.determineHighLine())
|
||||||
graphData.addBgReadings(menuChartSettings[0][OverviewMenus.CharType.PRE.ordinal], context)
|
graphData.addBgReadings(menuChartSettings[0][OverviewMenus.CharType.PRE.ordinal], context)
|
||||||
if (buildHelper.isDev()) graphData.addBucketedData()
|
if (buildHelper.isDev()) graphData.addBucketedData()
|
||||||
|
@ -1084,7 +1084,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
|
|
||||||
private fun updateSensitivity() {
|
private fun updateSensitivity() {
|
||||||
_binding ?: return
|
_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)
|
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_swap_vert_black_48dp_green)
|
||||||
} else {
|
} else {
|
||||||
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_x_swap_vert)
|
binding.infoLayout.sensitivityIcon.setImageResource(R.drawable.ic_x_swap_vert)
|
||||||
|
|
|
@ -69,14 +69,16 @@ class OverviewMenus @Inject constructor(
|
||||||
private var _setting: MutableList<Array<Boolean>> = ArrayList()
|
private var _setting: MutableList<Array<Boolean>> = ArrayList()
|
||||||
|
|
||||||
val setting: List<Array<Boolean>>
|
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() {
|
private fun storeGraphConfig() {
|
||||||
val sts = Gson().toJson(_setting)
|
val sts = Gson().toJson(_setting)
|
||||||
sp.putString(R.string.key_graphconfig, sts)
|
sp.putString(R.string.key_graphconfig, sts)
|
||||||
aapsLogger.debug(sts)
|
aapsLogger.debug(sts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Synchronized
|
||||||
fun loadGraphConfig() {
|
fun loadGraphConfig() {
|
||||||
val sts = sp.getString(R.string.key_graphconfig, "")
|
val sts = sp.getString(R.string.key_graphconfig, "")
|
||||||
if (sts.isNotEmpty()) {
|
if (sts.isNotEmpty()) {
|
||||||
|
@ -115,7 +117,7 @@ class OverviewMenus @Inject constructor(
|
||||||
val used = arrayListOf<Int>()
|
val used = arrayListOf<Int>()
|
||||||
|
|
||||||
for (g in 0 until numOfGraphs) {
|
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 -------")
|
val dividerItem = popup.menu.add(Menu.NONE, g, Menu.NONE, "------- ${rh.gs(R.string.graph_menu_divider_header)} $g -------")
|
||||||
dividerItem.isCheckable = true
|
dividerItem.isCheckable = true
|
||||||
dividerItem.isChecked = true
|
dividerItem.isChecked = true
|
||||||
|
@ -150,6 +152,7 @@ class OverviewMenus @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
popup.setOnMenuItemClickListener {
|
popup.setOnMenuItemClickListener {
|
||||||
|
synchronized(this) {
|
||||||
try {
|
try {
|
||||||
// id < 100 graph header - divider 1, 2, 3 .....
|
// id < 100 graph header - divider 1, 2, 3 .....
|
||||||
when {
|
when {
|
||||||
|
@ -181,6 +184,7 @@ class OverviewMenus @Inject constructor(
|
||||||
} catch (exception: Exception) {
|
} catch (exception: Exception) {
|
||||||
fabricPrivacy.logException(exception)
|
fabricPrivacy.logException(exception)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
storeGraphConfig()
|
storeGraphConfig()
|
||||||
setupChartMenu(context, chartButton)
|
setupChartMenu(context, chartButton)
|
||||||
rxBus.send(EventRefreshOverview("OnMenuItemClickListener", now = true))
|
rxBus.send(EventRefreshOverview("OnMenuItemClickListener", now = true))
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package info.nightscout.androidaps.plugins.general.wear
|
package info.nightscout.androidaps.plugins.general.wear
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
|
||||||
import dagger.android.HasAndroidInjector
|
import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
|
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.PluginBase
|
||||||
import info.nightscout.androidaps.interfaces.PluginDescription
|
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||||
import info.nightscout.androidaps.interfaces.PluginType
|
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.aps.loop.events.EventLoopUpdateGui
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
|
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissBolusProgressIfRunning
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
|
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.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.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
|
@ -37,7 +36,8 @@ class WearPlugin @Inject constructor(
|
||||||
private val fabricPrivacy: FabricPrivacy,
|
private val fabricPrivacy: FabricPrivacy,
|
||||||
private val rxBus: RxBus,
|
private val rxBus: RxBus,
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val dataHandlerMobile: DataHandlerMobile
|
private val dataHandlerMobile: DataHandlerMobile,
|
||||||
|
val dataLayerListenerServiceMobileHelper: DataLayerListenerServiceMobileHelper
|
||||||
|
|
||||||
) : PluginBase(
|
) : PluginBase(
|
||||||
PluginDescription()
|
PluginDescription()
|
||||||
|
@ -57,7 +57,7 @@ class WearPlugin @Inject constructor(
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
context.startService(Intent(context, DataLayerListenerServiceMobile::class.java))
|
dataLayerListenerServiceMobileHelper.startService(context)
|
||||||
disposable += rxBus
|
disposable += rxBus
|
||||||
.toObservable(EventDismissBolusProgressIfRunning::class.java)
|
.toObservable(EventDismissBolusProgressIfRunning::class.java)
|
||||||
.observeOn(aapsSchedulers.io)
|
.observeOn(aapsSchedulers.io)
|
||||||
|
@ -94,6 +94,6 @@ class WearPlugin @Inject constructor(
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
disposable.clear()
|
disposable.clear()
|
||||||
super.onStop()
|
super.onStop()
|
||||||
context.stopService(Intent(context, DataLayerListenerServiceMobile::class.java))
|
dataLayerListenerServiceMobileHelper.stopService(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.androidaps.plugins.general.wear.wearintegration
|
package info.nightscout.androidaps.plugins.general.wear.wearintegration
|
||||||
|
|
||||||
|
import android.os.Binder
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
import com.google.android.gms.tasks.Tasks
|
import com.google.android.gms.tasks.Tasks
|
||||||
|
@ -10,14 +11,12 @@ import info.nightscout.androidaps.database.AppRepository
|
||||||
import info.nightscout.androidaps.events.EventMobileToWear
|
import info.nightscout.androidaps.events.EventMobileToWear
|
||||||
import info.nightscout.androidaps.interfaces.*
|
import info.nightscout.androidaps.interfaces.*
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
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.WearPlugin
|
||||||
import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui
|
import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui
|
||||||
import info.nightscout.androidaps.receivers.ReceiverStatusStore
|
import info.nightscout.androidaps.receivers.ReceiverStatusStore
|
||||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
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.AAPSLogger
|
||||||
import info.nightscout.shared.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
|
@ -38,9 +37,7 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
|
||||||
@Inject lateinit var loop: Loop
|
@Inject lateinit var loop: Loop
|
||||||
@Inject lateinit var wearPlugin: WearPlugin
|
@Inject lateinit var wearPlugin: WearPlugin
|
||||||
@Inject lateinit var sp: SP
|
@Inject lateinit var sp: SP
|
||||||
@Inject lateinit var quickWizard: QuickWizard
|
|
||||||
@Inject lateinit var config: Config
|
@Inject lateinit var config: Config
|
||||||
@Inject lateinit var nsDeviceStatus: NSDeviceStatus
|
|
||||||
@Inject lateinit var receiverStatusStore: ReceiverStatusStore
|
@Inject lateinit var receiverStatusStore: ReceiverStatusStore
|
||||||
@Inject lateinit var repository: AppRepository
|
@Inject lateinit var repository: AppRepository
|
||||||
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
@Inject lateinit var defaultValueHelper: DefaultValueHelper
|
||||||
|
@ -48,6 +45,11 @@ class DataLayerListenerServiceMobile : WearableListenerService() {
|
||||||
@Inject lateinit var rxBus: RxBus
|
@Inject lateinit var rxBus: RxBus
|
||||||
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
||||||
|
|
||||||
|
inner class LocalBinder : Binder() {
|
||||||
|
|
||||||
|
fun getService(): DataLayerListenerServiceMobile = this@DataLayerListenerServiceMobile
|
||||||
|
}
|
||||||
|
|
||||||
private val dataClient by lazy { Wearable.getDataClient(this) }
|
private val dataClient by lazy { Wearable.getDataClient(this) }
|
||||||
private val messageClient by lazy { Wearable.getMessageClient(this) }
|
private val messageClient by lazy { Wearable.getMessageClient(this) }
|
||||||
private val capabilityClient by lazy { Wearable.getCapabilityClient(this) }
|
private val capabilityClient by lazy { Wearable.getCapabilityClient(this) }
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
||||||
|
}
|
|
@ -97,11 +97,11 @@ class IobCobOref1Worker(
|
||||||
val bucketedData = ads.bucketedData
|
val bucketedData = ads.bucketedData
|
||||||
val autosensDataTable = ads.autosensDataTable
|
val autosensDataTable = ads.autosensDataTable
|
||||||
if (bucketedData == null || bucketedData.size < 3) {
|
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}"))
|
return Result.success(workDataOf("Error" to "Aborting calculation thread (No bucketed data available): ${data.from}"))
|
||||||
}
|
}
|
||||||
val prevDataTime = ads.roundUpTime(bucketedData[bucketedData.size - 3].timestamp)
|
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]
|
var previous = autosensDataTable[prevDataTime]
|
||||||
// start from oldest to be able sub cob
|
// start from oldest to be able sub cob
|
||||||
for (i in bucketedData.size - 4 downTo 0) {
|
for (i in bucketedData.size - 4 downTo 0) {
|
||||||
|
@ -156,15 +156,15 @@ class IobCobOref1Worker(
|
||||||
val hourAgoData = ads.getAutosensDataAtTime(hourAgo)
|
val hourAgoData = ads.getAutosensDataAtTime(hourAgo)
|
||||||
if (hourAgoData != null) {
|
if (hourAgoData != null) {
|
||||||
val initialIndex = autosensDataTable.indexOfKey(hourAgoData.time)
|
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
|
var past = 1
|
||||||
try {
|
try {
|
||||||
while (past < 12) {
|
while (past < 12) {
|
||||||
val ad = autosensDataTable.valueAt(initialIndex + past)
|
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) {
|
if (ad == null) {
|
||||||
aapsLogger.debug(LTag.AUTOSENS, autosensDataTable.toString())
|
aapsLogger.debug(LTag.AUTOSENS, {autosensDataTable.toString()})
|
||||||
aapsLogger.debug(LTag.AUTOSENS, bucketedData.toString())
|
aapsLogger.debug(LTag.AUTOSENS, {bucketedData.toString()})
|
||||||
//aapsLogger.debug(LTag.AUTOSENS, iobCobCalculatorPlugin.getBgReadingsDataTable().toString())
|
//aapsLogger.debug(LTag.AUTOSENS, iobCobCalculatorPlugin.getBgReadingsDataTable().toString())
|
||||||
val notification = Notification(Notification.SEND_LOGFILES, rh.gs(R.string.sendlogfiles), Notification.LOW)
|
val notification = Notification(Notification.SEND_LOGFILES, rh.gs(R.string.sendlogfiles), Notification.LOW)
|
||||||
rxBus.send(EventNewNotification(notification))
|
rxBus.send(EventNewNotification(notification))
|
||||||
|
@ -319,14 +319,12 @@ class IobCobOref1Worker(
|
||||||
if (bgTime < dateUtil.now()) autosensDataTable.put(bgTime, autosensData)
|
if (bgTime < dateUtil.now()) autosensDataTable.put(bgTime, autosensData)
|
||||||
aapsLogger.debug(
|
aapsLogger.debug(
|
||||||
LTag.AUTOSENS,
|
LTag.AUTOSENS,
|
||||||
"Running detectSensitivity from: " + dateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + dateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + ads.lastDataTime(
|
{"Running detectSensitivity from: " + dateUtil.dateAndTimeString(oldestTimeWithData) + " to: " + dateUtil.dateAndTimeString(bgTime) + " lastDataTime:" + ads.lastDataTime(dateUtil)}
|
||||||
dateUtil
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
val sensitivity = activePlugin.activeSensitivity.detectSensitivity(ads, oldestTimeWithData, bgTime)
|
val sensitivity = activePlugin.activeSensitivity.detectSensitivity(ads, oldestTimeWithData, bgTime)
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Sensitivity result: $sensitivity")
|
aapsLogger.debug(LTag.AUTOSENS, "Sensitivity result: $sensitivity")
|
||||||
autosensData.autosensResult = sensitivity
|
autosensData.autosensResult = sensitivity
|
||||||
aapsLogger.debug(LTag.AUTOSENS, autosensData.toString())
|
aapsLogger.debug(LTag.AUTOSENS, {autosensData.toString()})
|
||||||
}
|
}
|
||||||
data.iobCobCalculator.ads = ads
|
data.iobCobCalculator.ads = ads
|
||||||
Thread {
|
Thread {
|
||||||
|
@ -335,7 +333,7 @@ class IobCobOref1Worker(
|
||||||
}.start()
|
}.start()
|
||||||
} finally {
|
} finally {
|
||||||
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.IOB_COB_OREF, 100, data.cause))
|
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)
|
profiler.log(LTag.AUTOSENS, "IobCobOref1Thread", start)
|
||||||
}
|
}
|
||||||
return Result.success()
|
return Result.success()
|
||||||
|
|
|
@ -89,6 +89,7 @@ class GlunovoPlugin @Inject constructor(
|
||||||
private fun handleNewData() {
|
private fun handleNewData() {
|
||||||
if (!isEnabled()) return
|
if (!isEnabled()) return
|
||||||
|
|
||||||
|
try {
|
||||||
context.contentResolver.query(contentUri, null, null, null, null)?.let { cr ->
|
context.contentResolver.query(contentUri, null, null, null, null)?.let { cr ->
|
||||||
val glucoseValues = mutableListOf<CgmSourceTransaction.TransactionGlucoseValue>()
|
val glucoseValues = mutableListOf<CgmSourceTransaction.TransactionGlucoseValue>()
|
||||||
val calibrations = mutableListOf<CgmSourceTransaction.Calibration>()
|
val calibrations = mutableListOf<CgmSourceTransaction.Calibration>()
|
||||||
|
@ -164,6 +165,9 @@ class GlunovoPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: SecurityException) {
|
||||||
|
aapsLogger.error(LTag.CORE, "Exception", e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun shouldUploadToNs(glucoseValue: GlucoseValue): Boolean =
|
override fun shouldUploadToNs(glucoseValue: GlucoseValue): Boolean =
|
||||||
|
|
|
@ -50,12 +50,20 @@ class AndroidPermission @Inject constructor(
|
||||||
}
|
}
|
||||||
if (test) {
|
if (test) {
|
||||||
if (activity is DaggerAppCompatActivityWithResult)
|
if (activity is DaggerAppCompatActivityWithResult)
|
||||||
|
try {
|
||||||
activity.requestMultiplePermissions.launch(permissions)
|
activity.requestMultiplePermissions.launch(permissions)
|
||||||
|
} catch (ignored: IllegalStateException) {
|
||||||
|
ToastUtils.errorToast(activity, rh.gs(R.string.error_asking_for_permissions))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (testBattery) {
|
if (testBattery) {
|
||||||
try {
|
try {
|
||||||
if (activity is DaggerAppCompatActivityWithResult)
|
if (activity is DaggerAppCompatActivityWithResult)
|
||||||
|
try {
|
||||||
activity.callForBatteryOptimization.launch(null)
|
activity.callForBatteryOptimization.launch(null)
|
||||||
|
} catch (ignored: IllegalStateException) {
|
||||||
|
ToastUtils.errorToast(activity, rh.gs(R.string.error_asking_for_permissions))
|
||||||
|
}
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
permissionBatteryOptimizationFailed = true
|
permissionBatteryOptimizationFailed = true
|
||||||
OKDialog.show(activity, rh.gs(R.string.permission), rh.gs(R.string.alert_dialog_permission_battery_optimization_failed)) { activity.recreate() }
|
OKDialog.show(activity, rh.gs(R.string.permission), rh.gs(R.string.alert_dialog_permission_battery_optimization_failed)) { activity.recreate() }
|
||||||
|
@ -145,8 +153,10 @@ class AndroidPermission @Inject constructor(
|
||||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
|
||||||
// Show alert dialog to the user saying a separate permission is needed
|
// Show alert dialog to the user saying a separate permission is needed
|
||||||
// Launch the settings activity if the user prefers
|
// Launch the settings activity if the user prefers
|
||||||
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
|
val intent = Intent(
|
||||||
Uri.parse("package:" + activity.packageName))
|
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
|
||||||
|
Uri.parse("package:" + activity.packageName)
|
||||||
|
)
|
||||||
activity.startActivity(intent)
|
activity.startActivity(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,7 +204,7 @@ class Widget : AppWidgetProvider() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateProfile(views: RemoteViews) {
|
private fun updateProfile(views: RemoteViews) {
|
||||||
val profileTextColor =
|
val profileTextColor =
|
||||||
profileFunction.getProfile()?.let {
|
profileFunction.getProfile()?.let {
|
||||||
if (it is ProfileSealed.EPS) {
|
if (it is ProfileSealed.EPS) {
|
||||||
|
@ -226,7 +226,7 @@ class Widget : AppWidgetProvider() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateSensitivity(views: RemoteViews) {
|
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)
|
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_swap_vert_black_48dp_green)
|
||||||
else
|
else
|
||||||
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_x_swap_vert)
|
views.setImageViewResource(R.id.sensitivity_icon, R.drawable.ic_x_swap_vert)
|
||||||
|
@ -256,7 +256,7 @@ class Widget : AppWidgetProvider() {
|
||||||
|
|
||||||
internal fun updateWidget(context: Context) {
|
internal fun updateWidget(context: Context) {
|
||||||
context.sendBroadcast(Intent().also {
|
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
|
it.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
|
||||||
})
|
})
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?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:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -11,17 +11,6 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
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
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -82,8 +71,7 @@
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="0dp"
|
android:layout_height="300dp">
|
||||||
android:layout_weight="1">
|
|
||||||
|
|
||||||
<com.jjoe64.graphview.GraphView
|
<com.jjoe64.graphview.GraphView
|
||||||
android:id="@+id/bg_graph"
|
android:id="@+id/bg_graph"
|
||||||
|
@ -112,4 +100,4 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
|
@ -1046,4 +1046,5 @@
|
||||||
<string name="blocked_by_charging">Zablokováno možností nabíjení</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="blocked_by_connectivity">Zablokováno možností připojení</string>
|
||||||
<string name="no_watch_connected">(Žádné hodinky nejsou připojeny)</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>
|
</resources>
|
||||||
|
|
|
@ -123,6 +123,7 @@
|
||||||
<string name="sensitivity_cannula">Notering af kanyleskift vil nulstille Autosens ratio tilbage til 100%.</string>
|
<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_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_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_label">Kulhydrat indtastningsfejl</string>
|
||||||
<string name="wrongcarbs_whattodo">Hvad gør du, hvis du har lavet en forkert kulhydrat indtastning?</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>
|
<string name="wrongcarbs_treatmentstab">Slet den forkerte indtastning i Behandlinger og indtast korrekte nye kulhydrat værdier.</string>
|
||||||
|
@ -135,6 +136,19 @@
|
||||||
<string name="wronginsulin_compare">Sammenlign værdier i AndroidAPS og pumpehistorik (hvis pumpen understøtter dette).</string>
|
<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_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="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_label">Insulin om bord (IOB)</string>
|
||||||
<string name="iob_value">IOB-værdi påvirkes af midlertidige basaler.</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_hightemp">Høj midlertidlig basal vil ikke blive givet, når dit blodsukker er under målet.</string>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<string name="treatmentssafety_title">Behandlings sikkerhed</string>
|
<string name="treatmentssafety_title">Behandlings sikkerhed</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">Maks tilladt bolus [IE]</string>
|
<string name="treatmentssafety_maxbolus_title">Maks tilladt bolus [IE]</string>
|
||||||
<string name="treatmentssafety_maxcarbs_title">Maks tilladte kulhydrater [g]</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_plugin">%1$s indstillinger</string>
|
||||||
<string name="nav_preferences">Indstillinger</string>
|
<string name="nav_preferences">Indstillinger</string>
|
||||||
<string name="nav_refreshtreatments">Opdater behandlinger fra NS</string>
|
<string name="nav_refreshtreatments">Opdater behandlinger fra NS</string>
|
||||||
|
@ -432,12 +433,15 @@
|
||||||
<string name="ns_localbroadcasts_title">Aktiver lokale udsendelser.</string>
|
<string name="ns_localbroadcasts_title">Aktiver lokale udsendelser.</string>
|
||||||
<string name="openapssmb">OpenAPS SMB</string>
|
<string name="openapssmb">OpenAPS SMB</string>
|
||||||
<string name="openaps_smb_dynamic_isf">Dynamisk ISF</string>
|
<string name="openaps_smb_dynamic_isf">Dynamisk ISF</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="enableuam">Aktiver UAM</string>
|
||||||
<string name="enablesmb">Aktiver SMB</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="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="enableuam_summary">Detektering af uanmeldte måltider</string>
|
||||||
<string name="insulin_oref_peak">IOB Kurve Peak-Tid</string>
|
<string name="insulin_oref_peak">IOB Kurve Peak-Tid</string>
|
||||||
<string name="insulin_peak_time">Spidstidspunkt [min]</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="free_peak_oref">Free-Peak Oref</string>
|
||||||
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
|
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
|
||||||
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
|
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
|
||||||
|
@ -589,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="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_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="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="overview_show_notes_field_in_dialogs_title">Vis notefelt i behandlingsdialoger</string>
|
||||||
<string name="next_button">Næste</string>
|
<string name="next_button">Næste</string>
|
||||||
<string name="previous_button">Forrige</string>
|
<string name="previous_button">Forrige</string>
|
||||||
|
@ -601,7 +606,11 @@
|
||||||
<string name="secondcarbsincrement">Anden kulhydratstigning</string>
|
<string name="secondcarbsincrement">Anden kulhydratstigning</string>
|
||||||
<string name="thirdcarbsincrement">Tredje kulhydratstigning</string>
|
<string name="thirdcarbsincrement">Tredje kulhydratstigning</string>
|
||||||
<string name="cgm">CGM</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_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="connectionsettings_title">Indstillinger for forbindelse</string>
|
||||||
<string name="ns_wifi_allowedssids">Tilladte SSID\'er (semikolon separeret)</string>
|
<string name="ns_wifi_allowedssids">Tilladte SSID\'er (semikolon separeret)</string>
|
||||||
<string name="ns_allowroaming">Tillad forbindelse i roaming</string>
|
<string name="ns_allowroaming">Tillad forbindelse i roaming</string>
|
||||||
|
@ -677,6 +686,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="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="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="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="nav_logsettings">Log indstillinger</string>
|
||||||
<string name="resettodefaults">Nulstil til standardindstillinger</string>
|
<string name="resettodefaults">Nulstil til standardindstillinger</string>
|
||||||
<string name="nsmalfunction">NSClient funktionsfejl. Overvej NS og NSClient genstart.</string>
|
<string name="nsmalfunction">NSClient funktionsfejl. Overvej NS og NSClient genstart.</string>
|
||||||
|
@ -769,6 +780,11 @@
|
||||||
<string name="invalidpct">Ugyldig angivelse af %</string>
|
<string name="invalidpct">Ugyldig angivelse af %</string>
|
||||||
<string name="average">Gennemsnit</string>
|
<string name="average">Gennemsnit</string>
|
||||||
<string name="tir">Tid i målområde</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="activitymonitor">Aktivitetsovervågning</string>
|
||||||
<string name="doyouwantresetstats">Ønsker du at nulstille aktivitetsstatistik?</string>
|
<string name="doyouwantresetstats">Ønsker du at nulstille aktivitetsstatistik?</string>
|
||||||
<string name="statistics">Statistikker</string>
|
<string name="statistics">Statistikker</string>
|
||||||
|
@ -955,6 +971,7 @@
|
||||||
<string name="wear_action_tempt_max_bg_error">Max-BS udenfor området!</string>
|
<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_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_manual_message">Midlertigt mål:\nMål: %1$s\nVarighed: %2$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="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="wizard_result">Guide:\nInsulin: %1$.2fE\nKH: %2$dg</string>
|
||||||
<string name="overview_editquickwizard_show_on_device">Vis post på enhed:</string>
|
<string name="overview_editquickwizard_show_on_device">Vis post på enhed:</string>
|
||||||
|
@ -963,9 +980,11 @@
|
||||||
<string name="wizard_no_active_profile">Ingen aktiv profil angivet!</string>
|
<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_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_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_carbs">Kulhydrater: %1$.2fE</string>
|
||||||
<string name="wizard_explain_cob">COB: %1$.0fg %2$.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_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_superbolus">Superbolus: %1$.2fE</string>
|
||||||
<string name="wizard_explain_trend">15\' trend: %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>
|
<string name="wizard_explain_percent">Procent: %1$.2fE x %2$d%% ≈ %3$.2fE</string>
|
||||||
|
@ -992,6 +1011,10 @@
|
||||||
<string name="count_selected">%1$d valgt</string>
|
<string name="count_selected">%1$d valgt</string>
|
||||||
<string name="sort_label">Sortér</string>
|
<string name="sort_label">Sortér</string>
|
||||||
<string name="dialog_canceled">Dialog annulleret</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 "in range"">Under</string>
|
<string name="below" comment="below "in range"">Under</string>
|
||||||
<string name="in_range">Inden for området</string>
|
<string name="in_range">Inden for området</string>
|
||||||
<string name="above" comment="above "in range"">Over</string>
|
<string name="above" comment="above "in range"">Over</string>
|
||||||
|
@ -1000,6 +1023,12 @@
|
||||||
<string name="widget_description">AndroidAPS widget</string>
|
<string name="widget_description">AndroidAPS widget</string>
|
||||||
<string name="configure">Indstil gennemsigtighed</string>
|
<string name="configure">Indstil gennemsigtighed</string>
|
||||||
<string name="loop_status">Loop status</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_otp_qr_code">QR-kode til opsætning af engangs kodeord</string>
|
||||||
<string name="a11y_open_settings">Åbn indstillinger</string>
|
<string name="a11y_open_settings">Åbn indstillinger</string>
|
||||||
<string name="a11y_set_carb_timer">indstil KH alarm</string>
|
<string name="a11y_set_carb_timer">indstil KH alarm</string>
|
||||||
|
@ -1009,8 +1038,12 @@
|
||||||
<string name="a11y_only_on_watch">kun på ur</string>
|
<string name="a11y_only_on_watch">kun på ur</string>
|
||||||
<string name="a11y_only_on_phone">kun på telefon</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="a11y_drag_and_drop_handle">træk og slip håndtering</string>
|
||||||
|
<string name="search">Søg</string>
|
||||||
<!-- Aidex Cgms -->
|
<!-- Aidex Cgms -->
|
||||||
<string name="aidex">GlucoRx Aidex</string>
|
<string name="aidex">GlucoRx Aidex</string>
|
||||||
<string name="aidex_short">Aidex</string>
|
<string name="aidex_short">Aidex</string>
|
||||||
<string name="description_source_aidex">Modtag BG-værdier fra GlucoRx Aidex CGMS.</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>
|
</resources>
|
||||||
|
|
|
@ -104,9 +104,11 @@
|
||||||
<string name="troubleshooting_wheretoask">Wo kannst Du nach Hilfe für AndroidAPS suchen?</string>
|
<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_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_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_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_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_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_label">Insulin-Plugins</string>
|
||||||
<string name="insulin_ultrarapid">Welches Insulin kann mit dem Ultra-Rapid-Oref-Plugin verwendet werden?</string>
|
<string name="insulin_ultrarapid">Welches Insulin kann mit dem Ultra-Rapid-Oref-Plugin verwendet werden?</string>
|
||||||
<string name="insulin_fiasp">Fiasp®</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_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_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_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_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_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>
|
<string name="wrongcarbs_treatmentstab">Lösche die falsche Eingabe in der Behandlung und gib den richtigen neuen Kohlehydratwert ein.</string>
|
||||||
|
@ -133,6 +136,19 @@
|
||||||
<string name="wronginsulin_compare">Vergleiche die Werte der Historie in AAPS und Deiner Pumpe (wenn die Pumpe diese Funktion bietet).</string>
|
<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_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="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_label">Aktives Insulin (IOB)</string>
|
||||||
<string name="iob_value">IOB wird von den abgegebenen temporären Basalraten beeinflusst.</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_hightemp">Eine hohe temporäre Basalrate wird nicht abgegeben, wenn der BZ unterhalb des Zielwerts liegt.</string>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<string name="treatmentssafety_title">Sicherheitseinstellungen der Behandlungen</string>
|
<string name="treatmentssafety_title">Sicherheitseinstellungen der Behandlungen</string>
|
||||||
<string name="treatmentssafety_maxbolus_title">Max. erlaubter Bolus [IE]</string>
|
<string name="treatmentssafety_maxbolus_title">Max. erlaubter Bolus [IE]</string>
|
||||||
<string name="treatmentssafety_maxcarbs_title">Max. erlaubte Kohlenhydrate [g]</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_plugin">%1$s-Einstellungen</string>
|
||||||
<string name="nav_preferences">Einstellungen</string>
|
<string name="nav_preferences">Einstellungen</string>
|
||||||
<string name="nav_refreshtreatments">Behandlungen von NS aktualisieren</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_ns_client">Synchronisiert deine Daten mit Nightscout</string>
|
||||||
<string name="description_ama">Stand des Algorithmus in 2017</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">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_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_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>
|
<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="configbuilder_shortname">KONF</string>
|
||||||
<string name="loop_shortname">LOOP</string>
|
<string name="loop_shortname">LOOP</string>
|
||||||
<string name="oaps_shortname">OAPS</string>
|
<string name="oaps_shortname">OAPS</string>
|
||||||
|
<string name="dynisf_shortname">DYNISF</string>
|
||||||
<string name="localprofile_shortname">LP</string>
|
<string name="localprofile_shortname">LP</string>
|
||||||
<string name="overview_shortname">HOME</string>
|
<string name="overview_shortname">HOME</string>
|
||||||
<string name="virtualpump_shortname">VP</string>
|
<string name="virtualpump_shortname">VP</string>
|
||||||
|
@ -430,12 +433,15 @@
|
||||||
<string name="ns_localbroadcasts_title">Aktiviere lokale Broadcasts</string>
|
<string name="ns_localbroadcasts_title">Aktiviere lokale Broadcasts</string>
|
||||||
<string name="openapssmb">OpenAPS SMB</string>
|
<string name="openapssmb">OpenAPS SMB</string>
|
||||||
<string name="openaps_smb_dynamic_isf">Dynamischer ISF</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="enableuam">Aktiviere UAM</string>
|
||||||
<string name="enablesmb">Aktiviere SMB</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="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="enableuam_summary">Erkennung von unangekündigten Mahlzeiten</string>
|
||||||
<string name="insulin_oref_peak">Wirkungshoch der IOB-Kurve</string>
|
<string name="insulin_oref_peak">Wirkungshoch der IOB-Kurve</string>
|
||||||
<string name="insulin_peak_time">Wirkungshoch [min]</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="free_peak_oref">Free-Peak Oref</string>
|
||||||
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
|
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
|
||||||
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
|
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
|
||||||
|
@ -497,6 +503,7 @@
|
||||||
<string name="negativeonly">Nur negative</string>
|
<string name="negativeonly">Nur negative</string>
|
||||||
<string name="overview_editquickwizard_usecob">COB Berechnung</string>
|
<string name="overview_editquickwizard_usecob">COB Berechnung</string>
|
||||||
<string name="overview_editquickwizard_usetemptarget">Temporäres Ziel 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="loopenabled">Loop aktiviert</string>
|
||||||
<string name="apsselected">APS ausgewählt</string>
|
<string name="apsselected">APS ausgewählt</string>
|
||||||
<string name="nsclienthaswritepermission">Nightscout-Client hat Schreibrechte</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="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_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="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="overview_show_notes_field_in_dialogs_title">Zeige Feld für Notizen in den Behandlungsdialogen</string>
|
||||||
<string name="next_button">Weiter</string>
|
<string name="next_button">Weiter</string>
|
||||||
<string name="previous_button">Zurück</string>
|
<string name="previous_button">Zurück</string>
|
||||||
|
@ -598,7 +606,11 @@
|
||||||
<string name="secondcarbsincrement">Zweite KH-Erhöhung</string>
|
<string name="secondcarbsincrement">Zweite KH-Erhöhung</string>
|
||||||
<string name="thirdcarbsincrement">Dritte KH-Erhöhung</string>
|
<string name="thirdcarbsincrement">Dritte KH-Erhöhung</string>
|
||||||
<string name="cgm">CGM</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_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="connectionsettings_title">Verbindungs-Einstellungen</string>
|
||||||
<string name="ns_wifi_allowedssids">Erlaubte SSIDs (durch Semikolon getrennt)</string>
|
<string name="ns_wifi_allowedssids">Erlaubte SSIDs (durch Semikolon getrennt)</string>
|
||||||
<string name="ns_allowroaming">Erlaube Verbindung bei Roaming</string>
|
<string name="ns_allowroaming">Erlaube Verbindung bei Roaming</string>
|
||||||
|
@ -656,7 +668,10 @@
|
||||||
<string name="sensitivity_raises_target_title">Empfindlichkeit erhöht den Zielwert</string>
|
<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="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="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="remove_items">Objekte entfernen</string>
|
||||||
|
<string name="sort_items">Einträge sortieren</string>
|
||||||
<string name="storedsettingsfound">Gespeicherte Einstellungen gefunden</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="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>
|
<string name="error_adding_treatment_title">Behandlungsdaten unvollständig</string>
|
||||||
|
@ -671,6 +686,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="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="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="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="nav_logsettings">Log-Einstellungen</string>
|
||||||
<string name="resettodefaults">Auf Standardwerte zurücksetzen</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>
|
<string name="nsmalfunction">NSClient Störung. Ziehe einen Neustart von NS und NSClient in Betracht.</string>
|
||||||
|
@ -764,6 +781,11 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="invalidpct">Ungültige % Eingabe</string>
|
<string name="invalidpct">Ungültige % Eingabe</string>
|
||||||
<string name="average">Durchschnitt</string>
|
<string name="average">Durchschnitt</string>
|
||||||
<string name="tir">TIR</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="activitymonitor">Aktivitätsmonitor</string>
|
||||||
<string name="doyouwantresetstats">Willst Du die Aktivitätsstatistik zurücksetzen?</string>
|
<string name="doyouwantresetstats">Willst Du die Aktivitätsstatistik zurücksetzen?</string>
|
||||||
<string name="statistics">Statistiken</string>
|
<string name="statistics">Statistiken</string>
|
||||||
|
@ -804,6 +826,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_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="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_predictions">Predictions (Vorhersagen)</string>
|
||||||
|
<string name="overview_show_treatments">Behandlungen</string>
|
||||||
<string name="overview_show_deviationslope">Steigung der Abweichung</string>
|
<string name="overview_show_deviationslope">Steigung der Abweichung</string>
|
||||||
<string name="authorizationfailed">Autorisierung fehlgeschlagen</string>
|
<string name="authorizationfailed">Autorisierung fehlgeschlagen</string>
|
||||||
<string name="overview_show_absinsulin">Gesamtinsulin</string>
|
<string name="overview_show_absinsulin">Gesamtinsulin</string>
|
||||||
|
@ -873,6 +896,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_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">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_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">Insulin abrufen</string>
|
||||||
<string name="ns_receive_insulin_summary">Insulin akzeptieren, das in NS oder NSClient eingegeben wurden</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>
|
<string name="ns_receive_carbs">Kohlenhydrate abrufen</string>
|
||||||
|
@ -891,9 +916,11 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="error_in_isf_values">Fehler in ISF-Werten</string>
|
<string name="error_in_isf_values">Fehler in ISF-Werten</string>
|
||||||
<string name="run_question">%s ausführen?</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="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="errors">Fehler</string>
|
||||||
<string name="ns_sync_slow">Hochladen verlangsamen</string>
|
<string name="ns_sync_slow">Hochladen verlangsamen</string>
|
||||||
<string name="data_status">Status BZ-Daten</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_cannula_age">Kanülenalter</string>
|
||||||
<string name="statuslights_patch_pump_age">Alter Patchpumpe</string>
|
<string name="statuslights_patch_pump_age">Alter Patchpumpe</string>
|
||||||
<string name="patch_pump">Patch-Pumpe</string>
|
<string name="patch_pump">Patch-Pumpe</string>
|
||||||
|
@ -931,7 +958,46 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="a11y_delete_current_profile">aktuelles Profil löschen</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>
|
<string name="a11y_add_new_to_list">neu zur Liste hinzufügen</string>
|
||||||
<!-- Theme switcher dark and light mode-->
|
<!-- 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-->
|
<!-- 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="select_profile">Profil zum Bearbeiten auswählen</string>
|
||||||
<string name="refresh_from_nightscout">Aktualisiere von Nightscout</string>
|
<string name="refresh_from_nightscout">Aktualisiere von Nightscout</string>
|
||||||
<string name="remove_selected_items">Ausgewähltes Objekt löschen</string>
|
<string name="remove_selected_items">Ausgewähltes Objekt löschen</string>
|
||||||
|
@ -940,8 +1006,46 @@ Unerwartetes Verhalten.</string>
|
||||||
<string name="tempt_targets">Temporäre Ziele</string>
|
<string name="tempt_targets">Temporäre Ziele</string>
|
||||||
<string name="carbs_and_bolus">Kohlenhydrate & Bolus</string>
|
<string name="carbs_and_bolus">Kohlenhydrate & 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="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="count_selected">%1$d ausgewählt</string>
|
||||||
<string name="sort_label">Sortieren</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 "in range"">Unter</string>
|
||||||
|
<string name="in_range">Im Zielbereich</string>
|
||||||
|
<string name="above" comment="above "in range"">Ü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="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 -->
|
<!-- 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>
|
</resources>
|
||||||
|
|
|
@ -1044,4 +1044,5 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S
|
||||||
<string name="blocked_by_charging">Bloqué par les options de recharge</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="blocked_by_connectivity">Bloqué par les options de connectivité</string>
|
||||||
<string name="no_watch_connected">(Pas de montre connectée)</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>
|
</resources>
|
||||||
|
|
|
@ -1046,4 +1046,5 @@
|
||||||
<string name="blocked_by_charging">Blokkert på grunn av ladealternativer</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="blocked_by_connectivity">Blokkert på grunn av tilkoblingsalternativer</string>
|
||||||
<string name="no_watch_connected">(Ingen klokke tilkoblet)</string>
|
<string name="no_watch_connected">(Ingen klokke tilkoblet)</string>
|
||||||
|
<string name="error_asking_for_permissions">Feil under spørring etter tillatelser</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -552,7 +552,7 @@
|
||||||
<string name="smbnotallowedinopenloopmode">SMB não permitido no modo open loop</string>
|
<string name="smbnotallowedinopenloopmode">SMB não permitido no modo open loop</string>
|
||||||
<string name="food_short">Alimentos</string>
|
<string name="food_short">Alimentos</string>
|
||||||
<string name="reset">repor</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="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_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>
|
<string name="absorption_cutoff_summary">Hora em que qualquer refeição é considerada absorvida. Restantes hidratos de carbono serão cortados.</string>
|
||||||
|
|
|
@ -1045,4 +1045,5 @@
|
||||||
<string name="blocked_by_charging">Заблокировано опциями зарядки</string>
|
<string name="blocked_by_charging">Заблокировано опциями зарядки</string>
|
||||||
<string name="blocked_by_connectivity">Заблокировано настройками подключения</string>
|
<string name="blocked_by_connectivity">Заблокировано настройками подключения</string>
|
||||||
<string name="no_watch_connected">(Часы не подключены)</string>
|
<string name="no_watch_connected">(Часы не подключены)</string>
|
||||||
|
<string name="error_asking_for_permissions">Ошибка при запросе разрешения</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1047,4 +1047,5 @@ Aktif Karbonhidratın ne kadar hızlı sindirildiğine ve KŞ\'nin beklenenden d
|
||||||
<string name="blocked_by_charging">Şarj seçenekleri tarafından engellendi</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="blocked_by_connectivity">Bağlantı seçenekleri tarafından engellendi</string>
|
||||||
<string name="no_watch_connected">(Saat Bağlı Değil)</string>
|
<string name="no_watch_connected">(Saat Bağlı Değil)</string>
|
||||||
|
<string name="error_asking_for_permissions">İzin istenirken hata</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
<item>@string/bg_lang</item>
|
<item>@string/bg_lang</item>
|
||||||
<item>@string/cs_lang</item>
|
<item>@string/cs_lang</item>
|
||||||
<item>@string/de_lang</item>
|
<item>@string/de_lang</item>
|
||||||
|
<item>@string/dk_lang</item>
|
||||||
<item>@string/fr_lang</item>
|
<item>@string/fr_lang</item>
|
||||||
<item>@string/nl_lang</item>
|
<item>@string/nl_lang</item>
|
||||||
<item>@string/es_lang</item>
|
<item>@string/es_lang</item>
|
||||||
|
@ -55,6 +56,7 @@
|
||||||
<item>bg</item>
|
<item>bg</item>
|
||||||
<item>cs</item>
|
<item>cs</item>
|
||||||
<item>de</item>
|
<item>de</item>
|
||||||
|
<item>dk</item>
|
||||||
<item>fr</item>
|
<item>fr</item>
|
||||||
<item>nl</item>
|
<item>nl</item>
|
||||||
<item>es</item>
|
<item>es</item>
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
|
<!-- <string name="fi_lang" translatable="false">Finnish</string> -->
|
||||||
<string name="fr_lang" translatable="false">French</string>
|
<string name="fr_lang" translatable="false">French</string>
|
||||||
<string name="de_lang" translatable="false">German</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="el_lang" translatable="false">Greek</string>
|
||||||
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
|
<!-- <string name="he_lang" translatable="false">Hebrew</string> -->
|
||||||
<string name="zh_lang" translatable="false">Chinese</string>
|
<string name="zh_lang" translatable="false">Chinese</string>
|
||||||
|
@ -1254,6 +1255,8 @@
|
||||||
<string name="blocked_by_charging">Blocked by charging options</string>
|
<string name="blocked_by_charging">Blocked by charging options</string>
|
||||||
<string name="blocked_by_connectivity">Blocked by connectivity options</string>
|
<string name="blocked_by_connectivity">Blocked by connectivity options</string>
|
||||||
<string name="no_watch_connected">(No Watch Connected)</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>
|
</resources>
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:validate="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="@string/key_autotune_plugin"
|
android:key="@string/key_autotune_plugin"
|
||||||
android:title="@string/autotune_settings"
|
android:title="@string/autotune_settings"
|
||||||
|
@ -24,12 +26,19 @@
|
||||||
android:summary="@string/autotune_tune_insulin_curve_summary"
|
android:summary="@string/autotune_tune_insulin_curve_summary"
|
||||||
android:title="@string/autotune_tune_insulin_curve_title" />
|
android:title="@string/autotune_tune_insulin_curve_title" />
|
||||||
-->
|
-->
|
||||||
<EditTextPreference
|
|
||||||
|
<info.nightscout.androidaps.utils.textValidator.ValidatingEditTextPreference
|
||||||
android:defaultValue="5"
|
android:defaultValue="5"
|
||||||
android:inputType="number"
|
|
||||||
android:key="@string/key_autotune_default_tune_days"
|
android:key="@string/key_autotune_default_tune_days"
|
||||||
android:summary="@string/autotune_default_tune_days_summary"
|
android:title="@string/autotune_default_tune_days_title"
|
||||||
android:title="@string/autotune_default_tune_days_title" />
|
android:dialogMessage="@string/autotune_default_tune_days_summary"
|
||||||
|
android:digits="0123456789"
|
||||||
|
android:inputType="number"
|
||||||
|
android:selectAllOnFocus="true"
|
||||||
|
android:singleLine="true"
|
||||||
|
validate:maxNumber="30"
|
||||||
|
validate:minNumber="1"
|
||||||
|
validate:testType="numericRange" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="openapsama_useautosens"
|
android:key="@string/key_openapsama_useautosens"
|
||||||
android:title="@string/openapsama_useautosens" />
|
android:title="@string/openapsama_useautosens" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
|
|
|
@ -51,8 +51,8 @@
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="openapsama_useautosens"
|
android:key="@string/key_adjust_sensitivity"
|
||||||
android:title="@string/openapsama_useautosens" />
|
android:title="@string/dynisf_adjust_sensitivity" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
|
|
|
@ -123,4 +123,5 @@
|
||||||
<string name="run_automations">Kør automatisering</string>
|
<string name="run_automations">Kør automatisering</string>
|
||||||
<string name="add_automation">Tilføj regel</string>
|
<string name="add_automation">Tilføj regel</string>
|
||||||
<string name="remove_sort">Fjern/sorter</string>
|
<string name="remove_sort">Fjern/sorter</string>
|
||||||
|
<string name="stop_processing">Stop afvikling</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -113,5 +113,15 @@
|
||||||
<string name="automation_event">Automatisierungs-Ereignis</string>
|
<string name="automation_event">Automatisierungs-Ereignis</string>
|
||||||
<string name="reorder_label">Umsortieren</string>
|
<string name="reorder_label">Umsortieren</string>
|
||||||
<string name="user_action">Benutzeraktion</string>
|
<string name="user_action">Benutzeraktion</string>
|
||||||
|
<string name="remove_automation">Automatisierung entfernen</string>
|
||||||
|
<string name="sort_automation">Automation-Regeln sortieren</string>
|
||||||
|
<string name="remove_selected_items">Ausgewähltes Objekt löschen</string>
|
||||||
|
<string name="count_selected">%1$d ausgewählt</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="confirm_remove_multiple_items">Sind Sie sicher, dass Sie diese(s) %1$d Element(e) löschen möchten?</string>
|
||||||
|
<string name="sort_label">Sortieren</string>
|
||||||
|
<string name="system_automation">System-Automatisierung</string>
|
||||||
|
<string name="run_automations">Automatisierungen ausführen</string>
|
||||||
|
<string name="add_automation">Regel hinzufügen</string>
|
||||||
|
<string name="remove_sort">Entfernen/sortieren</string>
|
||||||
|
<string name="stop_processing">Verarbeitung beenden</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
<string name="latitude_short">Широта:</string>
|
<string name="latitude_short">Широта:</string>
|
||||||
<string name="longitude_short">Долгота:</string>
|
<string name="longitude_short">Долгота:</string>
|
||||||
<string name="glucose_u">Гк %1$s]:</string>
|
<string name="glucose_u">Гк %1$s]:</string>
|
||||||
<string name="target_u">Цель %1$d м</string>
|
<string name="target_u">Цель [%1$s]:</string>
|
||||||
<string name="lastboluslabel">Предыдущий болюс</string>
|
<string name="lastboluslabel">Предыдущий болюс</string>
|
||||||
<string name="lastboluscompared">Время болюса %1$s %2$s мин назад</string>
|
<string name="lastboluscompared">Время болюса %1$s %2$s мин назад</string>
|
||||||
<string name="triggercoblabel">Активн углеводы</string>
|
<string name="triggercoblabel">Активн углеводы</string>
|
||||||
|
|
|
@ -123,4 +123,5 @@
|
||||||
<string name="run_automations">Spustiť automatizácie</string>
|
<string name="run_automations">Spustiť automatizácie</string>
|
||||||
<string name="add_automation">Pridať pravidlo</string>
|
<string name="add_automation">Pridať pravidlo</string>
|
||||||
<string name="remove_sort">Odstrániť/zoradiť</string>
|
<string name="remove_sort">Odstrániť/zoradiť</string>
|
||||||
|
<string name="stop_processing">Zastaviť spracovanie</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -7,14 +7,14 @@ buildscript {
|
||||||
rxjava_version = '3.1.5'
|
rxjava_version = '3.1.5'
|
||||||
rxandroid_version = '3.0.0'
|
rxandroid_version = '3.0.0'
|
||||||
rxkotlin_version = '3.0.1'
|
rxkotlin_version = '3.0.1'
|
||||||
room_version = '2.4.2'
|
room_version = '2.4.3'
|
||||||
lifecycle_version = '2.5.0'
|
lifecycle_version = '2.5.0'
|
||||||
dagger_version = '2.42'
|
dagger_version = '2.42'
|
||||||
coroutines_version = '1.6.4'
|
coroutines_version = '1.6.4'
|
||||||
activity_version = '1.4.0'
|
activity_version = '1.4.0'
|
||||||
fragmentktx_version = '1.4.1'
|
fragmentktx_version = '1.4.1'
|
||||||
ormLite_version = '4.46'
|
ormLite_version = '4.46'
|
||||||
gson_version = '2.9.0'
|
gson_version = '2.9.1'
|
||||||
nav_version = '2.4.2'
|
nav_version = '2.4.2'
|
||||||
appcompat_version = '1.4.2'
|
appcompat_version = '1.4.2'
|
||||||
material_version = '1.6.1'
|
material_version = '1.6.1'
|
||||||
|
@ -48,7 +48,7 @@ buildscript {
|
||||||
maven { url "https://plugins.gradle.org/m2/" } // jacoco 0.2
|
maven { url "https://plugins.gradle.org/m2/" } // jacoco 0.2
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.2.1'
|
classpath 'com.android.tools.build:gradle:7.2.2'
|
||||||
classpath 'com.google.gms:google-services:4.3.13'
|
classpath 'com.google.gms:google-services:4.3.13'
|
||||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
|
||||||
|
|
||||||
|
|
|
@ -51,4 +51,10 @@
|
||||||
<string name="combo_tbr_count">Anzahl TBR</string>
|
<string name="combo_tbr_count">Anzahl TBR</string>
|
||||||
<string name="bolusstopped">Bolus gestoppt</string>
|
<string name="bolusstopped">Bolus gestoppt</string>
|
||||||
<string name="bolusstopping">Bolus wird gestoppt</string>
|
<string name="bolusstopping">Bolus wird gestoppt</string>
|
||||||
|
<string name="pump_commerror_label">Komm. Fehleranzahl</string>
|
||||||
|
<string name="show_comm_error_count_title">Zeige Komm.-Fehleranzahl</string>
|
||||||
|
<string name="show_comm_error_count_summary">Zeigt die Fehleranzahl bei der Kommunikation mit Ruffy an. In den meisten Fällen zeigt eine Zahl höher als 0 an, dass Ruffy Kommunikationsprobleme vorliegen (ein Neustart kann erforderlich sein).</string>
|
||||||
|
<string name="combo_error_display_never">Nie</string>
|
||||||
|
<string name="combo_error_display_error">Bei Fehler</string>
|
||||||
|
<string name="combo_error_display_always">Immer</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package info.nightscout.androidaps.plugins.iob.iobCobCalculator
|
package info.nightscout.androidaps.plugins.iob.iobCobCalculator
|
||||||
|
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
|
import androidx.collection.size
|
||||||
import info.nightscout.androidaps.annotations.OpenForTesting
|
import info.nightscout.androidaps.annotations.OpenForTesting
|
||||||
import info.nightscout.androidaps.data.InMemoryGlucoseValue
|
import info.nightscout.androidaps.data.InMemoryGlucoseValue
|
||||||
import info.nightscout.androidaps.database.AppRepository
|
import info.nightscout.androidaps.database.AppRepository
|
||||||
|
@ -41,7 +42,7 @@ class AutosensDataStore {
|
||||||
AutosensDataStore().also {
|
AutosensDataStore().also {
|
||||||
synchronized(dataLock) {
|
synchronized(dataLock) {
|
||||||
it.bgReadings = this.bgReadings.toMutableList()
|
it.bgReadings = this.bgReadings.toMutableList()
|
||||||
it.autosensDataTable = this.autosensDataTable.clone()
|
it.autosensDataTable = LongSparseArray<AutosensData>(this.autosensDataTable.size).apply { putAll(this@AutosensDataStore.autosensDataTable) }
|
||||||
it.bucketedData = this.bucketedData?.toMutableList()
|
it.bucketedData = this.bucketedData?.toMutableList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +58,7 @@ class AutosensDataStore {
|
||||||
synchronized(autosensDataTable) {
|
synchronized(autosensDataTable) {
|
||||||
for (index in autosensDataTable.size() - 1 downTo 0) {
|
for (index in autosensDataTable.size() - 1 downTo 0) {
|
||||||
if (autosensDataTable.keyAt(index) > time) {
|
if (autosensDataTable.keyAt(index) > time) {
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Removing from autosensDataTable: " + dateUtil.dateAndTimeAndSecondsString(autosensDataTable.keyAt(index)))
|
aapsLogger.debug(LTag.AUTOSENS) { "Removing from autosensDataTable: ${dateUtil.dateAndTimeAndSecondsString(autosensDataTable.keyAt(index))}" }
|
||||||
autosensDataTable.removeAt(index)
|
autosensDataTable.removeAt(index)
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
|
@ -135,10 +136,10 @@ class AutosensDataStore {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return if (data.time < System.currentTimeMillis() - 11 * 60 * 1000) {
|
return if (data.time < System.currentTimeMillis() - 11 * 60 * 1000) {
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "AUTOSENSDATA null: data is old (" + reason + ") size()=" + autosensDataTable.size() + " lastData=" + dateUtil.dateAndTimeAndSecondsString(data.time))
|
aapsLogger.debug(LTag.AUTOSENS) { "AUTOSENSDATA null: data is old ($reason) size()=${autosensDataTable.size()} lastData=${dateUtil.dateAndTimeAndSecondsString(data.time)}" }
|
||||||
null
|
null
|
||||||
} else {
|
} else {
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "AUTOSENSDATA ($reason) $data")
|
aapsLogger.debug(LTag.AUTOSENS) { "AUTOSENSDATA ($reason) $data" }
|
||||||
data
|
data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,7 +165,7 @@ class AutosensDataStore {
|
||||||
.compatGetBgReadingsDataFromTime(start, to + T.mins(2).msecs(), false)
|
.compatGetBgReadingsDataFromTime(start, to + T.mins(2).msecs(), false)
|
||||||
.blockingGet()
|
.blockingGet()
|
||||||
.filter { it.value >= 39 }
|
.filter { it.value >= 39 }
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "BG data loaded. Size: " + bgReadings.size + " Start date: " + dateUtil.dateAndTimeString(start) + " End date: " + dateUtil.dateAndTimeString(to))
|
aapsLogger.debug(LTag.AUTOSENS) { "BG data loaded. Size: ${bgReadings.size} Start date: ${dateUtil.dateAndTimeString(start)} End date: ${dateUtil.dateAndTimeString(to)}" }
|
||||||
createBucketedData(aapsLogger, dateUtil)
|
createBucketedData(aapsLogger, dateUtil)
|
||||||
rxBus.send(EventBucketedDataCreated())
|
rxBus.send(EventBucketedDataCreated())
|
||||||
}
|
}
|
||||||
|
@ -184,13 +185,13 @@ class AutosensDataStore {
|
||||||
totalDiff += diff
|
totalDiff += diff
|
||||||
diff = abs(diff)
|
diff = abs(diff)
|
||||||
if (diff > T.secs(30).msecs()) {
|
if (diff > T.secs(30).msecs()) {
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Interval detection: values: " + bgReadings.size + " diff: " + diff / 1000 + "[s] is5minData: " + false)
|
aapsLogger.debug(LTag.AUTOSENS, "Interval detection: values: ${bgReadings.size} diff: ${diff / 1000}[s] is5minData: false")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val averageDiff = totalDiff / bgReadings.size / 1000
|
val averageDiff = totalDiff / bgReadings.size / 1000
|
||||||
val is5minData = averageDiff < 1
|
val is5minData = averageDiff < 1
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Interval detection: values: " + bgReadings.size + " averageDiff: " + averageDiff + "[s] is5minData: " + is5minData)
|
aapsLogger.debug(LTag.AUTOSENS, "Interval detection: values: ${bgReadings.size} averageDiff: $averageDiff[s] is5minData: $is5minData")
|
||||||
return is5minData
|
return is5minData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -239,8 +240,7 @@ class AutosensDataStore {
|
||||||
var currentTime = bgReadings[0].timestamp - bgReadings[0].timestamp % T.mins(5).msecs()
|
var currentTime = bgReadings[0].timestamp - bgReadings[0].timestamp % T.mins(5).msecs()
|
||||||
val adjustedTime = adjustToReferenceTime(currentTime)
|
val adjustedTime = adjustToReferenceTime(currentTime)
|
||||||
// after adjusting time may be newer. In this case use T-5min
|
// after adjusting time may be newer. In this case use T-5min
|
||||||
if (adjustedTime > currentTime) currentTime = adjustedTime - T.mins(5).msecs()
|
currentTime = if (adjustedTime > currentTime) adjustedTime - T.mins(5).msecs() else adjustedTime
|
||||||
else currentTime = adjustedTime
|
|
||||||
aapsLogger.debug("Adjusted time " + dateUtil.dateAndTimeAndSecondsString(currentTime))
|
aapsLogger.debug("Adjusted time " + dateUtil.dateAndTimeAndSecondsString(currentTime))
|
||||||
//log.debug("First reading: " + new Date(currentTime).toLocaleString());
|
//log.debug("First reading: " + new Date(currentTime).toLocaleString());
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -270,7 +270,7 @@ class AutosensDataStore {
|
||||||
}
|
}
|
||||||
val bData: MutableList<InMemoryGlucoseValue> = ArrayList()
|
val bData: MutableList<InMemoryGlucoseValue> = ArrayList()
|
||||||
bData.add(InMemoryGlucoseValue(bgReadings[0]))
|
bData.add(InMemoryGlucoseValue(bgReadings[0]))
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Adding. bgTime: " + dateUtil.toISOString(bgReadings[0].timestamp) + " lastBgTime: " + "none-first-value" + " " + bgReadings[0].toString())
|
aapsLogger.debug(LTag.AUTOSENS) { "Adding. bgTime: ${dateUtil.toISOString(bgReadings[0].timestamp)} lastBgTime: none-first-value ${bgReadings[0]}" }
|
||||||
var j = 0
|
var j = 0
|
||||||
for (i in 1 until bgReadings.size) {
|
for (i in 1 until bgReadings.size) {
|
||||||
val bgTime = bgReadings[i].timestamp
|
val bgTime = bgReadings[i].timestamp
|
||||||
|
@ -293,7 +293,7 @@ class AutosensDataStore {
|
||||||
val newBgReading = InMemoryGlucoseValue(nextBgTime, nextBg.roundToLong().toDouble(), true)
|
val newBgReading = InMemoryGlucoseValue(nextBgTime, nextBg.roundToLong().toDouble(), true)
|
||||||
//console.error("Interpolated", bData[j]);
|
//console.error("Interpolated", bData[j]);
|
||||||
bData.add(newBgReading)
|
bData.add(newBgReading)
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Adding. bgTime: " + dateUtil.toISOString(bgTime) + " lastBgTime: " + dateUtil.toISOString(lastBgTime) + " " + newBgReading.toString())
|
aapsLogger.debug(LTag.AUTOSENS) { "Adding. bgTime: ${dateUtil.toISOString(bgTime)} lastBgTime: ${dateUtil.toISOString(lastBgTime)} $newBgReading" }
|
||||||
elapsedMinutes -= 5
|
elapsedMinutes -= 5
|
||||||
lastBg = nextBg
|
lastBg = nextBg
|
||||||
lastBgTime = nextBgTime
|
lastBgTime = nextBgTime
|
||||||
|
@ -301,14 +301,14 @@ class AutosensDataStore {
|
||||||
j++
|
j++
|
||||||
val newBgReading = InMemoryGlucoseValue(bgTime, bgReadings[i].value)
|
val newBgReading = InMemoryGlucoseValue(bgTime, bgReadings[i].value)
|
||||||
bData.add(newBgReading)
|
bData.add(newBgReading)
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Adding. bgTime: " + dateUtil.toISOString(bgTime) + " lastBgTime: " + dateUtil.toISOString(lastBgTime) + " " + newBgReading.toString())
|
aapsLogger.debug(LTag.AUTOSENS) { "Adding. bgTime: ${dateUtil.toISOString(bgTime)} lastBgTime: ${dateUtil.toISOString(lastBgTime)} $newBgReading" }
|
||||||
}
|
}
|
||||||
|
|
||||||
abs(elapsedMinutes) > 2 -> {
|
abs(elapsedMinutes) > 2 -> {
|
||||||
j++
|
j++
|
||||||
val newBgReading = InMemoryGlucoseValue(bgTime, bgReadings[i].value)
|
val newBgReading = InMemoryGlucoseValue(bgTime, bgReadings[i].value)
|
||||||
bData.add(newBgReading)
|
bData.add(newBgReading)
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Adding. bgTime: " + dateUtil.toISOString(bgTime) + " lastBgTime: " + dateUtil.toISOString(lastBgTime) + " " + newBgReading.toString())
|
aapsLogger.debug(LTag.AUTOSENS) { "Adding. bgTime: ${dateUtil.toISOString(bgTime)} lastBgTime: ${dateUtil.toISOString(lastBgTime)} $newBgReading" }
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
|
@ -327,7 +327,7 @@ class AutosensDataStore {
|
||||||
val previous = bData[i + 1]
|
val previous = bData[i + 1]
|
||||||
val mSecDiff = current.timestamp - previous.timestamp
|
val mSecDiff = current.timestamp - previous.timestamp
|
||||||
val adjusted = (mSecDiff - T.mins(5).msecs()) / 1000
|
val adjusted = (mSecDiff - T.mins(5).msecs()) / 1000
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Adjusting bucketed data time. Current: " + dateUtil.dateAndTimeAndSecondsString(current.timestamp) + " to: " + dateUtil.dateAndTimeAndSecondsString(previous.timestamp + T.mins(5).msecs()) + " by " + adjusted + " sec")
|
aapsLogger.debug(LTag.AUTOSENS) { "Adjusting bucketed data time. Current: ${dateUtil.dateAndTimeAndSecondsString(current.timestamp)} to: ${dateUtil.dateAndTimeAndSecondsString(previous.timestamp + T.mins(5).msecs())} by $adjusted sec" }
|
||||||
if (abs(adjusted) > 90) {
|
if (abs(adjusted) > 90) {
|
||||||
// too big adjustment, fallback to non 5 min data
|
// too big adjustment, fallback to non 5 min data
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Fallback to non 5 min data")
|
aapsLogger.debug(LTag.AUTOSENS, "Fallback to non 5 min data")
|
||||||
|
@ -354,5 +354,4 @@ class AutosensDataStore {
|
||||||
}
|
}
|
||||||
return if (count != 0) sum / count else 0.0
|
return if (count != 0) sum / count else 0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -74,7 +74,7 @@ class AlarmSoundService : DaggerService() {
|
||||||
if (intent?.hasExtra(ErrorHelperActivity.SOUND_ID) == true) resourceId = intent.getIntExtra(ErrorHelperActivity.SOUND_ID, R.raw.error)
|
if (intent?.hasExtra(ErrorHelperActivity.SOUND_ID) == true) resourceId = intent.getIntExtra(ErrorHelperActivity.SOUND_ID, R.raw.error)
|
||||||
player = MediaPlayer()
|
player = MediaPlayer()
|
||||||
try {
|
try {
|
||||||
val afd = rh.openRawResourceFd(resourceId) ?: return START_STICKY
|
val afd = rh.openRawResourceFd(resourceId) ?: return START_NOT_STICKY
|
||||||
player?.setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
|
player?.setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
|
||||||
afd.close()
|
afd.close()
|
||||||
player?.isLooping = true
|
player?.isLooping = true
|
||||||
|
@ -94,7 +94,7 @@ class AlarmSoundService : DaggerService() {
|
||||||
aapsLogger.error("Unhandled exception", e)
|
aapsLogger.error("Unhandled exception", e)
|
||||||
}
|
}
|
||||||
aapsLogger.debug(LTag.CORE, "onStartCommand End")
|
aapsLogger.debug(LTag.CORE, "onStartCommand End")
|
||||||
return START_STICKY
|
return START_NOT_STICKY
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
|
|
@ -450,17 +450,23 @@
|
||||||
<string name="autotune_auto_summary">Hvis aktiveret, vil Autotune automatisk opdatere og skifte til input-profil efter beregning ud fra en automatiseringsregel.</string>
|
<string name="autotune_auto_summary">Hvis aktiveret, vil Autotune automatisk opdatere og skifte til input-profil efter beregning ud fra en automatiseringsregel.</string>
|
||||||
<string name="autotune_categorize_uam_as_basal_title">Kategoriser UAM som basal</string>
|
<string name="autotune_categorize_uam_as_basal_title">Kategoriser UAM som basal</string>
|
||||||
<string name="autotune_categorize_uam_as_basal_summary">Aktiver kun hvis du har indtastet alle kulhydrater på pålidelig vis. Med denne indstilling vil pludselige stigninger set af Autotune, blive brugt til at anbefale ændringer af basal rate.</string>
|
<string name="autotune_categorize_uam_as_basal_summary">Aktiver kun hvis du har indtastet alle kulhydrater på pålidelig vis. Med denne indstilling vil pludselige stigninger set af Autotune, blive brugt til at anbefale ændringer af basal rate.</string>
|
||||||
|
<string name="autotune_tune_insulin_curve_title">Tilpas insulinkurven</string>
|
||||||
|
<string name="autotune_tune_insulin_curve_summary">Aktiver kun hvis du bruger egen peak værdi. Dette alternativ vil justere peak og DIA-varigheden</string>
|
||||||
<string name="autotune_default_tune_days_title">Antal dage med data</string>
|
<string name="autotune_default_tune_days_title">Antal dage med data</string>
|
||||||
<string name="autotune_circadian_ic_isf_title">Anvend gennemsnitligt resultat i døgnbaseret IC/ISF</string>
|
<string name="autotune_circadian_ic_isf_title">Anvend gennemsnitligt resultat i døgnbaseret IC/ISF</string>
|
||||||
<string name="autotune_circadian_ic_isf_summary">Autotune vil ikke justere døgnrytme variationer, denne indstilling benytter gennemsnitlige værdier til justering af IC og ISF til din døgnrytme input profil</string>
|
<string name="autotune_circadian_ic_isf_summary">Autotune vil ikke justere døgnrytme variationer, denne indstilling benytter gennemsnitlige værdier til justering af IC og ISF til din døgnrytme input profil</string>
|
||||||
<string name="autotune_additional_log_title">Inkludér flere logoplysninger for fejlfinding</string>
|
<string name="autotune_additional_log_title">Inkludér flere logoplysninger for fejlfinding</string>
|
||||||
<string name="autotune_additional_log_summary">Aktivér kun hvis udviklerne beder dig om det, for at sende flere logoplysninger til at hjælpe med at fejlfinde Autotune plugin</string>
|
<string name="autotune_additional_log_summary">Aktivér kun hvis udviklerne beder dig om det, for at sende flere logoplysninger til at hjælpe med at fejlfinde Autotune plugin</string>
|
||||||
|
<string name="autotune_default_tune_days_summary">Standard antal dage data der skal behandles af Autotune (op til 30)</string>
|
||||||
<string name="autotune_tunedprofile_name">Justeret</string>
|
<string name="autotune_tunedprofile_name">Justeret</string>
|
||||||
<string name="autotune_profile">Profil :</string>
|
<string name="autotune_profile">Profil :</string>
|
||||||
<string name="autotune_tune_days">Justerings dage :</string>
|
<string name="autotune_tune_days">Justerings dage :</string>
|
||||||
<string name="autotune_last_run">Sidst kørt :</string>
|
<string name="autotune_last_run">Sidst kørt :</string>
|
||||||
<string name="autotune_warning">Advarsel :</string>
|
<string name="autotune_warning">Advarsel :</string>
|
||||||
<string name="autotune_select_profile">Vælg profil, der skal justeres</string>
|
<string name="autotune_select_profile">Vælg profil, der skal justeres</string>
|
||||||
|
<string name="autotune_ic_warning">Autotune fungerer med kun én IC-værdi, din profil har %1$d værdier. Gennemsnitsværdi er %2$.2fg/E</string>
|
||||||
|
<string name="autotune_isf_warning">Autotune virker med kun én ISF-værdi, din profil har %1$d værdier. Gennemsnitlig værdi er %2$.1f%3$s/E</string>
|
||||||
|
<string name="autotune_error">Fejl i inputdata, prøv at køre autotune igen eller reducer antallet af dage</string>
|
||||||
<string name="autotune_warning_during_run">Automatisk beregning startet, vær venligst tålmodig</string>
|
<string name="autotune_warning_during_run">Automatisk beregning startet, vær venligst tålmodig</string>
|
||||||
<string name="autotune_warning_after_run">Kontrollér resultaterne omhyggeligt, før du bruger dem!</string>
|
<string name="autotune_warning_after_run">Kontrollér resultaterne omhyggeligt, før du bruger dem!</string>
|
||||||
<string name="autotune_partial_result">Delvis resultat dag %1$d / %2$d justeret</string>
|
<string name="autotune_partial_result">Delvis resultat dag %1$d / %2$d justeret</string>
|
||||||
|
@ -482,6 +488,7 @@
|
||||||
<string name="autotune_run_without_autoswitch">Autotune kørt uden profilskift</string>
|
<string name="autotune_run_without_autoswitch">Autotune kørt uden profilskift</string>
|
||||||
<string name="autotune_run_with_autoswitch">Autotune kørt, profilen er automatisk skiftet</string>
|
<string name="autotune_run_with_autoswitch">Autotune kørt, profilen er automatisk skiftet</string>
|
||||||
<string name="autotune_run_with_error">Fejl under sidste Autotune kørsel</string>
|
<string name="autotune_run_with_error">Fejl under sidste Autotune kørsel</string>
|
||||||
|
<string name="autotune_run_cancelled">Autotune kører allerede, annulleret</string>
|
||||||
<string name="needconnectpermission">Applikationen kræver tilladelse til bluetooth</string>
|
<string name="needconnectpermission">Applikationen kræver tilladelse til bluetooth</string>
|
||||||
<plurals name="days">
|
<plurals name="days">
|
||||||
<item quantity="one">%1$d dag</item>
|
<item quantity="one">%1$d dag</item>
|
||||||
|
|
|
@ -135,7 +135,9 @@
|
||||||
<string name="location_not_found_message">Auf neueren Geräten muss für die Bluetooth-Erkennung der Standortdienst aktiviert sein. AAPS speichert keine Standortdaten und der Dienst kann nach erfolgreichem Pairing wieder deaktiviert werden.</string>
|
<string name="location_not_found_message">Auf neueren Geräten muss für die Bluetooth-Erkennung der Standortdienst aktiviert sein. AAPS speichert keine Standortdaten und der Dienst kann nach erfolgreichem Pairing wieder deaktiviert werden.</string>
|
||||||
<!-- Protection-->
|
<!-- Protection-->
|
||||||
<string name="wrongpassword">Falsches Passwort</string>
|
<string name="wrongpassword">Falsches Passwort</string>
|
||||||
|
<string name="wrongpin">Falsche PIN</string>
|
||||||
<string name="passwords_dont_match">Die Passwörter stimmen nicht überein.</string>
|
<string name="passwords_dont_match">Die Passwörter stimmen nicht überein.</string>
|
||||||
|
<string name="pin_dont_match">PINs stimmen nicht überein</string>
|
||||||
<!-- Profile-->
|
<!-- Profile-->
|
||||||
<string name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %1$s</string>
|
<string name="basalprofilenotaligned">Basalraten beginnen nicht zur vollen Stunde: %1$s</string>
|
||||||
<string name="minimalbasalvaluereplaced">Basal-Wert wurde durch den kleinst möglichen Wert ersetzt: %1$s</string>
|
<string name="minimalbasalvaluereplaced">Basal-Wert wurde durch den kleinst möglichen Wert ersetzt: %1$s</string>
|
||||||
|
@ -429,10 +431,64 @@
|
||||||
<string name="insight_refresh_button" comment="26 characters max for translation">Insight Refresh Button</string>
|
<string name="insight_refresh_button" comment="26 characters max for translation">Insight Refresh Button</string>
|
||||||
<string name="a11y_min_button_description">abnehmend %1$s mit %2$s</string>
|
<string name="a11y_min_button_description">abnehmend %1$s mit %2$s</string>
|
||||||
<string name="a11y_plus_button_description">zunehmend %1$s mit %2$s</string>
|
<string name="a11y_plus_button_description">zunehmend %1$s mit %2$s</string>
|
||||||
|
<string name="formatPercent">%1$.0f%%</string>
|
||||||
<string name="basal">Basal</string>
|
<string name="basal">Basal</string>
|
||||||
|
<string name="basalpct">Basal %</string>
|
||||||
<string name="count_selected">%1$d ausgewählt</string>
|
<string name="count_selected">%1$d ausgewählt</string>
|
||||||
<string name="sort_label">Sortieren</string>
|
<string name="sort_label">Sortieren</string>
|
||||||
|
<string name="remove_items">Entferne Elemente</string>
|
||||||
|
<string name="sort_items">Sortiere Elemente</string>
|
||||||
|
<string name="remove_selected_items">lösche ausgewählte Elemente</string>
|
||||||
|
<string name="a11y_file">Datei</string>
|
||||||
|
<string name="a11y_user">Nutzer</string>
|
||||||
<!-- Autotune -->
|
<!-- Autotune -->
|
||||||
|
<string name="autotune">Autotune</string>
|
||||||
|
<string name="autotune_description">Hilfe bei möglichen Anpassungen des Profils (ISF, IC und Basalraten)</string>
|
||||||
|
<string name="autotune_shortname">AT</string>
|
||||||
|
<string name="autotune_settings">Autotune Einstellungen</string>
|
||||||
|
<string name="autotune_auto_title">Automation Profilwechsel</string>
|
||||||
|
<string name="autotune_auto_summary">Falls aktiviert, wird Autotune nach der Berechnung in einer Automatisierungsregel automatisch das Eingangsprofil anpassen und darauf wechseln.</string>
|
||||||
|
<string name="autotune_categorize_uam_as_basal_title">UAM als Basal kategorisieren</string>
|
||||||
|
<string name="autotune_categorize_uam_as_basal_summary">Nur aktivieren, wenn Sie alle gegessen Kohlenhydrate zuverlässig eingegeben haben. Mit dieser Option werden plötzliche Steigerungen, die durch Autotune entdeckt werden, verwendet, um Änderungen an der Basalrate zu empfehlen.</string>
|
||||||
|
<string name="autotune_tune_insulin_curve_title">Insulinkurve anpassen</string>
|
||||||
|
<string name="autotune_tune_insulin_curve_summary">Nur einschalten, falls Du Free Peak verwendest. Diese Option passt sowohl den Gipfel der Wirkkurve an als auch die DIA Laufzeit</string>
|
||||||
|
<string name="autotune_default_tune_days_title">Anzahl der Tage an Daten</string>
|
||||||
|
<string name="autotune_circadian_ic_isf_title">Durchschnittsresultat im zirkadianen IC/ISF anwenden</string>
|
||||||
|
<string name="autotune_circadian_ic_isf_summary">Autotune wird keine zirkadianen Variationen einstellen. Diese Option wendet nur die durchschnittliche Änderung von IC und ISF auf Dein zirkadianes Eingangsprofil an</string>
|
||||||
|
<string name="autotune_additional_log_title">Fügen Sie weitere Log-Informationen zum Debuggen ein</string>
|
||||||
|
<string name="autotune_additional_log_summary">Nur einschalten, wenn von Du von den Entwicklern aufgefordert wirst, um ausführlichere Protokollinformationen zu senden, die beim Debuggen des Autotune Plugins hilfreich sind</string>
|
||||||
|
<string name="autotune_default_tune_days_summary">Standardanzahl der von Autotune zu verarbeitenden Daten (bis zu 30)</string>
|
||||||
|
<string name="autotune_tunedprofile_name">Angepasst</string>
|
||||||
|
<string name="autotune_profile">Profil :</string>
|
||||||
|
<string name="autotune_tune_days">Anpassungstage :</string>
|
||||||
|
<string name="autotune_last_run">Letzte Ausführung :</string>
|
||||||
|
<string name="autotune_warning">Warnung :</string>
|
||||||
|
<string name="autotune_select_profile">Wähle das Profil zum Anpassen aus</string>
|
||||||
|
<string name="autotune_ic_warning">Ausgewähltes Profil hat %1$d IC-Werte. Autotune wird %2$.2f g/U verwenden</string>
|
||||||
|
<string name="autotune_isf_warning">Ausgewähltes Profil hat %1$d ISF-Werte. Autotune wird %2$.1f %3$s/U verwenden</string>
|
||||||
|
<string name="autotune_error">Fehler in den Eingabedaten, versuche erneut Autotune auszuführen oder reduziere die Anzahl der Tage</string>
|
||||||
|
<string name="autotune_warning_during_run">Autotune Berechnung gestartet, bitte gedulde Dich einen Moment</string>
|
||||||
|
<string name="autotune_warning_after_run">Überprüfe die Ergebnisse sorgfältig, bevor Du sie verwendest!</string>
|
||||||
|
<string name="autotune_partial_result">Teilergebnistag %1$d / %2$d angepasst</string>
|
||||||
|
<string name="autotune_result">Ergebnis: %1$s</string>
|
||||||
|
<string name="autotune_param">Parameter</string>
|
||||||
|
<string name="autotune_percent">%</string>
|
||||||
|
<string name="autotune_missing">Fehlend</string>
|
||||||
|
<string name="autotune_profile_name">Autotune Profil %1$s</string>
|
||||||
|
<string name="autotune_run">Autotune ausführen</string>
|
||||||
|
<string name="autotune_check_input_profile_button">Eingabeprofil überprüfen</string>
|
||||||
|
<string name="autotune_compare_profile">Profile vergleichen</string>
|
||||||
|
<string name="autotune_copy_localprofile_button">In lokales Profil kopieren</string>
|
||||||
|
<string name="autotune_update_input_profile_button">Eingabeprofil anpassen</string>
|
||||||
|
<string name="autotune_revert_input_profile_button">Eingabeprofil zurücksetzen</string>
|
||||||
|
<string name="autotune_copy_local_profile_message">Neues lokales Profil aus diesem Autotune Profil erstellen?</string>
|
||||||
|
<string name="autotune_update_local_profile_message">Anpassen %1$s Profile mit dem Autotune Profile?</string>
|
||||||
|
<string name="autotune_revert_local_profile_message">%1$s Profil mit Eingabeprofil zurücksetzen?</string>
|
||||||
|
<string name="autotune_profile_invalid">Profil ungültig</string>
|
||||||
|
<string name="autotune_run_without_autoswitch">Autotune ohne Profilwechsel ausgeführt</string>
|
||||||
|
<string name="autotune_run_with_autoswitch">Autotune ausgeführt und Profil automatisch gewechselt</string>
|
||||||
|
<string name="autotune_run_with_error">Fehler beim letzten Autotune Lauf</string>
|
||||||
|
<string name="autotune_run_cancelled">Ein weiterer Lauf von Autotune wurde erkannt, Lauf abgebrochen</string>
|
||||||
<string name="needconnectpermission">App benötigt Bluetooth-Berechtigung</string>
|
<string name="needconnectpermission">App benötigt Bluetooth-Berechtigung</string>
|
||||||
<plurals name="days">
|
<plurals name="days">
|
||||||
<item quantity="one">%1$d Tag</item>
|
<item quantity="one">%1$d Tag</item>
|
||||||
|
|
|
@ -489,6 +489,7 @@
|
||||||
<string name="autotune_run_with_autoswitch">Autotune exécuté et le profil automatiquement activé</string>
|
<string name="autotune_run_with_autoswitch">Autotune exécuté et le profil automatiquement activé</string>
|
||||||
<string name="autotune_run_with_error">Erreur lors de la dernière exécution d\'Autotune</string>
|
<string name="autotune_run_with_error">Erreur lors de la dernière exécution d\'Autotune</string>
|
||||||
<string name="autotune_run_cancelled">Une autre exécution d\'Autotune est détectée, l\'exécution est annulée</string>
|
<string name="autotune_run_cancelled">Une autre exécution d\'Autotune est détectée, l\'exécution est annulée</string>
|
||||||
|
<string name="needconnectpermission">L\'application a besoin de l\'autorisation Bluetooth</string>
|
||||||
<plurals name="days">
|
<plurals name="days">
|
||||||
<item quantity="one">%1$d jour</item>
|
<item quantity="one">%1$d jour</item>
|
||||||
<item quantity="other">%1$d jours</item>
|
<item quantity="other">%1$d jours</item>
|
||||||
|
|
|
@ -248,6 +248,8 @@
|
||||||
<item name="crossTargetColor">@color/white</item>
|
<item name="crossTargetColor">@color/white</item>
|
||||||
<!---Spinner style from pump common-->
|
<!---Spinner style from pump common-->
|
||||||
<item name="android:spinnerItemStyle">@style/CommonSpinnerItemStyle</item>
|
<item name="android:spinnerItemStyle">@style/CommonSpinnerItemStyle</item>
|
||||||
|
<!---Custom button -->
|
||||||
|
<item name="customBtnStyle">@style/GrayButton</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -218,4 +218,6 @@
|
||||||
<!---Icons in Loop area -->
|
<!---Icons in Loop area -->
|
||||||
<attr name="profileColor" format="reference|color" />
|
<attr name="profileColor" format="reference|color" />
|
||||||
<attr name="crossTargetColor" format="reference|color" />
|
<attr name="crossTargetColor" format="reference|color" />
|
||||||
|
<!---Custom button -->
|
||||||
|
<attr name="customBtnStyle" format="reference"/>
|
||||||
</resources>
|
</resources>
|
|
@ -249,6 +249,8 @@
|
||||||
<item name="crossTargetColor">@color/white</item>
|
<item name="crossTargetColor">@color/white</item>
|
||||||
<!---Spinner style from pump common-->
|
<!---Spinner style from pump common-->
|
||||||
<item name="android:spinnerItemStyle">@style/CommonSpinnerItemStyle</item>
|
<item name="android:spinnerItemStyle">@style/CommonSpinnerItemStyle</item>
|
||||||
|
<!---Custom button -->
|
||||||
|
<item name="customBtnStyle">@style/GrayButton</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="CommonSpinnerItemStyle" parent="Widget.AppCompat.TextView.SpinnerItem">
|
<style name="CommonSpinnerItemStyle" parent="Widget.AppCompat.TextView.SpinnerItem">
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="unsupported_action_in_pump">Handling understøttes ikke i pumpe. Brug kun AndroidAPS-brugerflade!</string>
|
||||||
|
</resources>
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="unsupported_action_in_pump">Nicht unterstützte Aktion in Insulinpumpe. Bitte nur AndroidAPS-UI benutzen!</string>
|
||||||
|
</resources>
|
||||||
|
|
|
@ -152,4 +152,6 @@
|
||||||
<string name="diaconn_g8_errorcode_34">LGS inaktiv, Befehl zum Ausschalten zurückgewiesen.</string>
|
<string name="diaconn_g8_errorcode_34">LGS inaktiv, Befehl zum Ausschalten zurückgewiesen.</string>
|
||||||
<string name="diaconn_g8_errorcode_35">TBR Start ist während einer laufenden TBR nicht möglich.</string>
|
<string name="diaconn_g8_errorcode_35">TBR Start ist während einer laufenden TBR nicht möglich.</string>
|
||||||
<string name="diaconn_g8_errorcode_36">TBR kann nicht gestoppt werden, da keine TBR läuft.</string>
|
<string name="diaconn_g8_errorcode_36">TBR kann nicht gestoppt werden, da keine TBR läuft.</string>
|
||||||
|
<string name="diaconn_g8_cloudsend_summary">Sende Pumpenprotokolle zur Diaconn Cloud.</string>
|
||||||
|
<string name="diaconn_g8_cloudsend_title">Diaconn Cloud-Sync</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -25,6 +25,7 @@ android {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':core')
|
implementation project(':core')
|
||||||
implementation project(':shared')
|
implementation project(':shared')
|
||||||
|
implementation project(':pump-common')
|
||||||
|
|
||||||
api "androidx.room:room-ktx:$room_version"
|
api "androidx.room:room-ktx:$room_version"
|
||||||
api "androidx.room:room-runtime:$room_version"
|
api "androidx.room:room-runtime:$room_version"
|
||||||
|
|
|
@ -590,7 +590,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Constrai
|
||||||
EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId());
|
EventOverviewBolusProgress.Treatment t = new EventOverviewBolusProgress.Treatment(0, 0, detailedBolusInfo.getBolusType() == DetailedBolusInfo.BolusType.SMB, detailedBolusInfo.getId());
|
||||||
final EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.INSTANCE;
|
final EventOverviewBolusProgress bolusingEvent = EventOverviewBolusProgress.INSTANCE;
|
||||||
bolusingEvent.setT(t);
|
bolusingEvent.setT(t);
|
||||||
bolusingEvent.setStatus(rh.gs(R.string.insight_delivered, 0d, insulin));
|
bolusingEvent.setStatus(rh.gs(R.string.bolus_delivered, 0d, insulin));
|
||||||
bolusingEvent.setPercent(0);
|
bolusingEvent.setPercent(0);
|
||||||
rxBus.send(bolusingEvent);
|
rxBus.send(bolusingEvent);
|
||||||
int trials = 0;
|
int trials = 0;
|
||||||
|
@ -629,14 +629,14 @@ public class LocalInsightPlugin extends PumpPluginBase implements Pump, Constrai
|
||||||
trials = -1;
|
trials = -1;
|
||||||
int percentBefore = bolusingEvent.getPercent();
|
int percentBefore = bolusingEvent.getPercent();
|
||||||
bolusingEvent.setPercent((int) (100D / activeBolus.getInitialAmount() * (activeBolus.getInitialAmount() - activeBolus.getRemainingAmount())));
|
bolusingEvent.setPercent((int) (100D / activeBolus.getInitialAmount() * (activeBolus.getInitialAmount() - activeBolus.getRemainingAmount())));
|
||||||
bolusingEvent.setStatus(rh.gs(R.string.insight_delivered, activeBolus.getInitialAmount() - activeBolus.getRemainingAmount(), activeBolus.getInitialAmount()));
|
bolusingEvent.setStatus(rh.gs(R.string.bolus_delivered, activeBolus.getInitialAmount() - activeBolus.getRemainingAmount(), activeBolus.getInitialAmount()));
|
||||||
if (percentBefore != bolusingEvent.getPercent())
|
if (percentBefore != bolusingEvent.getPercent())
|
||||||
rxBus.send(bolusingEvent);
|
rxBus.send(bolusingEvent);
|
||||||
} else {
|
} else {
|
||||||
synchronized ($bolusLock) {
|
synchronized ($bolusLock) {
|
||||||
if (bolusCancelled || trials == -1 || trials++ >= 5) {
|
if (bolusCancelled || trials == -1 || trials++ >= 5) {
|
||||||
if (!bolusCancelled) {
|
if (!bolusCancelled) {
|
||||||
bolusingEvent.setStatus(rh.gs(R.string.insight_delivered, insulin, insulin));
|
bolusingEvent.setStatus(rh.gs(R.string.bolus_delivered, insulin, insulin));
|
||||||
bolusingEvent.setPercent(100);
|
bolusingEvent.setPercent(100);
|
||||||
rxBus.send(bolusingEvent);
|
rxBus.send(bolusingEvent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class InsightConnectionService extends DaggerService implements Connectio
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean isPaired() {
|
public synchronized boolean isPaired() {
|
||||||
return pairingDataStorage.isPaired();
|
return pairingDataStorage != null && pairingDataStorage.isPaired();
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized <T extends AppLayerMessage> MessageRequest<T> requestMessage(T message) {
|
public synchronized <T extends AppLayerMessage> MessageRequest<T> requestMessage(T message) {
|
||||||
|
|
|
@ -7,6 +7,5 @@
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:paddingStart="16dp"
|
android:paddingStart="16dp"
|
||||||
android:paddingEnd="0dp"
|
android:paddingEnd="0dp"
|
||||||
android:textColor="#FFFFFF"
|
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
tools:text="Test" />
|
tools:text="Test" />
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
android:gravity="start"
|
android:gravity="start"
|
||||||
android:paddingStart="5dp"
|
android:paddingStart="5dp"
|
||||||
android:paddingEnd="0dp"
|
android:paddingEnd="0dp"
|
||||||
android:textColor="@android:color/white"
|
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Съвпадат ли кодовете, показани на това устройство и на Вашата помпа?</string>
|
<string name="code_compare">Съвпадат ли кодовете, показани на това устройство и на Вашата помпа?</string>
|
||||||
<string name="insight_pairing">Insight свързване</string>
|
<string name="insight_pairing">Insight свързване</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2fЕ / %2$.2fЕ доставени</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s:%2$s</string>
|
<string name="insight_alert_formatter">%1$s:%2$s</string>
|
||||||
<string name="tube_changed">Тръба сменена</string>
|
<string name="tube_changed">Тръба сменена</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Souhlasí kódy zobrazené na tomto zařízení a na pumpě?</string>
|
<string name="code_compare">Souhlasí kódy zobrazené na tomto zařízení a na pumpě?</string>
|
||||||
<string name="insight_pairing">Insight párování</string>
|
<string name="insight_pairing">Insight párování</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">Podáno %1$.2f U / %2$.2f U</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Vyměněna hadičky</string>
|
<string name="tube_changed">Vyměněna hadičky</string>
|
||||||
<string name="insightpump_shortname">Insight</string>
|
<string name="insightpump_shortname">Insight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Stemmer de viste koder overens mellem dette apparat og din pumpe?</string>
|
<string name="code_compare">Stemmer de viste koder overens mellem dette apparat og din pumpe?</string>
|
||||||
<string name="insight_pairing">Insight parring</string>
|
<string name="insight_pairing">Insight parring</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f IE / %2$.2f IE leveret</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Slange skiftet</string>
|
<string name="tube_changed">Slange skiftet</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Stimmen die Codes auf diesem Gerät und auf deiner Pumpe überein?</string>
|
<string name="code_compare">Stimmen die Codes auf diesem Gerät und auf deiner Pumpe überein?</string>
|
||||||
<string name="insight_pairing">Insight Kopplung</string>
|
<string name="insight_pairing">Insight Kopplung</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f IE / %2$.2f IE abgegeben</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Schlauch gewechselt</string>
|
<string name="tube_changed">Schlauch gewechselt</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">¿Coinciden los códigos mostrados en este dispositivo con los de la bomba?</string>
|
<string name="code_compare">¿Coinciden los códigos mostrados en este dispositivo con los de la bomba?</string>
|
||||||
<string name="insight_pairing">Insight emparejada</string>
|
<string name="insight_pairing">Insight emparejada</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U entregado</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Tubo cambiado</string>
|
<string name="tube_changed">Tubo cambiado</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Les codes affichés sur cet appareil et sur la pompe sont-ils identiques ?</string>
|
<string name="code_compare">Les codes affichés sur cet appareil et sur la pompe sont-ils identiques ?</string>
|
||||||
<string name="insight_pairing">Appairage de Insight</string>
|
<string name="insight_pairing">Appairage de Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U délivrés</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s : %2$s</string>
|
<string name="insight_alert_formatter">%1$s : %2$s</string>
|
||||||
<string name="tube_changed">Tubulure changée</string>
|
<string name="tube_changed">Tubulure changée</string>
|
||||||
<string name="insightpump_shortname">AC-I</string>
|
<string name="insightpump_shortname">AC-I</string>
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
<string name="tdd_total">TDD Lomlán</string>
|
<string name="tdd_total">TDD Lomlán</string>
|
||||||
<string name="eb_formatter">%1$.2f / %2$.2f A do %3$d nom</string>
|
<string name="eb_formatter">%1$.2f / %2$.2f A do %3$d nom</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f A / %2$.2f A seachadta</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="pump_stopped">Caidéil stopadh</string>
|
<string name="pump_stopped">Caidéil stopadh</string>
|
||||||
<string name="pump_started">Caidéil tosú</string>
|
<string name="pump_started">Caidéil tosú</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">I codici mostrati su questo dispositivo e sul micro combaciano?</string>
|
<string name="code_compare">I codici mostrati su questo dispositivo e sul micro combaciano?</string>
|
||||||
<string name="insight_pairing">Associazione Insight</string>
|
<string name="insight_pairing">Associazione Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U erogato</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Catetere sostituito</string>
|
<string name="tube_changed">Catetere sostituito</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">האם הקודים המוצגים בהתקן זה ובמשאבה זהים?</string>
|
<string name="code_compare">האם הקודים המוצגים בהתקן זה ובמשאבה זהים?</string>
|
||||||
<string name="insight_pairing">צימוד Insight</string>
|
<string name="insight_pairing">צימוד Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f יח\' מתוך %2$.2f יח\' הוזרקו</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">הצינורית הוחלפה</string>
|
<string name="tube_changed">הצינורית הוחלפה</string>
|
||||||
<string name="insightpump_shortname">Insight</string>
|
<string name="insightpump_shortname">Insight</string>
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
<string name="code_compare">이 장치에서 보여지는 코드와 펌프에서 보여지는 코드가 동일한가요?</string>
|
<string name="code_compare">이 장치에서 보여지는 코드와 펌프에서 보여지는 코드가 동일한가요?</string>
|
||||||
<string name="insight_pairing">Insight와 동기화</string>
|
<string name="insight_pairing">Insight와 동기화</string>
|
||||||
<string name="insight_local">아큐-첵 Insight</string>
|
<string name="insight_local">아큐-첵 Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U 주입됨</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">튜브 변경</string>
|
<string name="tube_changed">튜브 변경</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Ar kodas, kurį matote įrenginyje, sutampa su pompos kodu?</string>
|
<string name="code_compare">Ar kodas, kurį matote įrenginyje, sutampa su pompos kodu?</string>
|
||||||
<string name="insight_pairing">Insight sujungimas</string>
|
<string name="insight_pairing">Insight sujungimas</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f vv iš %2$.2f vv suleista</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Kateteris pakeistas</string>
|
<string name="tube_changed">Kateteris pakeistas</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Worden dezelfde codes weergegeven op dit apparaat als op je pomp?</string>
|
<string name="code_compare">Worden dezelfde codes weergegeven op dit apparaat als op je pomp?</string>
|
||||||
<string name="insight_pairing">Insight koppelen</string>
|
<string name="insight_pairing">Insight koppelen</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f E / %2$.2f E toegediend</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Slang vervangen</string>
|
<string name="tube_changed">Slang vervangen</string>
|
||||||
<string name="insightpump_shortname">Insight</string>
|
<string name="insightpump_shortname">Insight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Stemmer de viste kodene overens mellom denne enheten og din pumpe?</string>
|
<string name="code_compare">Stemmer de viste kodene overens mellom denne enheten og din pumpe?</string>
|
||||||
<string name="insight_pairing">Sammenkobling av Insight</string>
|
<string name="insight_pairing">Sammenkobling av Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f E / %2$.2f E levert</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Slange byttet</string>
|
<string name="tube_changed">Slange byttet</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Czy kody wyświetlone na tym urządzeniu i na twojej pompie pasują?</string>
|
<string name="code_compare">Czy kody wyświetlone na tym urządzeniu i na twojej pompie pasują?</string>
|
||||||
<string name="insight_pairing">Parowanie Insight</string>
|
<string name="insight_pairing">Parowanie Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">podano %1$.2f U / %2$.2f U</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Dren zmieniony</string>
|
<string name="tube_changed">Dren zmieniony</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Os códigos exibidos neste dispositivo e na sua bomba correspondem?</string>
|
<string name="code_compare">Os códigos exibidos neste dispositivo e na sua bomba correspondem?</string>
|
||||||
<string name="insight_pairing">Emparelhamento Insight</string>
|
<string name="insight_pairing">Emparelhamento Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U administrado</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Tubo mudado</string>
|
<string name="tube_changed">Tubo mudado</string>
|
||||||
<string name="insightpump_shortname">Visão</string>
|
<string name="insightpump_shortname">Visão</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Sunt identice codurile afișate aici și cele de pe pompă?</string>
|
<string name="code_compare">Sunt identice codurile afișate aici și cele de pe pompă?</string>
|
||||||
<string name="insight_pairing">Asociere Insight</string>
|
<string name="insight_pairing">Asociere Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U din %2$.2f U livrate</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s:%2$s</string>
|
<string name="insight_alert_formatter">%1$s:%2$s</string>
|
||||||
<string name="tube_changed">Canulă schimbată</string>
|
<string name="tube_changed">Canulă schimbată</string>
|
||||||
<string name="insightpump_shortname">Obiectiv</string>
|
<string name="insightpump_shortname">Obiectiv</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Коды на этом устройстве и на вашей помпе совпадают?</string>
|
<string name="code_compare">Коды на этом устройстве и на вашей помпе совпадают?</string>
|
||||||
<string name="insight_pairing">Сопряжение с Insight</string>
|
<string name="insight_pairing">Сопряжение с Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">Подано %1$.2fед / %2$.2fед</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Трубка заменена</string>
|
<string name="tube_changed">Трубка заменена</string>
|
||||||
<string name="insightpump_shortname">Поле обзора</string>
|
<string name="insightpump_shortname">Поле обзора</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Zhodujú sa kódy zobrazené na tomto zariadení a na pumpe?</string>
|
<string name="code_compare">Zhodujú sa kódy zobrazené na tomto zariadení a na pumpe?</string>
|
||||||
<string name="insight_pairing">Párovanie Insight</string>
|
<string name="insight_pairing">Párovanie Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f JI / %2$.2f JI podaných</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Hadička vymenená</string>
|
<string name="tube_changed">Hadička vymenená</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Stämmer koderna överens mellan denna enhet och din pump?</string>
|
<string name="code_compare">Stämmer koderna överens mellan denna enhet och din pump?</string>
|
||||||
<string name="insight_pairing">Parkoppling av Insight</string>
|
<string name="insight_pairing">Parkoppling av Insight</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2fU / %2$.2fU levererat</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Slang bytt</string>
|
<string name="tube_changed">Slang bytt</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">Bu cihazda ve pompanızda görüntülenen kodlar uyuşuyor mu?</string>
|
<string name="code_compare">Bu cihazda ve pompanızda görüntülenen kodlar uyuşuyor mu?</string>
|
||||||
<string name="insight_pairing">Insight eşleştirme</string>
|
<string name="insight_pairing">Insight eşleştirme</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f Ü / %2$.2f Ü gönderildi</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Hortum değişti</string>
|
<string name="tube_changed">Hortum değişti</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<string name="code_compare">此设备和您的泵上显示的代码是否匹配?</string>
|
<string name="code_compare">此设备和您的泵上显示的代码是否匹配?</string>
|
||||||
<string name="insight_pairing">Insight 正在配对</string>
|
<string name="insight_pairing">Insight 正在配对</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U 已输注</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">管路已经更换</string>
|
<string name="tube_changed">管路已经更换</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
<string name="code_compare">Do the codes displayed on this device and on your pump match?</string>
|
<string name="code_compare">Do the codes displayed on this device and on your pump match?</string>
|
||||||
<string name="insight_pairing">Insight pairing</string>
|
<string name="insight_pairing">Insight pairing</string>
|
||||||
<string name="insight_local">Accu-Chek Insight</string>
|
<string name="insight_local">Accu-Chek Insight</string>
|
||||||
<string name="insight_delivered">%1$.2f U / %2$.2f U delivered</string>
|
|
||||||
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
<string name="insight_alert_formatter">%1$s: %2$s</string>
|
||||||
<string name="tube_changed">Tube changed</string>
|
<string name="tube_changed">Tube changed</string>
|
||||||
<string name="insightpump_shortname">Sight</string>
|
<string name="insightpump_shortname">Sight</string>
|
||||||
|
|
|
@ -358,7 +358,7 @@ class MedtronicHistoryData @Inject constructor(
|
||||||
aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "ProcessHistoryData: TBRs Processed [count=%d, items=%s]", tbrs.size, gson.toJson(tbrs)))
|
aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "ProcessHistoryData: TBRs Processed [count=%d, items=%s]", tbrs.size, gson.toJson(tbrs)))
|
||||||
if (tbrs.isNotEmpty()) {
|
if (tbrs.isNotEmpty()) {
|
||||||
try {
|
try {
|
||||||
processTBREntries(tbrs, rewindRecords)
|
processTBREntries(tbrs)
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
aapsLogger.error(LTag.PUMP, "ProcessHistoryData: Error processing TBR entries: " + ex.message, ex)
|
aapsLogger.error(LTag.PUMP, "ProcessHistoryData: Error processing TBR entries: " + ex.message, ex)
|
||||||
throw ex
|
throw ex
|
||||||
|
@ -583,7 +583,7 @@ class MedtronicHistoryData @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processTBREntries(entryList: MutableList<PumpHistoryEntry>, rewindList: MutableList<PumpHistoryEntry>) {
|
private fun processTBREntries(entryList: MutableList<PumpHistoryEntry>) {
|
||||||
entryList.reverse()
|
entryList.reverse()
|
||||||
val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair
|
val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair
|
||||||
// var readOldItem = false
|
// var readOldItem = false
|
||||||
|
@ -607,7 +607,7 @@ class MedtronicHistoryData @Inject constructor(
|
||||||
|
|
||||||
val tbrRecords = pumpSyncStorage.getTBRs()
|
val tbrRecords = pumpSyncStorage.getTBRs()
|
||||||
|
|
||||||
val processList: MutableList<TempBasalProcessDTO> = createTBRProcessList(entryList, rewindList)
|
val processList: MutableList<TempBasalProcessDTO> = createTBRProcessList(entryList)
|
||||||
|
|
||||||
if (processList.isNotEmpty()) {
|
if (processList.isNotEmpty()) {
|
||||||
for (tempBasalProcessDTO in processList) {
|
for (tempBasalProcessDTO in processList) {
|
||||||
|
@ -731,7 +731,7 @@ class MedtronicHistoryData @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun createTBRProcessList(entryList: MutableList<PumpHistoryEntry>, rewindList: MutableList<PumpHistoryEntry>) : MutableList<TempBasalProcessDTO> {
|
fun createTBRProcessList(entryList: MutableList<PumpHistoryEntry>) : MutableList<TempBasalProcessDTO> {
|
||||||
|
|
||||||
aapsLogger.debug(LTag.PUMP, "${ProcessHistoryRecord.TBR.description} List (before filter): ${gson.toJson(entryList)}")
|
aapsLogger.debug(LTag.PUMP, "${ProcessHistoryRecord.TBR.description} List (before filter): ${gson.toJson(entryList)}")
|
||||||
|
|
||||||
|
@ -797,26 +797,70 @@ class MedtronicHistoryData @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// see if rewind items, need to fix any of current tempBasalProcessDTO items (bug 1724)
|
// TODO this solution needs to be overworked, commenting out for now
|
||||||
if (rewindList.isNotEmpty()) {
|
// val suspendList = getFilteredItems(newHistory, //
|
||||||
for (rewindEntry in rewindList) {
|
// setOf(PumpHistoryEntryType.SuspendPump))
|
||||||
for (tempBasalProcessDTO in processList) {
|
//
|
||||||
if (tempBasalProcessDTO.itemTwo==null) {
|
// val stopList : MutableList<PumpHistoryEntry> = mutableListOf()
|
||||||
val endTime: Long = DateTimeUtil.getATDWithAddedMinutes(tempBasalProcessDTO.itemOne.atechDateTime, tempBasalProcessDTO.itemOneTbr!!.durationMinutes)
|
// stopList.addAll(suspendList);
|
||||||
|
// stopList.addAll(rewindList);
|
||||||
if ((rewindEntry.atechDateTime > tempBasalProcessDTO.itemOne.atechDateTime) &&
|
//
|
||||||
(rewindEntry.atechDateTime < endTime)) {
|
// // TODO remove see if rewind items, need to fix any of current tempBasalProcessDTO items (bug 1724)
|
||||||
tempBasalProcessDTO.itemTwo = rewindEntry
|
// if (rewindList.isNotEmpty()) {
|
||||||
continue
|
// for (rewindEntry in rewindList) {
|
||||||
}
|
// for (tempBasalProcessDTO in processList) {
|
||||||
}
|
// if (tempBasalProcessDTO.itemTwo==null) {
|
||||||
}
|
// val endTime: Long = DateTimeUtil.getATDWithAddedMinutes(tempBasalProcessDTO.itemOne.atechDateTime, tempBasalProcessDTO.itemOneTbr!!.durationMinutes)
|
||||||
}
|
//
|
||||||
}
|
// if ((rewindEntry.atechDateTime > tempBasalProcessDTO.itemOne.atechDateTime) &&
|
||||||
|
// (rewindEntry.atechDateTime < endTime)) {
|
||||||
|
// tempBasalProcessDTO.itemTwo = rewindEntry
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // see if have rewind/stop items that need to fix any of current tempBasalProcessDTO items (bug 1724)
|
||||||
|
// if (stopList.isNotEmpty()) {
|
||||||
|
// for (tempBasalProcessDTO in processList) {
|
||||||
|
// if (tempBasalProcessDTO.itemTwo==null) {
|
||||||
|
// val endTime: Long = DateTimeUtil.getATDWithAddedMinutes(tempBasalProcessDTO.itemOne.atechDateTime, tempBasalProcessDTO.itemOneTbr!!.durationMinutes)
|
||||||
|
//
|
||||||
|
// val findNearestEntry = findNearestEntry(tempBasalProcessDTO.itemOne.atechDateTime, endTime, stopList);
|
||||||
|
//
|
||||||
|
// if (findNearestEntry!=null) {
|
||||||
|
// tempBasalProcessDTO.itemTwo = findNearestEntry
|
||||||
|
// stopList.remove(findNearestEntry)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return processList
|
return processList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun findNearestEntry(startTime: Long, endTime: Long, list: MutableList<PumpHistoryEntry>) : PumpHistoryEntry? {
|
||||||
|
val outList: MutableList<PumpHistoryEntry> = mutableListOf()
|
||||||
|
|
||||||
|
for (pumpHistoryEntry in list) {
|
||||||
|
if ((pumpHistoryEntry.atechDateTime > startTime) &&
|
||||||
|
(pumpHistoryEntry.atechDateTime < endTime)) {
|
||||||
|
outList.add(pumpHistoryEntry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outList.size == 0) {
|
||||||
|
return null
|
||||||
|
} else if (outList.size==1) {
|
||||||
|
return outList[0]
|
||||||
|
} else {
|
||||||
|
// TODO
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun isTBRActive(dbEntry: PumpDbEntryTBR): Boolean {
|
fun isTBRActive(dbEntry: PumpDbEntryTBR): Boolean {
|
||||||
return isTBRActive(
|
return isTBRActive(
|
||||||
startTimestamp = dbEntry.date,
|
startTimestamp = dbEntry.date,
|
||||||
|
|
|
@ -91,4 +91,6 @@
|
||||||
<string name="set_neutral_temps_summary">Wenn diese Option aktiviert ist, wird die TBR vor Ende jeder Stunde abgebrochen. Dies kann dazu beitragen, einige Pumpen davon abzuhalten, zur vollen Stunde zu vibrieren / zu piepsen.</string>
|
<string name="set_neutral_temps_summary">Wenn diese Option aktiviert ist, wird die TBR vor Ende jeder Stunde abgebrochen. Dies kann dazu beitragen, einige Pumpen davon abzuhalten, zur vollen Stunde zu vibrieren / zu piepsen.</string>
|
||||||
<string name="mdt_tbr_remaining">%1$.1f U/h (%2$d Minuten verbleibend)</string>
|
<string name="mdt_tbr_remaining">%1$.1f U/h (%2$d Minuten verbleibend)</string>
|
||||||
<string name="invalid_history_data">Ungültige Pumpenhistorie erkannt. Eröffne ein neues Ticket (issue) und füge Logs bei.</string>
|
<string name="invalid_history_data">Ungültige Pumpenhistorie erkannt. Eröffne ein neues Ticket (issue) und füge Logs bei.</string>
|
||||||
|
<string name="riley_statistics">RL Statistik</string>
|
||||||
|
<string name="medtronic_history_type">Typ:</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -141,7 +141,7 @@ class MedtronicHistoryDataUTest : TestBase() {
|
||||||
|
|
||||||
println("PumpHistoryEntries: getRewindItems: $rewindRecords.size : " + gson.toJson(rewindRecords))
|
println("PumpHistoryEntries: getRewindItems: $rewindRecords.size : " + gson.toJson(rewindRecords))
|
||||||
|
|
||||||
val processList: MutableList<TempBasalProcessDTO> = medtronicHistoryData.createTBRProcessList(tbrs, rewindRecords)
|
val processList: MutableList<TempBasalProcessDTO> = medtronicHistoryData.createTBRProcessList(tbrs)
|
||||||
|
|
||||||
println("PumpHistoryEntries: processList: " + processList.size)
|
println("PumpHistoryEntries: processList: " + processList.size)
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ class MedtronicHistoryDataUTest : TestBase() {
|
||||||
|
|
||||||
println("TBR Pre-Process List: " + gson.toJson(yourClassList))
|
println("TBR Pre-Process List: " + gson.toJson(yourClassList))
|
||||||
|
|
||||||
val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList, mutableListOf())
|
val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList)
|
||||||
|
|
||||||
println("TBR Process List: " + createTBRProcessList.size)
|
println("TBR Process List: " + createTBRProcessList.size)
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ class MedtronicHistoryDataUTest : TestBase() {
|
||||||
|
|
||||||
println("TBR Pre-Process List (Special): " + gson.toJson(yourClassList))
|
println("TBR Pre-Process List (Special): " + gson.toJson(yourClassList))
|
||||||
|
|
||||||
val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList, mutableListOf())
|
val createTBRProcessList = unitToTest.createTBRProcessList(yourClassList)
|
||||||
|
|
||||||
println("TBR Process List (Special): " + createTBRProcessList.size)
|
println("TBR Process List (Special): " + createTBRProcessList.size)
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ import info.nightscout.androidaps.queue.commands.CustomCommand
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter.to2Decimal
|
import info.nightscout.androidaps.utils.DecimalFormatter.to2Decimal
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
|
import info.nightscout.androidaps.utils.Round
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.TimeChangeType
|
import info.nightscout.androidaps.utils.TimeChangeType
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
|
@ -698,7 +699,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
val percent = (waited.toFloat() / estimatedDeliveryTimeSeconds) * 100
|
val percent = (waited.toFloat() / estimatedDeliveryTimeSeconds) * 100
|
||||||
updateBolusProgressDialog(
|
updateBolusProgressDialog(
|
||||||
rh.gs(R.string.dash_bolusdelivering, requestedBolusAmount),
|
rh.gs(R.string.bolus_delivered, Round.roundTo(percent*requestedBolusAmount/100, PodConstants.POD_PULSE_BOLUS_UNITS), requestedBolusAmount),
|
||||||
percent.toInt()
|
percent.toInt()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -729,7 +730,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
val remainingUnits = podStateManager.lastBolus!!.bolusUnitsRemaining
|
val remainingUnits = podStateManager.lastBolus!!.bolusUnitsRemaining
|
||||||
val percent = ((requestedBolusAmount - remainingUnits) / requestedBolusAmount) * 100
|
val percent = ((requestedBolusAmount - remainingUnits) / requestedBolusAmount) * 100
|
||||||
updateBolusProgressDialog(
|
updateBolusProgressDialog(
|
||||||
rh.gs(R.string.bolusdelivering, requestedBolusAmount),
|
rh.gs(R.string.bolus_delivered, Round.roundTo(requestedBolusAmount - remainingUnits, PodConstants.POD_PULSE_BOLUS_UNITS), requestedBolusAmount),
|
||||||
percent.toInt()
|
percent.toInt()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -16,5 +16,4 @@
|
||||||
<!-- Exceptions -->
|
<!-- Exceptions -->
|
||||||
<string name="omnipod_common_history_tbr_value">Количество: %1$.2f U, Продължителност: %2$d мин</string>
|
<string name="omnipod_common_history_tbr_value">Количество: %1$.2f U, Продължителност: %2$d мин</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2fЕ</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2fЕ</string>
|
||||||
<string name="dash_bolusdelivering">Доставяне %1$.2f U</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Neznámý stav příkazu</string>
|
<string name="omnipod_dash_unknown">Neznámý stav příkazu</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rychlost: %1$.2f U, doba trvání: %2$d minut</string>
|
<string name="omnipod_common_history_tbr_value">Rychlost: %1$.2f U, doba trvání: %2$d minut</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Podávání %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Výdej inzulínu je pozastaven</string>
|
<string name="omnipod_common_alert_delivery_suspended">Výdej inzulínu je pozastaven</string>
|
||||||
<string name="omnipod_dash_connection_lost">Ztraceno připojení k podu</string>
|
<string name="omnipod_dash_connection_lost">Ztraceno připojení k podu</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Vydává se další bolus</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Vydává se další bolus</string>
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
<string name="omnipod_dash_unknown">Ukendt tilstand for kommandoen</string>
|
<string name="omnipod_dash_unknown">Ukendt tilstand for kommandoen</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rate: %1$.2f IE, varighed: %2$d minutter</string>
|
<string name="omnipod_common_history_tbr_value">Rate: %1$.2f IE, varighed: %2$d minutter</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f IE</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f IE</string>
|
||||||
<string name="dash_bolusdelivering">Afgiver %1$.2f IE</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insulintilførslen suspenderet</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insulintilførslen suspenderet</string>
|
||||||
<string name="omnipod_dash_connection_lost">Mistede forbindelse til pod</string>
|
<string name="omnipod_dash_connection_lost">Mistede forbindelse til pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">En anden bolus er ved at blive afgivet</string>
|
<string name="omnipod_dash_bolus_already_in_progress">En anden bolus er ved at blive afgivet</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Unbekannter Status für den Befehl</string>
|
<string name="omnipod_dash_unknown">Unbekannter Status für den Befehl</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rate: %1$.2f IE, Dauer: %2$d min.</string>
|
<string name="omnipod_common_history_tbr_value">Rate: %1$.2f IE, Dauer: %2$d min.</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f IE</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f IE</string>
|
||||||
<string name="dash_bolusdelivering">Gebe %1$.2f IE ab</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insulinabgabe ist unterbrochen</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insulinabgabe ist unterbrochen</string>
|
||||||
<string name="omnipod_dash_connection_lost">Verbindung zum Pod verloren</string>
|
<string name="omnipod_dash_connection_lost">Verbindung zum Pod verloren</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Ein weiterer Bolus wird abgegeben</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Ein weiterer Bolus wird abgegeben</string>
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
<string name="omnipod_dash_unknown">Estado desconocido para el comando</string>
|
<string name="omnipod_dash_unknown">Estado desconocido para el comando</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Tasa: %1$.2f U, duración: %2$d minutos</string>
|
<string name="omnipod_common_history_tbr_value">Tasa: %1$.2f U, duración: %2$d minutos</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Entregando %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Suspendida la entrega de insulina</string>
|
<string name="omnipod_common_alert_delivery_suspended">Suspendida la entrega de insulina</string>
|
||||||
<string name="omnipod_dash_connection_lost">Conexión perdida con el pod</string>
|
<string name="omnipod_dash_connection_lost">Conexión perdida con el pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Otro bolo está siendo entregado</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Otro bolo está siendo entregado</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">État inconnu pour la commande</string>
|
<string name="omnipod_dash_unknown">État inconnu pour la commande</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Débit : %1$.2f U, durée : %2$d minutes</string>
|
<string name="omnipod_common_history_tbr_value">Débit : %1$.2f U, durée : %2$d minutes</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Injection de %1$.2fU en cours</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Injection d\'insuline suspendue</string>
|
<string name="omnipod_common_alert_delivery_suspended">Injection d\'insuline suspendue</string>
|
||||||
<string name="omnipod_dash_connection_lost">Connexion perdue avec le pod</string>
|
<string name="omnipod_dash_connection_lost">Connexion perdue avec le pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Un autre bolus est en cours d\'injection</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Un autre bolus est en cours d\'injection</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Stato sconosciuto per il comando</string>
|
<string name="omnipod_dash_unknown">Stato sconosciuto per il comando</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Tasso: %1$.2f U, durata: %2$d minuti</string>
|
<string name="omnipod_common_history_tbr_value">Tasso: %1$.2f U, durata: %2$d minuti</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Erogazione di %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">L\'erogazione di insulina è sospesa</string>
|
<string name="omnipod_common_alert_delivery_suspended">L\'erogazione di insulina è sospesa</string>
|
||||||
<string name="omnipod_dash_connection_lost">Persa connessione al pod</string>
|
<string name="omnipod_dash_connection_lost">Persa connessione al pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Altro bolo in erogazione</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Altro bolo in erogazione</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">מצב הפקודה לא ידוע</string>
|
<string name="omnipod_dash_unknown">מצב הפקודה לא ידוע</string>
|
||||||
<string name="omnipod_common_history_tbr_value">מינון: %1$.2f יח\', משך: %2$d דק\'</string>
|
<string name="omnipod_common_history_tbr_value">מינון: %1$.2f יח\', משך: %2$d דק\'</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f יח\'</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f יח\'</string>
|
||||||
<string name="dash_bolusdelivering">מזריק %1$.2f יח\'</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">הזרקת האינסולין מופסקת</string>
|
<string name="omnipod_common_alert_delivery_suspended">הזרקת האינסולין מופסקת</string>
|
||||||
<string name="omnipod_dash_connection_lost">אבד החיבור לפוד</string>
|
<string name="omnipod_dash_connection_lost">אבד החיבור לפוד</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">בולוס אחר מוזרק כרגע</string>
|
<string name="omnipod_dash_bolus_already_in_progress">בולוס אחר מוזרק כרגע</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Nežinoma komandos būklė</string>
|
<string name="omnipod_dash_unknown">Nežinoma komandos būklė</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Kiekis: %1$.2f vv, trukmė: %2$d min</string>
|
<string name="omnipod_common_history_tbr_value">Kiekis: %1$.2f vv, trukmė: %2$d min</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f vv</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f vv</string>
|
||||||
<string name="dash_bolusdelivering">Leidžiama %1$.2f vv</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insulino leidimas sustabdytas</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insulino leidimas sustabdytas</string>
|
||||||
<string name="omnipod_dash_connection_lost">Ryšys su Pod prarastas</string>
|
<string name="omnipod_dash_connection_lost">Ryšys su Pod prarastas</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Kitas bolusas yra jau leidžiamas</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Kitas bolusas yra jau leidžiamas</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Onbekende status voor de opdracht</string>
|
<string name="omnipod_dash_unknown">Onbekende status voor de opdracht</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Basaal: %1$.2f E, Duur: %2$d min</string>
|
<string name="omnipod_common_history_tbr_value">Basaal: %1$.2f E, Duur: %2$d min</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f E</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f E</string>
|
||||||
<string name="dash_bolusdelivering">%1$.2f eh worden toegediend</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insuline levering is opgeschort</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insuline levering is opgeschort</string>
|
||||||
<string name="omnipod_dash_connection_lost">Verbinding met pod verbroken</string>
|
<string name="omnipod_dash_connection_lost">Verbinding met pod verbroken</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Een andere bolus wordt op dit moment toegediend</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Een andere bolus wordt op dit moment toegediend</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Ukjent tilstand for kommandoen</string>
|
<string name="omnipod_dash_unknown">Ukjent tilstand for kommandoen</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Dosering: %1$.2f E, varighet: %2$d min</string>
|
<string name="omnipod_common_history_tbr_value">Dosering: %1$.2f E, varighet: %2$d min</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f E</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f E</string>
|
||||||
<string name="dash_bolusdelivering">Leverer %1$.2f E</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insulintilførsel er suspendert</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insulintilførsel er suspendert</string>
|
||||||
<string name="omnipod_dash_connection_lost">Mistet tilkoblingen til pod</string>
|
<string name="omnipod_dash_connection_lost">Mistet tilkoblingen til pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">En annen bolusdose blir levert</string>
|
<string name="omnipod_dash_bolus_already_in_progress">En annen bolusdose blir levert</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Nieznany stan polecenia</string>
|
<string name="omnipod_dash_unknown">Nieznany stan polecenia</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Dawka: %1$.2f U, Czas trwania: %2$d min</string>
|
<string name="omnipod_common_history_tbr_value">Dawka: %1$.2f U, Czas trwania: %2$d min</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Dostarczanie %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Podawanie insuliny zawieszone</string>
|
<string name="omnipod_common_alert_delivery_suspended">Podawanie insuliny zawieszone</string>
|
||||||
<string name="omnipod_dash_connection_lost">Utracono połączenie z Podem</string>
|
<string name="omnipod_dash_connection_lost">Utracono połączenie z Podem</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Inny bolus jest dostarczany</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Inny bolus jest dostarczany</string>
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
<string name="omnipod_dash_unknown">Estado desconhecido para o comando</string>
|
<string name="omnipod_dash_unknown">Estado desconhecido para o comando</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rácio: %1$.2f U, duração: %2$d minutes</string>
|
<string name="omnipod_common_history_tbr_value">Rácio: %1$.2f U, duração: %2$d minutes</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">A administrar %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">A entrega de insulina está suspensa</string>
|
<string name="omnipod_common_alert_delivery_suspended">A entrega de insulina está suspensa</string>
|
||||||
<string name="omnipod_dash_connection_lost">Perda de ligação ao pod</string>
|
<string name="omnipod_dash_connection_lost">Perda de ligação ao pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Outro bólus está a ser administrado</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Outro bólus está a ser administrado</string>
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
<string name="omnipod_dash_unknown">Stare necunoscută pentru comandă</string>
|
<string name="omnipod_dash_unknown">Stare necunoscută pentru comandă</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rata: %1$.2f U, durata: %2$d minute</string>
|
<string name="omnipod_common_history_tbr_value">Rata: %1$.2f U, durata: %2$d minute</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f U</string>
|
||||||
<string name="dash_bolusdelivering">Se livrează %1$.2f U</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Administrarea insulinei este suspendată</string>
|
<string name="omnipod_common_alert_delivery_suspended">Administrarea insulinei este suspendată</string>
|
||||||
<string name="omnipod_dash_connection_lost">S-a pierdut conexiunea la pod</string>
|
<string name="omnipod_dash_connection_lost">S-a pierdut conexiunea la pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Un alt bolus este în curs de livrare</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Un alt bolus este în curs de livrare</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Состояние команды неясно</string>
|
<string name="omnipod_dash_unknown">Состояние команды неясно</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Баз Скорость: %1$.2f ед, Продолжительность: %2$d мин</string>
|
<string name="omnipod_common_history_tbr_value">Баз Скорость: %1$.2f ед, Продолжительность: %2$d мин</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f ед</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f ед</string>
|
||||||
<string name="dash_bolusdelivering">Подается болюс %1$.2f ед</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Введение инсулина приостановлено</string>
|
<string name="omnipod_common_alert_delivery_suspended">Введение инсулина приостановлено</string>
|
||||||
<string name="omnipod_dash_connection_lost">Потеряно соединение с подом</string>
|
<string name="omnipod_dash_connection_lost">Потеряно соединение с подом</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Вводится еще один болюс</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Вводится еще один болюс</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Neznámy stav príkazu</string>
|
<string name="omnipod_dash_unknown">Neznámy stav príkazu</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Rýchlosť: %1$.2f JI, Doba trvania: %2$d minút</string>
|
<string name="omnipod_common_history_tbr_value">Rýchlosť: %1$.2f JI, Doba trvania: %2$d minút</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2f JI</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2f JI</string>
|
||||||
<string name="dash_bolusdelivering">Podávanie %1$.2f JI</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Podávanie inzulínu je pozastavené</string>
|
<string name="omnipod_common_alert_delivery_suspended">Podávanie inzulínu je pozastavené</string>
|
||||||
<string name="omnipod_dash_connection_lost">Stratilo sa spojenie s Podom</string>
|
<string name="omnipod_dash_connection_lost">Stratilo sa spojenie s Podom</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">Už sa podáva iný bolus</string>
|
<string name="omnipod_dash_bolus_already_in_progress">Už sa podáva iný bolus</string>
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<string name="omnipod_dash_unknown">Okänt tillstånd för kommandot</string>
|
<string name="omnipod_dash_unknown">Okänt tillstånd för kommandot</string>
|
||||||
<string name="omnipod_common_history_tbr_value">Dos: %1$.2f U, Duration: %2$d min</string>
|
<string name="omnipod_common_history_tbr_value">Dos: %1$.2f U, Duration: %2$d min</string>
|
||||||
<string name="omnipod_common_history_bolus_value">%1$.2fU</string>
|
<string name="omnipod_common_history_bolus_value">%1$.2fU</string>
|
||||||
<string name="dash_bolusdelivering">Levererar %1$.2f enheter</string>
|
|
||||||
<string name="omnipod_common_alert_delivery_suspended">Insulinleverans är pausad</string>
|
<string name="omnipod_common_alert_delivery_suspended">Insulinleverans är pausad</string>
|
||||||
<string name="omnipod_dash_connection_lost">Tappade anslutningen till pod</string>
|
<string name="omnipod_dash_connection_lost">Tappade anslutningen till pod</string>
|
||||||
<string name="omnipod_dash_bolus_already_in_progress">En annan bolus håller på att levereras</string>
|
<string name="omnipod_dash_bolus_already_in_progress">En annan bolus håller på att levereras</string>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue