Merge branch 'Fix/SaveMissingDays' into Autotune/TuneWeekDaysClean
# Conflicts: # app/src/main/java/info/nightscout/androidaps/plugins/general/autotune/AutotunePlugin.kt
This commit is contained in:
commit
32960e78b1
49 changed files with 324 additions and 247 deletions
|
@ -39,7 +39,6 @@ import info.nightscout.androidaps.events.EventPreferenceChange
|
||||||
import info.nightscout.androidaps.events.EventRebuildTabs
|
import info.nightscout.androidaps.events.EventRebuildTabs
|
||||||
import info.nightscout.androidaps.interfaces.*
|
import info.nightscout.androidaps.interfaces.*
|
||||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
||||||
import info.nightscout.androidaps.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
|
import info.nightscout.androidaps.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
|
||||||
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
|
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
|
||||||
|
@ -49,7 +48,7 @@ import info.nightscout.androidaps.setupwizard.SetupWizardActivity
|
||||||
import info.nightscout.androidaps.utils.AndroidPermission
|
import info.nightscout.androidaps.utils.AndroidPermission
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
|
import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
|
||||||
import info.nightscout.androidaps.utils.locale.LocaleHelper
|
import info.nightscout.androidaps.utils.locale.LocaleHelper
|
||||||
import info.nightscout.androidaps.utils.protection.PasswordCheck
|
import info.nightscout.androidaps.utils.protection.PasswordCheck
|
||||||
|
|
|
@ -43,7 +43,7 @@ import info.nightscout.androidaps.utils.ActivityMonitor
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.LocalAlertUtils
|
import info.nightscout.androidaps.utils.LocalAlertUtils
|
||||||
import info.nightscout.androidaps.utils.ProcessLifecycleListener
|
import info.nightscout.androidaps.utils.ProcessLifecycleListener
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.locale.LocaleHelper
|
import info.nightscout.androidaps.utils.locale.LocaleHelper
|
||||||
import info.nightscout.androidaps.widget.updateWidget
|
import info.nightscout.androidaps.widget.updateWidget
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
|
|
|
@ -37,7 +37,7 @@ 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.utils.Translator
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
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
|
||||||
|
|
|
@ -11,7 +11,7 @@ import info.nightscout.androidaps.activities.fragments.*
|
||||||
import info.nightscout.androidaps.databinding.TreatmentsFragmentBinding
|
import info.nightscout.androidaps.databinding.TreatmentsFragmentBinding
|
||||||
import info.nightscout.androidaps.extensions.toVisibility
|
import info.nightscout.androidaps.extensions.toVisibility
|
||||||
import info.nightscout.androidaps.interfaces.ActivePlugin
|
import info.nightscout.androidaps.interfaces.ActivePlugin
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class TreatmentsActivity : NoSplashAppCompatActivity() {
|
class TreatmentsActivity : NoSplashAppCompatActivity() {
|
||||||
|
|
|
@ -40,7 +40,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
|
|
|
@ -25,7 +25,7 @@ import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientRestart
|
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientRestart
|
||||||
import info.nightscout.androidaps.utils.*
|
import info.nightscout.androidaps.utils.*
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
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
|
||||||
|
|
|
@ -36,7 +36,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
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
|
||||||
|
|
|
@ -35,7 +35,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientR
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventNewHistoryData
|
||||||
import info.nightscout.androidaps.utils.*
|
import info.nightscout.androidaps.utils.*
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
|
|
|
@ -28,7 +28,7 @@ import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.androidNotification.NotificationHolderImpl
|
import info.nightscout.androidaps.utils.androidNotification.NotificationHolderImpl
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
||||||
import info.nightscout.androidaps.utils.buildHelper.ConfigImpl
|
import info.nightscout.androidaps.utils.buildHelper.ConfigImpl
|
||||||
import info.nightscout.androidaps.utils.resources.IconsProviderImplementation
|
import info.nightscout.androidaps.utils.resources.IconsProviderImplementation
|
||||||
|
|
|
@ -17,7 +17,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProv
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.Profiler
|
import info.nightscout.androidaps.utils.Profiler
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
|
|
|
@ -23,7 +23,7 @@ import info.nightscout.androidaps.interfaces.PluginType
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.events.EventConfigBuilderUpdateGui
|
import info.nightscout.androidaps.plugins.configBuilder.events.EventConfigBuilderUpdateGui
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
||||||
import info.nightscout.androidaps.utils.protection.ProtectionCheck.Protection.PREFERENCES
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck.Protection.PREFERENCES
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
|
|
|
@ -19,7 +19,7 @@ import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.Round
|
import info.nightscout.androidaps.utils.Round
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
|
@ -39,7 +39,7 @@ import info.nightscout.androidaps.skins.SkinProvider
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
|
|
|
@ -21,7 +21,7 @@ import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.JsonHelper
|
import info.nightscout.androidaps.utils.JsonHelper
|
||||||
import info.nightscout.androidaps.utils.MidnightTime
|
import info.nightscout.androidaps.utils.MidnightTime
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import org.json.JSONException
|
import org.json.JSONException
|
||||||
|
@ -50,7 +50,7 @@ class AutotunePlugin @Inject constructor(
|
||||||
private val autotuneIob: AutotuneIob,
|
private val autotuneIob: AutotuneIob,
|
||||||
private val autotunePrep: AutotunePrep,
|
private val autotunePrep: AutotunePrep,
|
||||||
private val autotuneCore: AutotuneCore,
|
private val autotuneCore: AutotuneCore,
|
||||||
private val buildHelper:BuildHelper,
|
private val buildHelper: BuildHelper,
|
||||||
private val uel: UserEntryLogger,
|
private val uel: UserEntryLogger,
|
||||||
aapsLogger: AAPSLogger
|
aapsLogger: AAPSLogger
|
||||||
) : PluginBase(PluginDescription()
|
) : PluginBase(PluginDescription()
|
||||||
|
@ -339,11 +339,16 @@ class AutotunePlugin @Inject constructor(
|
||||||
json.put("pumpProfileName", pumpProfile.profilename)
|
json.put("pumpProfileName", pumpProfile.profilename)
|
||||||
json.put("pumpPeak", pumpProfile.peak)
|
json.put("pumpPeak", pumpProfile.peak)
|
||||||
json.put("pumpDia", pumpProfile.dia)
|
json.put("pumpDia", pumpProfile.dia)
|
||||||
json.put("tunedProfile", tunedProfile?.profile?.toPureNsJson(dateUtil))
|
tunedProfile?.let { atProfile ->
|
||||||
json.put("tunedCircadianProfile", tunedProfile?.circadianProfile?.toPureNsJson(dateUtil))
|
json.put("tunedProfile", atProfile.profile.toPureNsJson(dateUtil))
|
||||||
json.put("tunedProfileName", tunedProfile?.profilename)
|
json.put("tunedCircadianProfile", atProfile.circadianProfile.toPureNsJson(dateUtil))
|
||||||
json.put("tunedPeak", tunedProfile?.peak)
|
json.put("tunedProfileName", atProfile.profilename)
|
||||||
json.put("tunedDia", tunedProfile?.dia)
|
json.put("tunedPeak", atProfile.peak)
|
||||||
|
json.put("tunedDia", atProfile.dia)
|
||||||
|
for (i in 0..23) {
|
||||||
|
json.put("missingDays_$i", atProfile.basalUntuned[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
for (i in days.weekdays.indices) {
|
for (i in days.weekdays.indices) {
|
||||||
json.put(InputWeekDay.DayOfWeek.values()[i].name, days.weekdays[i])
|
json.put(InputWeekDay.DayOfWeek.values()[i].name, days.weekdays[i])
|
||||||
}
|
}
|
||||||
|
@ -377,6 +382,9 @@ class AutotunePlugin @Inject constructor(
|
||||||
tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile ->
|
tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile ->
|
||||||
atProfile.profilename = tunedProfileName
|
atProfile.profilename = tunedProfileName
|
||||||
atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned)
|
atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned)
|
||||||
|
for (i in 0..23) {
|
||||||
|
atProfile.basalUntuned[i] = JsonHelper.safeGetInt(json,"missingDays_$i")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (i in days.weekdays.indices)
|
for (i in days.weekdays.indices)
|
||||||
days.weekdays[i] = JsonHelper.safeGetBoolean(json, InputWeekDay.DayOfWeek.values()[i].name,true)
|
days.weekdays[i] = JsonHelper.safeGetBoolean(json, InputWeekDay.DayOfWeek.values()[i].name,true)
|
||||||
|
|
|
@ -39,7 +39,7 @@ import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.PrefImportSummaryDialog
|
import info.nightscout.androidaps.utils.alertDialogs.PrefImportSummaryDialog
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.TwoMessagesAlertDialog
|
import info.nightscout.androidaps.utils.alertDialogs.TwoMessagesAlertDialog
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.WarningDialog
|
import info.nightscout.androidaps.utils.alertDialogs.WarningDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.protection.PasswordCheck
|
import info.nightscout.androidaps.utils.protection.PasswordCheck
|
||||||
import info.nightscout.androidaps.utils.storage.Storage
|
import info.nightscout.androidaps.utils.storage.Storage
|
||||||
import info.nightscout.androidaps.utils.userEntry.UserEntryPresentationHelper
|
import info.nightscout.androidaps.utils.userEntry.UserEntryPresentationHelper
|
||||||
|
|
|
@ -13,7 +13,7 @@ import info.nightscout.androidaps.interfaces.PluginDescription
|
||||||
import info.nightscout.androidaps.interfaces.PluginType
|
import info.nightscout.androidaps.interfaces.PluginType
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import java.io.*
|
import java.io.*
|
||||||
|
|
|
@ -27,7 +27,7 @@ import info.nightscout.androidaps.receivers.DataWorker
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.JsonHelper
|
import info.nightscout.androidaps.utils.JsonHelper
|
||||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetLong
|
import info.nightscout.androidaps.utils.JsonHelper.safeGetLong
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
|
@ -14,7 +14,7 @@ import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.shared.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.data.NSMbg
|
import info.nightscout.androidaps.plugins.general.nsclient.data.NSMbg
|
||||||
import info.nightscout.androidaps.receivers.DataWorker
|
import info.nightscout.androidaps.receivers.DataWorker
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.services.NSClientServ
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.HtmlHelper.fromHtml
|
import info.nightscout.androidaps.utils.HtmlHelper.fromHtml
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
|
|
|
@ -48,7 +48,7 @@ import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
||||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetStringAllowNull
|
import info.nightscout.androidaps.utils.JsonHelper.safeGetStringAllowNull
|
||||||
import info.nightscout.androidaps.utils.T.Companion.mins
|
import info.nightscout.androidaps.utils.T.Companion.mins
|
||||||
import info.nightscout.androidaps.utils.XDripBroadcast
|
import info.nightscout.androidaps.utils.XDripBroadcast
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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.logging.LTag
|
import info.nightscout.shared.logging.LTag
|
||||||
|
|
|
@ -251,7 +251,6 @@ class OverviewData @Inject constructor(
|
||||||
var bgReadingGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
var bgReadingGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||||
var predictionsGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
var predictionsGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||||
|
|
||||||
var maxBasalValueFound = 0.0
|
|
||||||
val basalScale = Scale()
|
val basalScale = Scale()
|
||||||
var baseBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
var baseBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||||
var tempBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
var tempBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||||
|
|
|
@ -66,7 +66,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
import info.nightscout.androidaps.utils.ToastUtils
|
||||||
import info.nightscout.androidaps.utils.TrendCalculator
|
import info.nightscout.androidaps.utils.TrendCalculator
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.androidaps.utils.ui.SingleClickButton
|
import info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
|
|
@ -19,7 +19,7 @@ import info.nightscout.androidaps.interfaces.Loop
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
|
@ -73,13 +73,16 @@ class GraphData(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addBasals() {
|
fun addBasals() {
|
||||||
maxY = max(maxY, defaultValueHelper.determineHighLine())
|
overviewData.basalScale.multiplier = 1.0 // get unscaled Y-values for max calculation
|
||||||
val scale = defaultValueHelper.determineLowLine() / maxY / 1.2
|
var maxBasalValue = maxOf(0.1, overviewData.baseBasalGraphSeries.highestValueY, overviewData.tempBasalGraphSeries.highestValueY)
|
||||||
|
maxBasalValue = maxOf(maxBasalValue, overviewData.basalLineGraphSeries.highestValueY, overviewData.absoluteBasalGraphSeries.highestValueY)
|
||||||
addSeries(overviewData.baseBasalGraphSeries)
|
addSeries(overviewData.baseBasalGraphSeries)
|
||||||
addSeries(overviewData.tempBasalGraphSeries)
|
addSeries(overviewData.tempBasalGraphSeries)
|
||||||
addSeries(overviewData.basalLineGraphSeries)
|
addSeries(overviewData.basalLineGraphSeries)
|
||||||
addSeries(overviewData.absoluteBasalGraphSeries)
|
addSeries(overviewData.absoluteBasalGraphSeries)
|
||||||
overviewData.basalScale.multiplier = maxY * scale / overviewData.maxBasalValueFound
|
maxY = max(maxY, defaultValueHelper.determineHighLine())
|
||||||
|
val scale = defaultValueHelper.determineLowLine() / maxY / 1.2
|
||||||
|
overviewData.basalScale.multiplier = maxY * scale / maxBasalValue
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addTargetLine() {
|
fun addTargetLine() {
|
||||||
|
|
|
@ -30,6 +30,7 @@ import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
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.androidaps.events.Event
|
import info.nightscout.androidaps.events.Event
|
||||||
|
import info.nightscout.androidaps.utils.MidnightTime
|
||||||
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
|
||||||
|
@ -127,10 +128,20 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetDataAndRunCalculation(reason: String, event: Event?) {
|
private fun resetDataAndRunCalculation(reason: String, event: Event?) {
|
||||||
calculationWorkflow.stopCalculation(CalculationWorkflow.MAIN_CALCULATION,reason)
|
calculationWorkflow.stopCalculation(CalculationWorkflow.MAIN_CALCULATION, reason)
|
||||||
clearCache()
|
clearCache()
|
||||||
ads.reset()
|
ads.reset()
|
||||||
calculationWorkflow.runCalculation(CalculationWorkflow.MAIN_CALCULATION,this, overviewData, reason, System.currentTimeMillis(), bgDataReload = false, limitDataToOldestAvailable = true, cause = event, runLoop = true)
|
calculationWorkflow.runCalculation(
|
||||||
|
CalculationWorkflow.MAIN_CALCULATION,
|
||||||
|
this,
|
||||||
|
overviewData,
|
||||||
|
reason,
|
||||||
|
System.currentTimeMillis(),
|
||||||
|
bgDataReload = false,
|
||||||
|
limitDataToOldestAvailable = true,
|
||||||
|
cause = event,
|
||||||
|
runLoop = true
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clearCache() {
|
override fun clearCache() {
|
||||||
|
@ -363,18 +374,21 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
scheduledHistoryPost?.cancel(false)
|
scheduledHistoryPost?.cancel(false)
|
||||||
// prepare task for execution in 1 sec
|
// prepare task for execution in 1 sec
|
||||||
scheduledEvent = event
|
scheduledEvent = event
|
||||||
scheduledHistoryPost = historyWorker.schedule({
|
scheduledHistoryPost = historyWorker.schedule(
|
||||||
synchronized(this) {
|
{
|
||||||
aapsLogger.debug(LTag.AUTOSENS, "Running newHistoryData")
|
synchronized(this) {
|
||||||
newHistoryData(
|
aapsLogger.debug(LTag.AUTOSENS, "Running newHistoryData")
|
||||||
event.oldDataTimestamp,
|
repository.clearCachedData(MidnightTime.calc(event.oldDataTimestamp))
|
||||||
event.reloadBgData,
|
newHistoryData(
|
||||||
if (event.newestGlucoseValue != null) EventNewBG(event.newestGlucoseValue) else event
|
event.oldDataTimestamp,
|
||||||
)
|
event.reloadBgData,
|
||||||
scheduledEvent = null
|
if (event.newestGlucoseValue != null) EventNewBG(event.newestGlucoseValue) else event
|
||||||
scheduledHistoryPost = null
|
)
|
||||||
}
|
scheduledEvent = null
|
||||||
}, 1L, TimeUnit.SECONDS)
|
scheduledHistoryPost = null
|
||||||
|
}
|
||||||
|
}, 1L, TimeUnit.SECONDS
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
// asked reload is newer -> adjust params only
|
// asked reload is newer -> adjust params only
|
||||||
scheduledEvent?.let {
|
scheduledEvent?.let {
|
||||||
|
@ -391,7 +405,7 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
// When historical data is changed (coming from NS etc) finished calculations after this date must be invalidated
|
// When historical data is changed (coming from NS etc) finished calculations after this date must be invalidated
|
||||||
private fun newHistoryData(oldDataTimestamp: Long, bgDataReload: Boolean, event: Event) {
|
private fun newHistoryData(oldDataTimestamp: Long, bgDataReload: Boolean, event: Event) {
|
||||||
//log.debug("Locking onNewHistoryData");
|
//log.debug("Locking onNewHistoryData");
|
||||||
calculationWorkflow.stopCalculation(CalculationWorkflow.MAIN_CALCULATION,"onEventNewHistoryData")
|
calculationWorkflow.stopCalculation(CalculationWorkflow.MAIN_CALCULATION, "onEventNewHistoryData")
|
||||||
synchronized(dataLock) {
|
synchronized(dataLock) {
|
||||||
|
|
||||||
// clear up 5 min back for proper COB calculation
|
// clear up 5 min back for proper COB calculation
|
||||||
|
@ -415,7 +429,7 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
}
|
}
|
||||||
ads.newHistoryData(time, aapsLogger, dateUtil)
|
ads.newHistoryData(time, aapsLogger, dateUtil)
|
||||||
}
|
}
|
||||||
calculationWorkflow.runCalculation(CalculationWorkflow.MAIN_CALCULATION,this, overviewData, event.javaClass.simpleName, System.currentTimeMillis(), bgDataReload, true, event, runLoop = true)
|
calculationWorkflow.runCalculation(CalculationWorkflow.MAIN_CALCULATION, this, overviewData, event.javaClass.simpleName, System.currentTimeMillis(), bgDataReload, true, event, runLoop = true)
|
||||||
//log.debug("Releasing onNewHistoryData");
|
//log.debug("Releasing onNewHistoryData");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ import info.nightscout.androidaps.utils.DecimalFormatter
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.Profiler
|
import info.nightscout.androidaps.utils.Profiler
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
|
|
|
@ -28,7 +28,7 @@ import info.nightscout.androidaps.utils.DecimalFormatter
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.Profiler
|
import info.nightscout.androidaps.utils.Profiler
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
|
|
|
@ -13,7 +13,7 @@ import info.nightscout.androidaps.database.transactions.CgmSourceTransaction
|
||||||
import info.nightscout.androidaps.interfaces.*
|
import info.nightscout.androidaps.interfaces.*
|
||||||
import info.nightscout.androidaps.receivers.DataWorker
|
import info.nightscout.androidaps.receivers.DataWorker
|
||||||
import info.nightscout.androidaps.receivers.Intents
|
import info.nightscout.androidaps.receivers.Intents
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
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 javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
|
@ -35,7 +35,7 @@ import info.nightscout.androidaps.utils.AndroidPermission
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.HtmlHelper
|
import info.nightscout.androidaps.utils.HtmlHelper
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
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
|
||||||
|
|
|
@ -12,15 +12,15 @@ import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnoun
|
||||||
import info.nightscout.androidaps.interfaces.ActivePlugin
|
import info.nightscout.androidaps.interfaces.ActivePlugin
|
||||||
import info.nightscout.androidaps.interfaces.Config
|
import info.nightscout.androidaps.interfaces.Config
|
||||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||||
import info.nightscout.shared.logging.AAPSLogger
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.shared.logging.LTag
|
|
||||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
|
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||||
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
|
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.shared.logging.AAPSLogger
|
||||||
|
import info.nightscout.shared.logging.LTag
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
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
|
||||||
|
@ -128,7 +128,7 @@ class LocalAlertUtils @Inject constructor(
|
||||||
rxBus.send(EventNewNotification(n))
|
rxBus.send(EventNewNotification(n))
|
||||||
uel.log(Action.CAREPORTAL, Sources.Aaps, rh.gs(R.string.missed_bg_readings), ValueWithUnit.TherapyEventType(TherapyEvent.Type.ANNOUNCEMENT))
|
uel.log(Action.CAREPORTAL, Sources.Aaps, rh.gs(R.string.missed_bg_readings), ValueWithUnit.TherapyEventType(TherapyEvent.Type.ANNOUNCEMENT))
|
||||||
if (sp.getBoolean(R.string.key_ns_create_announcements_from_errors, true)) {
|
if (sp.getBoolean(R.string.key_ns_create_announcements_from_errors, true)) {
|
||||||
n.text?.let { disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(it)).subscribe() }
|
disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(n.text)).subscribe()
|
||||||
}
|
}
|
||||||
} else if (dateUtil.isOlderThan(bgReading.timestamp, 5).not()) {
|
} else if (dateUtil.isOlderThan(bgReading.timestamp, 5).not()) {
|
||||||
rxBus.send(EventDismissNotification(Notification.BG_READINGS_MISSED))
|
rxBus.send(EventDismissNotification(Notification.BG_READINGS_MISSED))
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package info.nightscout.androidaps.utils.buildHelper
|
package info.nightscout.androidaps.utils.buildHelper
|
||||||
|
|
||||||
import info.nightscout.androidaps.BuildConfig
|
import info.nightscout.androidaps.BuildConfig
|
||||||
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.Config
|
import info.nightscout.androidaps.interfaces.Config
|
||||||
import info.nightscout.androidaps.plugins.general.maintenance.PrefFileListProvider
|
import info.nightscout.androidaps.plugins.general.maintenance.PrefFileListProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
|
@ -11,6 +11,8 @@ import android.widget.TableRow
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.database.AppRepository
|
import info.nightscout.androidaps.database.AppRepository
|
||||||
|
import info.nightscout.androidaps.database.ValueWrapper
|
||||||
|
import info.nightscout.androidaps.database.embedments.InterfaceIDs
|
||||||
import info.nightscout.androidaps.database.entities.Bolus
|
import info.nightscout.androidaps.database.entities.Bolus
|
||||||
import info.nightscout.androidaps.database.entities.TotalDailyDose
|
import info.nightscout.androidaps.database.entities.TotalDailyDose
|
||||||
import info.nightscout.androidaps.extensions.convertedToAbsolute
|
import info.nightscout.androidaps.extensions.convertedToAbsolute
|
||||||
|
@ -19,10 +21,10 @@ import info.nightscout.androidaps.extensions.toTableRowHeader
|
||||||
import info.nightscout.androidaps.interfaces.ActivePlugin
|
import info.nightscout.androidaps.interfaces.ActivePlugin
|
||||||
import info.nightscout.androidaps.interfaces.IobCobCalculator
|
import info.nightscout.androidaps.interfaces.IobCobCalculator
|
||||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||||
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.MidnightTime
|
import info.nightscout.androidaps.utils.MidnightTime
|
||||||
import info.nightscout.androidaps.utils.T
|
import info.nightscout.androidaps.utils.T
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
|
||||||
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 javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -38,48 +40,62 @@ class TddCalculator @Inject constructor(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun calculate(days: Long): LongSparseArray<TotalDailyDose> {
|
fun calculate(days: Long): LongSparseArray<TotalDailyDose> {
|
||||||
val startTime = MidnightTime.calc(dateUtil.now() - T.days(days).msecs())
|
var startTime = MidnightTime.calc(dateUtil.now() - T.days(days).msecs())
|
||||||
val endTime = MidnightTime.calc(dateUtil.now())
|
val endTime = MidnightTime.calc(dateUtil.now())
|
||||||
|
|
||||||
val result = LongSparseArray<TotalDailyDose>()
|
val result = LongSparseArray<TotalDailyDose>()
|
||||||
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
// Try to load cached values
|
||||||
.filter { it.type != Bolus.Type.PRIMING }
|
while (startTime < endTime) {
|
||||||
.forEach { t ->
|
val tdd = repository.getCalculatedTotalDailyDose(startTime).blockingGet()
|
||||||
val midnight = MidnightTime.calc(t.timestamp)
|
if (tdd is ValueWrapper.Existing) result.put(startTime, tdd.value)
|
||||||
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
else break
|
||||||
tdd.bolusAmount += t.amount
|
startTime += T.hours(24).msecs()
|
||||||
result.put(midnight, tdd)
|
|
||||||
}
|
|
||||||
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
|
||||||
val midnight = MidnightTime.calc(t.timestamp)
|
|
||||||
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
tdd.carbs += t.amount
|
|
||||||
result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val calculationStep = T.mins(5).msecs()
|
if (endTime > startTime) {
|
||||||
val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep)
|
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
||||||
for (t in startTime until endTime step calculationStep) {
|
.filter { it.type != Bolus.Type.PRIMING }
|
||||||
val midnight = MidnightTime.calc(t)
|
.forEach { t ->
|
||||||
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
val midnight = MidnightTime.calc(t.timestamp)
|
||||||
val tbr = tempBasals[t]
|
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
||||||
val profile = profileFunction.getProfile(t) ?: continue
|
tdd.bolusAmount += t.amount
|
||||||
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
result.put(midnight, tdd)
|
||||||
tdd.basalAmount += absoluteRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
|
}
|
||||||
|
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
||||||
if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) {
|
val midnight = MidnightTime.calc(t.timestamp)
|
||||||
// they are not included in TBRs
|
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
||||||
val eb = iobCobCalculator.getExtendedBolus(t)
|
tdd.carbs += t.amount
|
||||||
val absoluteEbRate = eb?.rate ?: 0.0
|
result.put(midnight, tdd)
|
||||||
tdd.bolusAmount += absoluteEbRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
|
}
|
||||||
|
|
||||||
|
val calculationStep = T.mins(5).msecs()
|
||||||
|
val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep)
|
||||||
|
for (t in startTime until endTime step calculationStep) {
|
||||||
|
val midnight = MidnightTime.calc(t)
|
||||||
|
val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
||||||
|
val tbr = tempBasals[t]
|
||||||
|
val profile = profileFunction.getProfile(t) ?: continue
|
||||||
|
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
||||||
|
tdd.basalAmount += absoluteRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
|
||||||
|
|
||||||
|
if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) {
|
||||||
|
// they are not included in TBRs
|
||||||
|
val eb = iobCobCalculator.getExtendedBolus(t)
|
||||||
|
val absoluteEbRate = eb?.rate ?: 0.0
|
||||||
|
tdd.bolusAmount += absoluteEbRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble()
|
||||||
|
}
|
||||||
|
result.put(midnight, tdd)
|
||||||
}
|
}
|
||||||
result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
for (i in 0 until result.size()) {
|
for (i in 0 until result.size()) {
|
||||||
val tdd = result.valueAt(i)
|
val tdd = result.valueAt(i)
|
||||||
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
||||||
|
if (tdd.interfaceIDs.pumpType != InterfaceIDs.PumpType.CACHE) {
|
||||||
|
tdd.interfaceIDs.pumpType = InterfaceIDs.PumpType.CACHE
|
||||||
|
aapsLogger.debug(LTag.CORE, "Storing TDD $tdd")
|
||||||
|
repository.createTotalDailyDose(tdd)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
aapsLogger.debug(LTag.CORE, result.toString())
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,22 +107,13 @@ class TddCalculator @Inject constructor(
|
||||||
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
||||||
.filter { it.type != Bolus.Type.PRIMING }
|
.filter { it.type != Bolus.Type.PRIMING }
|
||||||
.forEach { t ->
|
.forEach { t ->
|
||||||
//val midnight = MidnightTime.calc(t.timestamp)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
tdd.bolusAmount += t.amount
|
tdd.bolusAmount += t.amount
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
||||||
//val midnight = MidnightTime.calc(t.timestamp)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
tdd.carbs += t.amount
|
tdd.carbs += t.amount
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
val calculationStep = T.mins(5).msecs()
|
val calculationStep = T.mins(5).msecs()
|
||||||
for (t in startTime until endTime step calculationStep) {
|
for (t in startTime until endTime step calculationStep) {
|
||||||
|
|
||||||
//val midnight = MidnightTime.calc(t)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t)
|
val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t)
|
||||||
val profile = profileFunction.getProfile(t) ?: continue
|
val profile = profileFunction.getProfile(t) ?: continue
|
||||||
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
||||||
|
@ -118,13 +125,8 @@ class TddCalculator @Inject constructor(
|
||||||
val absoluteEbRate = eb?.rate ?: 0.0
|
val absoluteEbRate = eb?.rate ?: 0.0
|
||||||
tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0
|
tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0
|
||||||
}
|
}
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
//for (i in 0 until tdd.size()) {
|
|
||||||
//val tdd = result.valueAt(i)
|
|
||||||
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
||||||
//}
|
|
||||||
|
|
||||||
aapsLogger.debug(LTag.CORE, tdd.toString())
|
aapsLogger.debug(LTag.CORE, tdd.toString())
|
||||||
return tdd
|
return tdd
|
||||||
}
|
}
|
||||||
|
@ -133,27 +135,16 @@ class TddCalculator @Inject constructor(
|
||||||
val startTime = dateUtil.now() - T.hours(hour = 24).msecs()
|
val startTime = dateUtil.now() - T.hours(hour = 24).msecs()
|
||||||
val endTime = dateUtil.now()
|
val endTime = dateUtil.now()
|
||||||
val tdd = TotalDailyDose(timestamp = startTime)
|
val tdd = TotalDailyDose(timestamp = startTime)
|
||||||
//val result = TotalDailyDose()
|
|
||||||
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet()
|
||||||
.filter { it.type != Bolus.Type.PRIMING }
|
.filter { it.type != Bolus.Type.PRIMING }
|
||||||
.forEach { t ->
|
.forEach { t ->
|
||||||
//val midnight = MidnightTime.calc(t.timestamp)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
tdd.bolusAmount += t.amount
|
tdd.bolusAmount += t.amount
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t ->
|
||||||
//val midnight = MidnightTime.calc(t.timestamp)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
tdd.carbs += t.amount
|
tdd.carbs += t.amount
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
val calculationStep = T.mins(5).msecs()
|
val calculationStep = T.mins(5).msecs()
|
||||||
//val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep)
|
|
||||||
for (t in startTime until endTime step calculationStep) {
|
for (t in startTime until endTime step calculationStep) {
|
||||||
|
|
||||||
//val midnight = MidnightTime.calc(t)
|
|
||||||
//val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight)
|
|
||||||
val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t)
|
val tbr = iobCobCalculator.getTempBasalIncludingConvertedExtended(t)
|
||||||
val profile = profileFunction.getProfile(t) ?: continue
|
val profile = profileFunction.getProfile(t) ?: continue
|
||||||
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t)
|
||||||
|
@ -165,13 +156,8 @@ class TddCalculator @Inject constructor(
|
||||||
val absoluteEbRate = eb?.rate ?: 0.0
|
val absoluteEbRate = eb?.rate ?: 0.0
|
||||||
tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0
|
tdd.bolusAmount += absoluteEbRate / 60.0 * 5.0
|
||||||
}
|
}
|
||||||
//result.put(midnight, tdd)
|
|
||||||
}
|
}
|
||||||
//for (i in 0 until tdd.size()) {
|
|
||||||
//val tdd = result.valueAt(i)
|
|
||||||
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount
|
||||||
//}
|
|
||||||
|
|
||||||
aapsLogger.debug(LTag.CORE, tdd.toString())
|
aapsLogger.debug(LTag.CORE, tdd.toString())
|
||||||
return tdd
|
return tdd
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,6 @@ class PrepareBasalDataWorker(
|
||||||
?: return Result.failure(workDataOf("Error" to "missing input data"))
|
?: return Result.failure(workDataOf("Error" to "missing input data"))
|
||||||
|
|
||||||
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_BASAL_DATA, 0, null))
|
rxBus.send(EventIobCalculationProgress(CalculationWorkflow.ProgressData.PREPARE_BASAL_DATA, 0, null))
|
||||||
data.overviewData.maxBasalValueFound = 0.0
|
|
||||||
val baseBasalArray: MutableList<ScaledDataPoint> = ArrayList()
|
val baseBasalArray: MutableList<ScaledDataPoint> = ArrayList()
|
||||||
val tempBasalArray: MutableList<ScaledDataPoint> = ArrayList()
|
val tempBasalArray: MutableList<ScaledDataPoint> = ArrayList()
|
||||||
val basalLineArray: MutableList<ScaledDataPoint> = ArrayList()
|
val basalLineArray: MutableList<ScaledDataPoint> = ArrayList()
|
||||||
|
@ -104,7 +103,6 @@ class PrepareBasalDataWorker(
|
||||||
lastAbsoluteLineBasal = absoluteLineValue
|
lastAbsoluteLineBasal = absoluteLineValue
|
||||||
lastLineBasal = baseBasalValue
|
lastLineBasal = baseBasalValue
|
||||||
lastTempBasal = tempBasalValue
|
lastTempBasal = tempBasalValue
|
||||||
data.overviewData.maxBasalValueFound = max(data.overviewData.maxBasalValueFound, max(tempBasalValue, baseBasalValue))
|
|
||||||
time += 60 * 1000L
|
time += 60 * 1000L
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
||||||
import info.nightscout.androidaps.plugins.source.GlimpPlugin
|
import info.nightscout.androidaps.plugins.source.GlimpPlugin
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.Profiler
|
import info.nightscout.androidaps.utils.Profiler
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
|
|
@ -17,7 +17,7 @@ import info.nightscout.androidaps.plugins.pump.virtual.VirtualPumpPlugin
|
||||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin
|
||||||
import info.nightscout.androidaps.plugins.source.GlimpPlugin
|
import info.nightscout.androidaps.plugins.source.GlimpPlugin
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
|
|
@ -5,7 +5,7 @@ import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.TestBase
|
import info.nightscout.androidaps.TestBase
|
||||||
import info.nightscout.androidaps.interfaces.Config
|
import info.nightscout.androidaps.interfaces.Config
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.shared.sharedPreferences.SP
|
import info.nightscout.shared.sharedPreferences.SP
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
|
|
@ -25,7 +25,7 @@ import info.nightscout.androidaps.queue.commands.*
|
||||||
import info.nightscout.androidaps.utils.AndroidPermission
|
import info.nightscout.androidaps.utils.AndroidPermission
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
import info.nightscout.androidaps.utils.buildHelper.BuildHelperImpl
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
import info.nightscout.androidaps.interfaces.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
kotlin_version = '1.6.21'
|
kotlin_version = '1.7.0'
|
||||||
core_version = '1.8.0'
|
core_version = '1.8.0'
|
||||||
rxjava_version = '3.1.5'
|
rxjava_version = '3.1.5'
|
||||||
rxandroid_version = '3.0.0'
|
rxandroid_version = '3.0.0'
|
||||||
|
@ -66,7 +66,7 @@ plugins {
|
||||||
id "io.gitlab.arturbosch.detekt" version "1.20.0"
|
id "io.gitlab.arturbosch.detekt" version "1.20.0"
|
||||||
id "org.jlleitschuh.gradle.ktlint" version "10.3.0"
|
id "org.jlleitschuh.gradle.ktlint" version "10.3.0"
|
||||||
id 'org.barfuin.gradle.jacocolog' version '2.0.0'
|
id 'org.barfuin.gradle.jacocolog' version '2.0.0'
|
||||||
id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
|
id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package info.nightscout.androidaps.utils.buildHelper
|
package info.nightscout.androidaps.interfaces
|
||||||
|
|
||||||
interface BuildHelper {
|
interface BuildHelper {
|
||||||
|
|
|
@ -2,10 +2,9 @@ package info.nightscout.androidaps.interfaces
|
||||||
|
|
||||||
import android.text.Spanned
|
import android.text.Spanned
|
||||||
import info.nightscout.androidaps.data.DetailedBolusInfo
|
import info.nightscout.androidaps.data.DetailedBolusInfo
|
||||||
import info.nightscout.androidaps.interfaces.Profile
|
|
||||||
import info.nightscout.androidaps.queue.commands.CustomCommand
|
|
||||||
import info.nightscout.androidaps.queue.Callback
|
import info.nightscout.androidaps.queue.Callback
|
||||||
import info.nightscout.androidaps.queue.commands.Command
|
import info.nightscout.androidaps.queue.commands.Command
|
||||||
|
import info.nightscout.androidaps.queue.commands.CustomCommand
|
||||||
|
|
||||||
interface CommandQueue {
|
interface CommandQueue {
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,7 @@ package info.nightscout.androidaps.interfaces
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry
|
|
||||||
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFile
|
import info.nightscout.androidaps.plugins.general.maintenance.PrefsFile
|
||||||
import io.reactivex.rxjava3.core.Single
|
|
||||||
|
|
||||||
interface ImportExportPrefs {
|
interface ImportExportPrefs {
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import info.nightscout.androidaps.utils.DecimalFormatter.to0Decimal
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter.to1Decimal
|
import info.nightscout.androidaps.utils.DecimalFormatter.to1Decimal
|
||||||
import info.nightscout.androidaps.utils.HardLimits
|
import info.nightscout.androidaps.utils.HardLimits
|
||||||
import info.nightscout.androidaps.utils.Round
|
import info.nightscout.androidaps.utils.Round
|
||||||
import info.nightscout.androidaps.interfaces.ResourceHelper
|
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
|
@ -62,6 +61,7 @@ interface Profile {
|
||||||
* ISF value according to "now"" in MGDL
|
* ISF value according to "now"" in MGDL
|
||||||
*/
|
*/
|
||||||
fun getIsfMgdl(): Double
|
fun getIsfMgdl(): Double
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ISF value according to timestamp in MGDL
|
* ISF value according to timestamp in MGDL
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||||
|
|
||||||
class Scale(var shift: Double = 0.0, var multiplier: Double = 0.0) {
|
class Scale(var shift: Double = 0.0, var multiplier: Double = 1.0) {
|
||||||
|
|
||||||
fun transform(original: Double): Double {
|
fun transform(original: Double): Double {
|
||||||
return original * multiplier + shift
|
return original * multiplier + shift
|
||||||
|
|
|
@ -11,7 +11,8 @@ import kotlin.math.min
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
enum class PumpType {
|
enum class PumpType {
|
||||||
|
|
||||||
GENERIC_AAPS(description = "Generic AAPS",
|
GENERIC_AAPS(
|
||||||
|
description = "Generic AAPS",
|
||||||
manufacturer = ManufacturerType.AndroidAPS,
|
manufacturer = ManufacturerType.AndroidAPS,
|
||||||
model = "VirtualPump",
|
model = "VirtualPump",
|
||||||
bolusSize = 0.1,
|
bolusSize = 0.1,
|
||||||
|
@ -23,9 +24,11 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.01,
|
baseBasalMinValue = 0.01,
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
|
),
|
||||||
|
|
||||||
CELLNOVO(description = "Cellnovo",
|
CELLNOVO(
|
||||||
|
description = "Cellnovo",
|
||||||
manufacturer = ManufacturerType.Cellnovo,
|
manufacturer = ManufacturerType.Cellnovo,
|
||||||
model = "Cellnovo",
|
model = "Cellnovo",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -37,9 +40,11 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.05,
|
baseBasalMinValue = 0.05,
|
||||||
baseBasalStep = 0.05,
|
baseBasalStep = 0.05,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
|
),
|
||||||
|
|
||||||
ACCU_CHEK_COMBO(description = "Accu-Chek Combo",
|
ACCU_CHEK_COMBO(
|
||||||
|
description = "Accu-Chek Combo",
|
||||||
manufacturer = ManufacturerType.Roche,
|
manufacturer = ManufacturerType.Roche,
|
||||||
model = "Combo",
|
model = "Combo",
|
||||||
bolusSize = 0.1,
|
bolusSize = 0.1,
|
||||||
|
@ -53,8 +58,10 @@ enum class PumpType {
|
||||||
baseBasalSpecialSteps = DoseStepSize.ComboBasal,
|
baseBasalSpecialSteps = DoseStepSize.ComboBasal,
|
||||||
pumpCapability = PumpCapability.ComboCapabilities,
|
pumpCapability = PumpCapability.ComboCapabilities,
|
||||||
source = Sources.Combo,
|
source = Sources.Combo,
|
||||||
supportBatteryLevel = false),
|
supportBatteryLevel = false
|
||||||
ACCU_CHEK_SPIRIT(description = "Accu-Chek Spirit",
|
),
|
||||||
|
ACCU_CHEK_SPIRIT(
|
||||||
|
description = "Accu-Chek Spirit",
|
||||||
manufacturer = ManufacturerType.Roche,
|
manufacturer = ManufacturerType.Roche,
|
||||||
model = "Spirit",
|
model = "Spirit",
|
||||||
bolusSize = 0.1,
|
bolusSize = 0.1,
|
||||||
|
@ -66,8 +73,10 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.01,
|
baseBasalMinValue = 0.01,
|
||||||
baseBasalStep = 0.1,
|
baseBasalStep = 0.1,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
ACCU_CHEK_INSIGHT_VIRTUAL(description = "Accu-Chek Insight",
|
),
|
||||||
|
ACCU_CHEK_INSIGHT_VIRTUAL(
|
||||||
|
description = "Accu-Chek Insight",
|
||||||
manufacturer = ManufacturerType.Roche,
|
manufacturer = ManufacturerType.Roche,
|
||||||
model = "Insight",
|
model = "Insight",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -79,8 +88,10 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.02,
|
baseBasalMinValue = 0.02,
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.InsightCapabilities),
|
pumpCapability = PumpCapability.InsightCapabilities
|
||||||
ACCU_CHEK_INSIGHT(description = "Accu-Chek Insight",
|
),
|
||||||
|
ACCU_CHEK_INSIGHT(
|
||||||
|
description = "Accu-Chek Insight",
|
||||||
manufacturer = ManufacturerType.Roche,
|
manufacturer = ManufacturerType.Roche,
|
||||||
model = "Insight",
|
model = "Insight",
|
||||||
bolusSize = 0.01,
|
bolusSize = 0.01,
|
||||||
|
@ -94,8 +105,10 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = DoseStepSize.InsightBasal,
|
baseBasalSpecialSteps = DoseStepSize.InsightBasal,
|
||||||
pumpCapability = PumpCapability.InsightCapabilities,
|
pumpCapability = PumpCapability.InsightCapabilities,
|
||||||
source = Sources.Insight),
|
source = Sources.Insight
|
||||||
ACCU_CHEK_SOLO(description = "Accu-Chek Solo",
|
),
|
||||||
|
ACCU_CHEK_SOLO(
|
||||||
|
description = "Accu-Chek Solo",
|
||||||
manufacturer = ManufacturerType.Roche,
|
manufacturer = ManufacturerType.Roche,
|
||||||
model = "Solo",
|
model = "Solo",
|
||||||
bolusSize = 0.01,
|
bolusSize = 0.01,
|
||||||
|
@ -108,9 +121,11 @@ enum class PumpType {
|
||||||
baseBasalMaxValue = null,
|
baseBasalMaxValue = null,
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = DoseStepSize.InsightBolus,
|
baseBasalSpecialSteps = DoseStepSize.InsightBolus,
|
||||||
pumpCapability = PumpCapability.InsightCapabilities),
|
pumpCapability = PumpCapability.InsightCapabilities
|
||||||
|
),
|
||||||
|
|
||||||
ANIMAS_VIBE(description = "Animas Vibe",
|
ANIMAS_VIBE(
|
||||||
|
description = "Animas Vibe",
|
||||||
manufacturer = ManufacturerType.Animas,
|
manufacturer = ManufacturerType.Animas,
|
||||||
model = "Vibe",
|
model = "Vibe",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -123,9 +138,11 @@ enum class PumpType {
|
||||||
baseBasalMaxValue = 5.0,
|
baseBasalMaxValue = 5.0,
|
||||||
baseBasalStep = 0.0,
|
baseBasalStep = 0.0,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
|
),
|
||||||
ANIMAS_PING(description = "Animas Ping", model = "Ping", parent = ANIMAS_VIBE),
|
ANIMAS_PING(description = "Animas Ping", model = "Ping", parent = ANIMAS_VIBE),
|
||||||
DANA_R(description = "DanaR",
|
DANA_R(
|
||||||
|
description = "DanaR",
|
||||||
manufacturer = ManufacturerType.Sooil,
|
manufacturer = ManufacturerType.Sooil,
|
||||||
model = "DanaR",
|
model = "DanaR",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -138,8 +155,10 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.DanaCapabilities,
|
pumpCapability = PumpCapability.DanaCapabilities,
|
||||||
source = Sources.DanaR),
|
source = Sources.DanaR
|
||||||
DANA_R_KOREAN(description = "DanaR Korean",
|
),
|
||||||
|
DANA_R_KOREAN(
|
||||||
|
description = "DanaR Korean",
|
||||||
manufacturer = ManufacturerType.Sooil,
|
manufacturer = ManufacturerType.Sooil,
|
||||||
model = "DanaRKorean",
|
model = "DanaRKorean",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -152,8 +171,10 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.DanaCapabilities,
|
pumpCapability = PumpCapability.DanaCapabilities,
|
||||||
source = Sources.DanaRC),
|
source = Sources.DanaRC
|
||||||
DANA_RS(description = "DanaRS",
|
),
|
||||||
|
DANA_RS(
|
||||||
|
description = "DanaRS",
|
||||||
manufacturer = ManufacturerType.Sooil,
|
manufacturer = ManufacturerType.Sooil,
|
||||||
model = "DanaRS",
|
model = "DanaRS",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -166,11 +187,13 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.DanaWithHistoryCapabilities,
|
pumpCapability = PumpCapability.DanaWithHistoryCapabilities,
|
||||||
source = Sources.DanaRS),
|
source = Sources.DanaRS
|
||||||
|
),
|
||||||
DANA_RS_KOREAN(description = "DanaRSKorean", model = "DanaRSKorean", parent = DANA_RS),
|
DANA_RS_KOREAN(description = "DanaRSKorean", model = "DanaRSKorean", parent = DANA_RS),
|
||||||
DANA_I(description = "DanaI", model = "DanaI", parent = DANA_RS, source = Sources.DanaI),
|
DANA_I(description = "DanaI", model = "DanaI", parent = DANA_RS, source = Sources.DanaI),
|
||||||
DANA_RV2(description = "DanaRv2", model = "DanaRv2", parent = DANA_RS, source = Sources.DanaRv2),
|
DANA_RV2(description = "DanaRv2", model = "DanaRv2", parent = DANA_RS, source = Sources.DanaRv2),
|
||||||
OMNIPOD_EROS(description = "Omnipod Eros",
|
OMNIPOD_EROS(
|
||||||
|
description = "Omnipod Eros",
|
||||||
manufacturer = ManufacturerType.Insulet,
|
manufacturer = ManufacturerType.Insulet,
|
||||||
model = "Eros",
|
model = "Eros",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -188,8 +211,10 @@ enum class PumpType {
|
||||||
isPatchPump = true,
|
isPatchPump = true,
|
||||||
useHardwareLink = true,
|
useHardwareLink = true,
|
||||||
supportBatteryLevel = false,
|
supportBatteryLevel = false,
|
||||||
source = Sources.OmnipodEros),
|
source = Sources.OmnipodEros
|
||||||
OMNIPOD_DASH(description = "Omnipod Dash",
|
),
|
||||||
|
OMNIPOD_DASH(
|
||||||
|
description = "Omnipod Dash",
|
||||||
manufacturer = ManufacturerType.Insulet,
|
manufacturer = ManufacturerType.Insulet,
|
||||||
model = "Dash",
|
model = "Dash",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -205,8 +230,10 @@ enum class PumpType {
|
||||||
isPatchPump = true,
|
isPatchPump = true,
|
||||||
pumpCapability = PumpCapability.OmnipodCapabilities,
|
pumpCapability = PumpCapability.OmnipodCapabilities,
|
||||||
hasCustomUnreachableAlertCheck = false,
|
hasCustomUnreachableAlertCheck = false,
|
||||||
supportBatteryLevel = false),
|
supportBatteryLevel = false
|
||||||
MEDTRONIC_512_712(description = "Medtronic 512/712",
|
),
|
||||||
|
MEDTRONIC_512_712(
|
||||||
|
description = "Medtronic 512/712",
|
||||||
manufacturer = ManufacturerType.Medtronic,
|
manufacturer = ManufacturerType.Medtronic,
|
||||||
model = "512/712",
|
model = "512/712",
|
||||||
bolusSize = 0.1,
|
bolusSize = 0.1,
|
||||||
|
@ -219,14 +246,20 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.05,
|
baseBasalStep = 0.05,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.MedtronicCapabilities,
|
pumpCapability = PumpCapability.MedtronicCapabilities,
|
||||||
source = Sources.Medtronic),
|
source = Sources.Medtronic
|
||||||
MEDTRONIC_515_715(description = "Medtronic 515/715",
|
),
|
||||||
|
MEDTRONIC_515_715(
|
||||||
|
description = "Medtronic 515/715",
|
||||||
model = "515/715",
|
model = "515/715",
|
||||||
parent = MEDTRONIC_512_712),
|
parent = MEDTRONIC_512_712
|
||||||
MEDTRONIC_522_722(description = "Medtronic 522/722",
|
),
|
||||||
|
MEDTRONIC_522_722(
|
||||||
|
description = "Medtronic 522/722",
|
||||||
model = "522/722",
|
model = "522/722",
|
||||||
parent = MEDTRONIC_512_712),
|
parent = MEDTRONIC_512_712
|
||||||
MEDTRONIC_523_723_REVEL(description = "Medtronic 523/723 (Revel)",
|
),
|
||||||
|
MEDTRONIC_523_723_REVEL(
|
||||||
|
description = "Medtronic 523/723 (Revel)",
|
||||||
manufacturer = ManufacturerType.Medtronic,
|
manufacturer = ManufacturerType.Medtronic,
|
||||||
model = "523/723 (Revel)",
|
model = "523/723 (Revel)",
|
||||||
bolusSize = 0.05,
|
bolusSize = 0.05,
|
||||||
|
@ -239,9 +272,11 @@ enum class PumpType {
|
||||||
baseBasalStep = 0.025,
|
baseBasalStep = 0.025,
|
||||||
baseBasalSpecialSteps = DoseStepSize.MedtronicVeoBasal,
|
baseBasalSpecialSteps = DoseStepSize.MedtronicVeoBasal,
|
||||||
pumpCapability = PumpCapability.MedtronicCapabilities,
|
pumpCapability = PumpCapability.MedtronicCapabilities,
|
||||||
source = Sources.Medtronic),
|
source = Sources.Medtronic
|
||||||
|
),
|
||||||
MEDTRONIC_554_754_VEO(description = "Medtronic 554/754 (Veo)", model = "554/754 (Veo)", parent = MEDTRONIC_523_723_REVEL),
|
MEDTRONIC_554_754_VEO(description = "Medtronic 554/754 (Veo)", model = "554/754 (Veo)", parent = MEDTRONIC_523_723_REVEL),
|
||||||
MEDTRONIC_640G(description = "Medtronic 640G",
|
MEDTRONIC_640G(
|
||||||
|
description = "Medtronic 640G",
|
||||||
manufacturer = ManufacturerType.Medtronic,
|
manufacturer = ManufacturerType.Medtronic,
|
||||||
model = "640G",
|
model = "640G",
|
||||||
bolusSize = 0.025,
|
bolusSize = 0.025,
|
||||||
|
@ -253,9 +288,11 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.025,
|
baseBasalMinValue = 0.025,
|
||||||
baseBasalStep = 0.025,
|
baseBasalStep = 0.025,
|
||||||
baseBasalSpecialSteps = DoseStepSize.MedtronicVeoBasal,
|
baseBasalSpecialSteps = DoseStepSize.MedtronicVeoBasal,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
|
),
|
||||||
|
|
||||||
TANDEM_T_SLIM(description = "Tandem t:slim",
|
TANDEM_T_SLIM(
|
||||||
|
description = "Tandem t:slim",
|
||||||
manufacturer = ManufacturerType.Tandem,
|
manufacturer = ManufacturerType.Tandem,
|
||||||
model = "t:slim",
|
model = "t:slim",
|
||||||
bolusSize = 0.01,
|
bolusSize = 0.01,
|
||||||
|
@ -267,12 +304,14 @@ enum class PumpType {
|
||||||
baseBasalMinValue = 0.1,
|
baseBasalMinValue = 0.1,
|
||||||
baseBasalStep = 0.001,
|
baseBasalStep = 0.001,
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.VirtualPumpCapabilities),
|
pumpCapability = PumpCapability.VirtualPumpCapabilities
|
||||||
|
),
|
||||||
TANDEM_T_FLEX(description = "Tandem t:flex", model = "t:flex", parent = TANDEM_T_SLIM),
|
TANDEM_T_FLEX(description = "Tandem t:flex", model = "t:flex", parent = TANDEM_T_SLIM),
|
||||||
TANDEM_T_SLIM_G4(description = "Tandem t:slim G4", model = "t:slim G4", parent = TANDEM_T_SLIM),
|
TANDEM_T_SLIM_G4(description = "Tandem t:slim G4", model = "t:slim G4", parent = TANDEM_T_SLIM),
|
||||||
TANDEM_T_SLIM_X2(description = "Tandem t:slim X2", model = "t:slim X2", parent = TANDEM_T_SLIM),
|
TANDEM_T_SLIM_X2(description = "Tandem t:slim X2", model = "t:slim X2", parent = TANDEM_T_SLIM),
|
||||||
|
|
||||||
YPSOPUMP(description = "YpsoPump",
|
YPSOPUMP(
|
||||||
|
description = "YpsoPump",
|
||||||
manufacturer = ManufacturerType.Ypsomed,
|
manufacturer = ManufacturerType.Ypsomed,
|
||||||
model = "Ypsopump",
|
model = "Ypsopump",
|
||||||
bolusSize = 0.1,
|
bolusSize = 0.1,
|
||||||
|
@ -285,26 +324,39 @@ enum class PumpType {
|
||||||
baseBasalMaxValue = 40.0,
|
baseBasalMaxValue = 40.0,
|
||||||
baseBasalStep = 0.01,
|
baseBasalStep = 0.01,
|
||||||
baseBasalSpecialSteps = DoseStepSize.YpsopumpBasal,
|
baseBasalSpecialSteps = DoseStepSize.YpsopumpBasal,
|
||||||
pumpCapability = PumpCapability.YpsomedCapabilities),
|
pumpCapability = PumpCapability.YpsomedCapabilities
|
||||||
MDI(description = "MDI",
|
),
|
||||||
|
MDI(
|
||||||
|
description = "MDI",
|
||||||
manufacturer = ManufacturerType.AndroidAPS,
|
manufacturer = ManufacturerType.AndroidAPS,
|
||||||
bolusSize = 0.5,
|
bolusSize = 0.5,
|
||||||
model = "MDI",
|
model = "MDI",
|
||||||
tbrSettings = DoseSettings(1.0, 15, 24 * 60, 0.0, 500.0),
|
tbrSettings = DoseSettings(1.0, 15, 24 * 60, 0.0, 500.0),
|
||||||
extendedBolusSettings = DoseSettings(0.1, 15, 12 * 60, 0.1),
|
extendedBolusSettings = DoseSettings(0.1, 15, 12 * 60, 0.1),
|
||||||
pumpCapability = PumpCapability.MDI),
|
pumpCapability = PumpCapability.MDI
|
||||||
|
),
|
||||||
|
|
||||||
// Not real pump. Used for User as a source
|
// Not real pump. Used for User as a source
|
||||||
USER(description = "USER",
|
USER(
|
||||||
|
description = "USER",
|
||||||
manufacturer = ManufacturerType.AndroidAPS,
|
manufacturer = ManufacturerType.AndroidAPS,
|
||||||
model = "USER",
|
model = "USER",
|
||||||
tbrSettings = DoseSettings(1.0, 15, 24 * 60, 0.0, 500.0),
|
tbrSettings = DoseSettings(1.0, 15, 24 * 60, 0.0, 500.0),
|
||||||
extendedBolusSettings = DoseSettings(0.1, 15, 12 * 60, 0.1),
|
extendedBolusSettings = DoseSettings(0.1, 15, 12 * 60, 0.1),
|
||||||
pumpCapability = PumpCapability.MDI,
|
pumpCapability = PumpCapability.MDI,
|
||||||
source = Sources.MDI),
|
source = Sources.MDI
|
||||||
|
),
|
||||||
|
|
||||||
|
// Not real, cached value
|
||||||
|
CACHE(
|
||||||
|
description = "CACHE",
|
||||||
|
model = "CACHE",
|
||||||
|
parent = USER
|
||||||
|
),
|
||||||
|
|
||||||
//Diaconn Pump
|
//Diaconn Pump
|
||||||
DIACONN_G8(description = "Diaconn G8",
|
DIACONN_G8(
|
||||||
|
description = "Diaconn G8",
|
||||||
manufacturer = ManufacturerType.G2e,
|
manufacturer = ManufacturerType.G2e,
|
||||||
model = "DiaconnG8",
|
model = "DiaconnG8",
|
||||||
bolusSize = 0.01,
|
bolusSize = 0.01,
|
||||||
|
@ -319,7 +371,8 @@ enum class PumpType {
|
||||||
baseBasalSpecialSteps = null,
|
baseBasalSpecialSteps = null,
|
||||||
pumpCapability = PumpCapability.DiaconnCapabilities,
|
pumpCapability = PumpCapability.DiaconnCapabilities,
|
||||||
source = Sources.DiaconnG8,
|
source = Sources.DiaconnG8,
|
||||||
useHardwareLink = true);
|
useHardwareLink = true
|
||||||
|
);
|
||||||
|
|
||||||
val description: String
|
val description: String
|
||||||
var manufacturer: ManufacturerType? = null
|
var manufacturer: ManufacturerType? = null
|
||||||
|
@ -407,6 +460,7 @@ enum class PumpType {
|
||||||
InterfaceIDs.PumpType.MDI -> MDI
|
InterfaceIDs.PumpType.MDI -> MDI
|
||||||
InterfaceIDs.PumpType.USER -> USER
|
InterfaceIDs.PumpType.USER -> USER
|
||||||
InterfaceIDs.PumpType.DIACONN_G8 -> DIACONN_G8
|
InterfaceIDs.PumpType.DIACONN_G8 -> DIACONN_G8
|
||||||
|
InterfaceIDs.PumpType.CACHE -> TODO()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,25 +472,27 @@ enum class PumpType {
|
||||||
parent.model = model
|
parent.model = model
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(description: String,
|
constructor(
|
||||||
manufacturer: ManufacturerType,
|
description: String,
|
||||||
model: String,
|
manufacturer: ManufacturerType,
|
||||||
bolusSize: Double = 0.0,
|
model: String,
|
||||||
specialBolusSize: DoseStepSize? = null,
|
bolusSize: Double = 0.0,
|
||||||
extendedBolusSettings: DoseSettings,
|
specialBolusSize: DoseStepSize? = null,
|
||||||
pumpTempBasalType: PumpTempBasalType? = null,
|
extendedBolusSettings: DoseSettings,
|
||||||
tbrSettings: DoseSettings,
|
pumpTempBasalType: PumpTempBasalType? = null,
|
||||||
specialBasalDurations: PumpCapability? = null,
|
tbrSettings: DoseSettings,
|
||||||
baseBasalMinValue: Double = 0.01,
|
specialBasalDurations: PumpCapability? = null,
|
||||||
baseBasalMaxValue: Double? = null,
|
baseBasalMinValue: Double = 0.01,
|
||||||
baseBasalStep: Double = 1.0,
|
baseBasalMaxValue: Double? = null,
|
||||||
baseBasalSpecialSteps: DoseStepSize? = null,
|
baseBasalStep: Double = 1.0,
|
||||||
pumpCapability: PumpCapability,
|
baseBasalSpecialSteps: DoseStepSize? = null,
|
||||||
hasCustomUnreachableAlertCheck: Boolean = false,
|
pumpCapability: PumpCapability,
|
||||||
isPatchPump: Boolean = false,
|
hasCustomUnreachableAlertCheck: Boolean = false,
|
||||||
supportBatteryLevel: Boolean = true,
|
isPatchPump: Boolean = false,
|
||||||
useHardwareLink: Boolean = false,
|
supportBatteryLevel: Boolean = true,
|
||||||
source: Sources = Sources.VirtualPump) {
|
useHardwareLink: Boolean = false,
|
||||||
|
source: Sources = Sources.VirtualPump
|
||||||
|
) {
|
||||||
this.description = description
|
this.description = description
|
||||||
this.manufacturer = manufacturer
|
this.manufacturer = manufacturer
|
||||||
this.model = model
|
this.model = model
|
||||||
|
@ -463,12 +519,14 @@ enum class PumpType {
|
||||||
val eb = extendedBolusSettings ?: return "INVALID"
|
val eb = extendedBolusSettings ?: return "INVALID"
|
||||||
val tbr = tbrSettings ?: return "INVALID"
|
val tbr = tbrSettings ?: return "INVALID"
|
||||||
val extendedNote = if (hasExtendedBasals) rh.gs(R.string.def_extended_note) else ""
|
val extendedNote = if (hasExtendedBasals) rh.gs(R.string.def_extended_note) else ""
|
||||||
return String.format(i18nTemplate,
|
return String.format(
|
||||||
|
i18nTemplate,
|
||||||
getStep("" + bolusSize, specialBolusSize),
|
getStep("" + bolusSize, specialBolusSize),
|
||||||
eb.step, eb.durationStep, eb.maxDuration / 60,
|
eb.step, eb.durationStep, eb.maxDuration / 60,
|
||||||
getStep(baseBasalRange(), baseBasalSpecialSteps),
|
getStep(baseBasalRange(), baseBasalSpecialSteps),
|
||||||
tbr.minDose.toString() + unit + "-" + tbr.maxDose + unit, tbr.step.toString() + unit,
|
tbr.minDose.toString() + unit + "-" + tbr.maxDose + unit, tbr.step.toString() + unit,
|
||||||
tbr.durationStep, tbr.maxDuration / 60, extendedNote)
|
tbr.durationStep, tbr.maxDuration / 60, extendedNote
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun baseBasalRange(): String =
|
private fun baseBasalRange(): String =
|
||||||
|
@ -494,42 +552,45 @@ enum class PumpType {
|
||||||
|
|
||||||
fun determineCorrectBasalSize(basalAmount: Double): Double {
|
fun determineCorrectBasalSize(basalAmount: Double): Double {
|
||||||
val tSettings = tbrSettings ?: throw IllegalStateException()
|
val tSettings = tbrSettings ?: throw IllegalStateException()
|
||||||
return Round.roundTo(min(basalAmount, tSettings.maxDose), baseBasalSpecialSteps?.getStepSizeForAmount(basalAmount)
|
return Round.roundTo(
|
||||||
?: baseBasalStep)
|
min(basalAmount, tSettings.maxDose), baseBasalSpecialSteps?.getStepSizeForAmount(basalAmount)
|
||||||
|
?: baseBasalStep
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toDbPumpType(): InterfaceIDs.PumpType =
|
fun toDbPumpType(): InterfaceIDs.PumpType =
|
||||||
when (this) {
|
when (this) {
|
||||||
GENERIC_AAPS -> InterfaceIDs.PumpType.GENERIC_AAPS
|
GENERIC_AAPS -> InterfaceIDs.PumpType.GENERIC_AAPS
|
||||||
CELLNOVO -> InterfaceIDs.PumpType.CELLNOVO
|
CELLNOVO -> InterfaceIDs.PumpType.CELLNOVO
|
||||||
ACCU_CHEK_COMBO -> InterfaceIDs.PumpType.ACCU_CHEK_COMBO
|
ACCU_CHEK_COMBO -> InterfaceIDs.PumpType.ACCU_CHEK_COMBO
|
||||||
ACCU_CHEK_SPIRIT -> InterfaceIDs.PumpType.ACCU_CHEK_SPIRIT
|
ACCU_CHEK_SPIRIT -> InterfaceIDs.PumpType.ACCU_CHEK_SPIRIT
|
||||||
ACCU_CHEK_INSIGHT_VIRTUAL -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT
|
ACCU_CHEK_INSIGHT_VIRTUAL -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT
|
||||||
ACCU_CHEK_INSIGHT -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT_BLUETOOTH
|
ACCU_CHEK_INSIGHT -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT_BLUETOOTH
|
||||||
ACCU_CHEK_SOLO -> InterfaceIDs.PumpType.ACCU_CHEK_SOLO
|
ACCU_CHEK_SOLO -> InterfaceIDs.PumpType.ACCU_CHEK_SOLO
|
||||||
ANIMAS_VIBE -> InterfaceIDs.PumpType.ANIMAS_VIBE
|
ANIMAS_VIBE -> InterfaceIDs.PumpType.ANIMAS_VIBE
|
||||||
ANIMAS_PING -> InterfaceIDs.PumpType.ANIMAS_PING
|
ANIMAS_PING -> InterfaceIDs.PumpType.ANIMAS_PING
|
||||||
DANA_R -> InterfaceIDs.PumpType.DANA_R
|
DANA_R -> InterfaceIDs.PumpType.DANA_R
|
||||||
DANA_R_KOREAN -> InterfaceIDs.PumpType.DANA_R_KOREAN
|
DANA_R_KOREAN -> InterfaceIDs.PumpType.DANA_R_KOREAN
|
||||||
DANA_RS -> InterfaceIDs.PumpType.DANA_RS
|
DANA_RS -> InterfaceIDs.PumpType.DANA_RS
|
||||||
DANA_RS_KOREAN -> InterfaceIDs.PumpType.DANA_RS_KOREAN
|
DANA_RS_KOREAN -> InterfaceIDs.PumpType.DANA_RS_KOREAN
|
||||||
DANA_RV2 -> InterfaceIDs.PumpType.DANA_RV2
|
DANA_RV2 -> InterfaceIDs.PumpType.DANA_RV2
|
||||||
DANA_I -> InterfaceIDs.PumpType.DANA_I
|
DANA_I -> InterfaceIDs.PumpType.DANA_I
|
||||||
OMNIPOD_EROS -> InterfaceIDs.PumpType.OMNIPOD_EROS
|
OMNIPOD_EROS -> InterfaceIDs.PumpType.OMNIPOD_EROS
|
||||||
OMNIPOD_DASH -> InterfaceIDs.PumpType.OMNIPOD_DASH
|
OMNIPOD_DASH -> InterfaceIDs.PumpType.OMNIPOD_DASH
|
||||||
MEDTRONIC_512_712 -> InterfaceIDs.PumpType.MEDTRONIC_512_517
|
MEDTRONIC_512_712 -> InterfaceIDs.PumpType.MEDTRONIC_512_517
|
||||||
MEDTRONIC_515_715 -> InterfaceIDs.PumpType.MEDTRONIC_515_715
|
MEDTRONIC_515_715 -> InterfaceIDs.PumpType.MEDTRONIC_515_715
|
||||||
MEDTRONIC_522_722 -> InterfaceIDs.PumpType.MEDTRONIC_522_722
|
MEDTRONIC_522_722 -> InterfaceIDs.PumpType.MEDTRONIC_522_722
|
||||||
MEDTRONIC_523_723_REVEL -> InterfaceIDs.PumpType.MEDTRONIC_523_723_REVEL
|
MEDTRONIC_523_723_REVEL -> InterfaceIDs.PumpType.MEDTRONIC_523_723_REVEL
|
||||||
MEDTRONIC_554_754_VEO -> InterfaceIDs.PumpType.MEDTRONIC_554_754_VEO
|
MEDTRONIC_554_754_VEO -> InterfaceIDs.PumpType.MEDTRONIC_554_754_VEO
|
||||||
MEDTRONIC_640G -> InterfaceIDs.PumpType.MEDTRONIC_640G
|
MEDTRONIC_640G -> InterfaceIDs.PumpType.MEDTRONIC_640G
|
||||||
TANDEM_T_SLIM -> InterfaceIDs.PumpType.TANDEM_T_SLIM
|
TANDEM_T_SLIM -> InterfaceIDs.PumpType.TANDEM_T_SLIM
|
||||||
TANDEM_T_SLIM_G4 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_G4
|
TANDEM_T_SLIM_G4 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_G4
|
||||||
TANDEM_T_FLEX -> InterfaceIDs.PumpType.TANDEM_T_FLEX
|
TANDEM_T_FLEX -> InterfaceIDs.PumpType.TANDEM_T_FLEX
|
||||||
TANDEM_T_SLIM_X2 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_X2
|
TANDEM_T_SLIM_X2 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_X2
|
||||||
YPSOPUMP -> InterfaceIDs.PumpType.YPSOPUMP
|
YPSOPUMP -> InterfaceIDs.PumpType.YPSOPUMP
|
||||||
MDI -> InterfaceIDs.PumpType.MDI
|
MDI -> InterfaceIDs.PumpType.MDI
|
||||||
USER -> InterfaceIDs.PumpType.USER
|
USER -> InterfaceIDs.PumpType.USER
|
||||||
DIACONN_G8 -> InterfaceIDs.PumpType.DIACONN_G8
|
DIACONN_G8 -> InterfaceIDs.PumpType.DIACONN_G8
|
||||||
|
CACHE -> InterfaceIDs.PumpType.CACHE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -569,8 +569,8 @@
|
||||||
<string name="autotune_last_run">Last run :</string>
|
<string name="autotune_last_run">Last run :</string>
|
||||||
<string name="autotune_warning">Warning :</string>
|
<string name="autotune_warning">Warning :</string>
|
||||||
<string name="autotune_select_profile">Select profile to tune</string>
|
<string name="autotune_select_profile">Select profile to tune</string>
|
||||||
<string name="autotune_ic_warning">Autotune works with only one IC value, your profile has %1$d values. Average value is %2$.2fg/U</string>
|
<string name="autotune_ic_warning">Selected profile has %1$d IC values. Autotune will use %2$.2f g/U</string>
|
||||||
<string name="autotune_isf_warning">Autotune works with only one ISF value, your profile has %1$d values. Average value is %2$.1f%3$s/U</string>
|
<string name="autotune_isf_warning">Selected profile has %1$d ISF values. Autotune will use %2$.1f %3$s/U</string>
|
||||||
<string name="autotune_error">Error in input data, try to run again autotune or reduce the number of days</string>
|
<string name="autotune_error">Error in input data, try to run again autotune or reduce the number of days</string>
|
||||||
<string name="autotune_error_more_days">Error in input data, increase the number of days</string>
|
<string name="autotune_error_more_days">Error in input data, increase the number of days</string>
|
||||||
<string name="autotune_warning_during_run">Autotune calculation started, please be patient</string>
|
<string name="autotune_warning_during_run">Autotune calculation started, please be patient</string>
|
||||||
|
|
|
@ -2,6 +2,7 @@ package info.nightscout.androidaps.database
|
||||||
|
|
||||||
import info.nightscout.androidaps.annotations.OpenForTesting
|
import info.nightscout.androidaps.annotations.OpenForTesting
|
||||||
import info.nightscout.androidaps.database.data.NewEntries
|
import info.nightscout.androidaps.database.data.NewEntries
|
||||||
|
import info.nightscout.androidaps.database.embedments.InterfaceIDs
|
||||||
import info.nightscout.androidaps.database.entities.*
|
import info.nightscout.androidaps.database.entities.*
|
||||||
import info.nightscout.androidaps.database.interfaces.DBEntry
|
import info.nightscout.androidaps.database.interfaces.DBEntry
|
||||||
import info.nightscout.androidaps.database.transactions.Transaction
|
import info.nightscout.androidaps.database.transactions.Transaction
|
||||||
|
@ -59,6 +60,10 @@ import kotlin.math.roundToInt
|
||||||
|
|
||||||
fun clearDatabases() = database.clearAllTables()
|
fun clearDatabases() = database.clearAllTables()
|
||||||
|
|
||||||
|
fun clearCachedData(from: Long) {
|
||||||
|
database.totalDailyDoseDao.deleteNewerThan(from, InterfaceIDs.PumpType.CACHE)
|
||||||
|
}
|
||||||
|
|
||||||
//BG READINGS -- only valid records
|
//BG READINGS -- only valid records
|
||||||
fun compatGetBgReadingsDataFromTime(timestamp: Long, ascending: Boolean): Single<List<GlucoseValue>> =
|
fun compatGetBgReadingsDataFromTime(timestamp: Long, ascending: Boolean): Single<List<GlucoseValue>> =
|
||||||
database.glucoseValueDao.compatGetBgReadingsDataFromTime(timestamp)
|
database.glucoseValueDao.compatGetBgReadingsDataFromTime(timestamp)
|
||||||
|
@ -775,22 +780,26 @@ import kotlin.math.roundToInt
|
||||||
fun getOldestExtendedBolusRecord(): ExtendedBolus? =
|
fun getOldestExtendedBolusRecord(): ExtendedBolus? =
|
||||||
database.extendedBolusDao.getOldestRecord()
|
database.extendedBolusDao.getOldestRecord()
|
||||||
|
|
||||||
// TotalDailyDose
|
fun getLastExtendedBolusIdWrapped(): Single<ValueWrapper<Long>> =
|
||||||
fun getAllTotalDailyDoses(ascending: Boolean): Single<List<TotalDailyDose>> =
|
database.extendedBolusDao.getLastId()
|
||||||
database.totalDailyDoseDao.getAllTotalDailyDoses()
|
|
||||||
.map { if (!ascending) it.reversed() else it }
|
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
|
.toWrappedSingle()
|
||||||
|
|
||||||
|
// TotalDailyDose
|
||||||
fun getLastTotalDailyDoses(count: Int, ascending: Boolean): Single<List<TotalDailyDose>> =
|
fun getLastTotalDailyDoses(count: Int, ascending: Boolean): Single<List<TotalDailyDose>> =
|
||||||
database.totalDailyDoseDao.getLastTotalDailyDoses(count)
|
database.totalDailyDoseDao.getLastTotalDailyDoses(count)
|
||||||
.map { if (!ascending) it.reversed() else it }
|
.map { if (!ascending) it.reversed() else it }
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
|
|
||||||
fun getLastExtendedBolusIdWrapped(): Single<ValueWrapper<Long>> =
|
fun getCalculatedTotalDailyDose(timestamp: Long): Single<ValueWrapper<TotalDailyDose>> =
|
||||||
database.extendedBolusDao.getLastId()
|
database.totalDailyDoseDao.findByTimestamp(timestamp, InterfaceIDs.PumpType.CACHE)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.toWrappedSingle()
|
.toWrappedSingle()
|
||||||
|
|
||||||
|
fun createTotalDailyDose(tdd: TotalDailyDose) {
|
||||||
|
database.totalDailyDoseDao.insert(tdd)
|
||||||
|
}
|
||||||
|
|
||||||
// OFFLINE EVENT
|
// OFFLINE EVENT
|
||||||
/*
|
/*
|
||||||
* returns a Pair of the next entity to sync and the ID of the "update".
|
* returns a Pair of the next entity to sync and the ID of the "update".
|
||||||
|
|
|
@ -2,11 +2,10 @@ package info.nightscout.androidaps.database.daos
|
||||||
|
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import info.nightscout.androidaps.database.TABLE_TEMPORARY_TARGETS
|
|
||||||
import info.nightscout.androidaps.database.TABLE_TOTAL_DAILY_DOSES
|
import info.nightscout.androidaps.database.TABLE_TOTAL_DAILY_DOSES
|
||||||
import info.nightscout.androidaps.database.embedments.InterfaceIDs
|
import info.nightscout.androidaps.database.embedments.InterfaceIDs
|
||||||
import info.nightscout.androidaps.database.entities.TemporaryTarget
|
|
||||||
import info.nightscout.androidaps.database.entities.TotalDailyDose
|
import info.nightscout.androidaps.database.entities.TotalDailyDose
|
||||||
|
import io.reactivex.rxjava3.core.Maybe
|
||||||
import io.reactivex.rxjava3.core.Single
|
import io.reactivex.rxjava3.core.Single
|
||||||
|
|
||||||
@Suppress("FunctionName")
|
@Suppress("FunctionName")
|
||||||
|
@ -25,13 +24,16 @@ internal interface TotalDailyDoseDao : TraceableDao<TotalDailyDose> {
|
||||||
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE timestamp = :timestamp AND pumpType = :pumpType AND pumpSerial = :pumpSerial AND referenceId IS NULL")
|
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE timestamp = :timestamp AND pumpType = :pumpType AND pumpSerial = :pumpSerial AND referenceId IS NULL")
|
||||||
fun findByPumpTimestamp(timestamp: Long, pumpType: InterfaceIDs.PumpType, pumpSerial: String): TotalDailyDose?
|
fun findByPumpTimestamp(timestamp: Long, pumpType: InterfaceIDs.PumpType, pumpSerial: String): TotalDailyDose?
|
||||||
|
|
||||||
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE isValid = 1 AND referenceId IS NULL ORDER BY timestamp ASC")
|
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE timestamp = :timestamp AND pumpType = :pumpType AND referenceId IS NULL")
|
||||||
fun getAllTotalDailyDoses(): Single<List<TotalDailyDose>>
|
fun findByTimestamp(timestamp: Long, pumpType: InterfaceIDs.PumpType): Maybe<TotalDailyDose>
|
||||||
|
|
||||||
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE isValid = 1 AND referenceId IS NULL ORDER BY timestamp DESC LIMIT :count")
|
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE isValid = 1 AND referenceId IS NULL AND pumpType <> :exclude ORDER BY timestamp DESC LIMIT :count")
|
||||||
fun getLastTotalDailyDoses(count: Int): Single<List<TotalDailyDose>>
|
fun getLastTotalDailyDoses(count: Int, exclude: InterfaceIDs.PumpType = InterfaceIDs.PumpType.CACHE): Single<List<TotalDailyDose>>
|
||||||
|
|
||||||
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE dateCreated > :since AND dateCreated <= :until LIMIT :limit OFFSET :offset")
|
@Query("SELECT * FROM $TABLE_TOTAL_DAILY_DOSES WHERE dateCreated > :since AND dateCreated <= :until LIMIT :limit OFFSET :offset")
|
||||||
suspend fun getNewEntriesSince(since: Long, until: Long, limit: Int, offset: Int): List<TotalDailyDose>
|
suspend fun getNewEntriesSince(since: Long, until: Long, limit: Int, offset: Int): List<TotalDailyDose>
|
||||||
|
|
||||||
|
@Query("DELETE FROM $TABLE_TOTAL_DAILY_DOSES WHERE dateCreated >= :since AND pumpType = :pumpType")
|
||||||
|
fun deleteNewerThan(since: Long, pumpType: InterfaceIDs.PumpType)
|
||||||
|
|
||||||
}
|
}
|
|
@ -42,7 +42,8 @@ data class InterfaceIDs(
|
||||||
YPSOPUMP,
|
YPSOPUMP,
|
||||||
MDI,
|
MDI,
|
||||||
DIACONN_G8,
|
DIACONN_G8,
|
||||||
USER;
|
USER,
|
||||||
|
CACHE;
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ import info.nightscout.androidaps.queue.events.EventQueueChanged
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.interfaces.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.androidaps.utils.ui.UIRunnable
|
import info.nightscout.androidaps.utils.ui.UIRunnable
|
||||||
|
|
Loading…
Reference in a new issue