Improve COB handling
This commit is contained in:
parent
fb9f5220d3
commit
b80e2a7648
7 changed files with 31 additions and 29 deletions
|
@ -680,14 +680,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
activity?.let { OKDialog.show(it, resourceHelper.gs(R.string.iob), overviewData.iobDialogText) }
|
activity?.let { OKDialog.show(it, resourceHelper.gs(R.string.iob), overviewData.iobDialogText) }
|
||||||
}
|
}
|
||||||
// cob
|
// cob
|
||||||
var cobText: String = resourceHelper.gs(R.string.value_unavailable_short)
|
var cobText = overviewData.cobInfo?.displayText(resourceHelper, dateUtil, buildHelper.isDev()) ?: resourceHelper.gs(R.string.value_unavailable_short)
|
||||||
overviewData.cobInfo?.let { cobInfo ->
|
|
||||||
if (cobInfo.displayCob != null) {
|
|
||||||
cobText = resourceHelper.gs(R.string.format_carbs, cobInfo.displayCob!!.toInt())
|
|
||||||
if (cobInfo.futureCarbs > 0) cobText += "(" + DecimalFormatter.to0Decimal(cobInfo.futureCarbs) + ")"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
binding.infoLayout.cob.text = cobText
|
|
||||||
|
|
||||||
val constraintsProcessed = loopPlugin.lastRun?.constraintsProcessed
|
val constraintsProcessed = loopPlugin.lastRun?.constraintsProcessed
|
||||||
val lastRun = loopPlugin.lastRun
|
val lastRun = loopPlugin.lastRun
|
||||||
|
@ -695,7 +688,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
if (constraintsProcessed.carbsReq > 0) {
|
if (constraintsProcessed.carbsReq > 0) {
|
||||||
//only display carbsreq when carbs have not been entered recently
|
//only display carbsreq when carbs have not been entered recently
|
||||||
if (overviewData.lastCarbsTime < lastRun.lastAPSRun) {
|
if (overviewData.lastCarbsTime < lastRun.lastAPSRun) {
|
||||||
cobText = cobText + " | " + constraintsProcessed.carbsReq + " " + resourceHelper.gs(R.string.required)
|
cobText += " | " + constraintsProcessed.carbsReq + " " + resourceHelper.gs(R.string.required)
|
||||||
}
|
}
|
||||||
if (carbAnimation?.isRunning == false)
|
if (carbAnimation?.isRunning == false)
|
||||||
carbAnimation?.start()
|
carbAnimation?.start()
|
||||||
|
@ -704,6 +697,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
carbAnimation?.selectDrawable(0)
|
carbAnimation?.selectDrawable(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
binding.infoLayout.cob.text = cobText
|
||||||
}
|
}
|
||||||
|
|
||||||
OverviewData.Property.TEMPORARY_TARGET -> {
|
OverviewData.Property.TEMPORARY_TARGET -> {
|
||||||
|
|
|
@ -23,7 +23,6 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventBucke
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||||
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.Translator
|
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
|
@ -45,8 +44,6 @@ class OverviewPlugin @Inject constructor(
|
||||||
resourceHelper: ResourceHelper,
|
resourceHelper: ResourceHelper,
|
||||||
private val config: Config,
|
private val config: Config,
|
||||||
private val dateUtil: DateUtil,
|
private val dateUtil: DateUtil,
|
||||||
private val translator: Translator,
|
|
||||||
// private val profiler: Profiler,
|
|
||||||
private val profileFunction: ProfileFunction,
|
private val profileFunction: ProfileFunction,
|
||||||
private val iobCobCalculator: IobCobCalculator,
|
private val iobCobCalculator: IobCobCalculator,
|
||||||
private val repository: AppRepository,
|
private val repository: AppRepository,
|
||||||
|
@ -234,7 +231,6 @@ class OverviewPlugin @Inject constructor(
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TIME))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TIME))
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TEMPORARY_BASAL))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TEMPORARY_BASAL))
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.EXTENDED_BOLUS))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.EXTENDED_BOLUS))
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.IOB_COB))
|
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TEMPORARY_TARGET))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.TEMPORARY_TARGET))
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.SENSITIVITY))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.SENSITIVITY))
|
||||||
loadAsData(from)
|
loadAsData(from)
|
||||||
|
@ -244,6 +240,7 @@ class OverviewPlugin @Inject constructor(
|
||||||
overviewData.prepareTreatmentsData(from)
|
overviewData.prepareTreatmentsData(from)
|
||||||
overviewData.prepareIobAutosensData(from)
|
overviewData.prepareIobAutosensData(from)
|
||||||
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.GRAPH))
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.GRAPH))
|
||||||
|
overviewBus.send(EventUpdateOverview(from, OverviewData.Property.IOB_COB))
|
||||||
aapsLogger.debug(LTag.UI, "refreshLoop finished")
|
aapsLogger.debug(LTag.UI, "refreshLoop finished")
|
||||||
runningRefresh = false
|
runningRefresh = false
|
||||||
}
|
}
|
||||||
|
@ -305,7 +302,7 @@ class OverviewPlugin @Inject constructor(
|
||||||
private fun loadIobCobResults(from: String) {
|
private fun loadIobCobResults(from: String) {
|
||||||
overviewData.bolusIob = iobCobCalculator.calculateIobFromBolus().round()
|
overviewData.bolusIob = iobCobCalculator.calculateIobFromBolus().round()
|
||||||
overviewData.basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
|
overviewData.basalIob = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
|
||||||
overviewData.cobInfo = iobCobCalculator.getCobInfo(false, "Overview COB")
|
overviewData.cobInfo = iobCobCalculator.getCobInfo(true, "Overview COB")
|
||||||
val lastCarbs = repository.getLastCarbsRecordWrapped().blockingGet()
|
val lastCarbs = repository.getLastCarbsRecordWrapped().blockingGet()
|
||||||
overviewData.lastCarbsTime = if (lastCarbs is ValueWrapper.Existing) lastCarbs.value.timestamp else 0L
|
overviewData.lastCarbsTime = if (lastCarbs is ValueWrapper.Existing) lastCarbs.value.timestamp else 0L
|
||||||
|
|
||||||
|
|
|
@ -270,18 +270,19 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
var displayCob: Double? = null
|
var displayCob: Double? = null
|
||||||
var futureCarbs = 0.0
|
var futureCarbs = 0.0
|
||||||
val now = dateUtil.now()
|
val now = dateUtil.now()
|
||||||
val carbs = repository.getCarbsDataFromTimeExpanded(now, true).blockingGet()
|
var timestamp = now
|
||||||
|
val carbs = repository.getCarbsDataFromTimeExpanded(autosensData?.time ?: now, true).blockingGet()
|
||||||
if (autosensData != null) {
|
if (autosensData != null) {
|
||||||
displayCob = autosensData.cob
|
displayCob = autosensData.cob
|
||||||
carbs.forEach { carb ->
|
carbs.forEach { carb ->
|
||||||
if (ads.roundUpTime(carb.timestamp) > ads.roundUpTime(autosensData.time) && carb.timestamp <= now) {
|
if (carb.timestamp > autosensData.time && carb.timestamp <= now)
|
||||||
displayCob += carb.amount
|
displayCob += carb.amount
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
timestamp = autosensData.time
|
||||||
}
|
}
|
||||||
// Future carbs
|
// Future carbs
|
||||||
carbs.forEach { carb -> if (carb.timestamp > now) futureCarbs += carb.amount }
|
carbs.forEach { carb -> if (carb.timestamp > now) futureCarbs += carb.amount }
|
||||||
return CobInfo(displayCob, futureCarbs)
|
return CobInfo(timestamp, displayCob, futureCarbs)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMealDataWithWaitingForCalculationFinish(): MealData {
|
override fun getMealDataWithWaitingForCalculationFinish(): MealData {
|
||||||
|
@ -579,7 +580,7 @@ class IobCobCalculatorPlugin @Inject constructor(
|
||||||
return total
|
return total
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun getCalculationToTimeTempBasals(toTime: Long, lastAutosensResult: AutosensResult, exercise_mode: Boolean, half_basal_exercise_target: Int, isTempTarget: Boolean): IobTotal {
|
fun getCalculationToTimeTempBasals(toTime: Long, lastAutosensResult: AutosensResult, exercise_mode: Boolean, half_basal_exercise_target: Int, isTempTarget: Boolean): IobTotal {
|
||||||
val total = IobTotal(toTime)
|
val total = IobTotal(toTime)
|
||||||
val pumpInterface = activePlugin.activePump
|
val pumpInterface = activePlugin.activePump
|
||||||
val now = dateUtil.now()
|
val now = dateUtil.now()
|
||||||
|
|
|
@ -84,11 +84,9 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec
|
||||||
bg = lastBG.valueToUnits(profileFunction.getUnits())
|
bg = lastBG.valueToUnits(profileFunction.getUnits())
|
||||||
}
|
}
|
||||||
// COB
|
// COB
|
||||||
var cob = 0.0
|
val cob =
|
||||||
if (useCOB() == YES) {
|
if (useCOB() == YES) iobCobCalculator.getCobInfo(_synchronized, "QuickWizard COB").displayCob ?: 0.0
|
||||||
val cobInfo = iobCobCalculator.getCobInfo(_synchronized, "QuickWizard COB")
|
else 0.0
|
||||||
if (cobInfo.displayCob != null) cob = cobInfo.displayCob!!
|
|
||||||
}
|
|
||||||
// Bolus IOB
|
// Bolus IOB
|
||||||
var bolusIOB = false
|
var bolusIOB = false
|
||||||
if (useBolusIOB() == YES) {
|
if (useBolusIOB() == YES) {
|
||||||
|
@ -121,7 +119,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec
|
||||||
trend = true
|
trend = true
|
||||||
}
|
}
|
||||||
val percentage = sp.getInt(R.string.key_boluswizard_percentage, 100)
|
val percentage = sp.getInt(R.string.key_boluswizard_percentage, 100)
|
||||||
return BolusWizard(injector).doCalc(profile, profileName, tempTarget, carbs(), cob, bg, 0.0, percentage, true, useCOB() == YES, bolusIOB, basalIOB, superBolus, useTempTarget() == YES, trend, false, buttonText(), quickWizard = true) //tbc, ok if only quickwizard, but if other sources elsewhere use Sources.QuickWiard
|
return BolusWizard(injector).doCalc(profile, profileName, tempTarget, carbs(), cob, bg, 0.0, percentage, true, useCOB() == YES, bolusIOB, basalIOB, superBolus, useTempTarget() == YES, trend, false, buttonText(), quickWizard = true) //tbc, ok if only quickwizard, but if other sources elsewhere use Sources.QuickWizard
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buttonText(): String = safeGetString(storage, "buttonText", "")
|
fun buttonText(): String = safeGetString(storage, "buttonText", "")
|
||||||
|
|
|
@ -98,7 +98,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() {
|
||||||
val bgList: MutableList<GlucoseValue> = ArrayList()
|
val bgList: MutableList<GlucoseValue> = ArrayList()
|
||||||
bgList.add(reading)
|
bgList.add(reading)
|
||||||
|
|
||||||
`when`(iobCobCalculator.getCobInfo(false, "SMS COB")).thenReturn(CobInfo(10.0, 2.0))
|
`when`(iobCobCalculator.getCobInfo(false, "SMS COB")).thenReturn(CobInfo(0, 10.0, 2.0))
|
||||||
`when`(iobCobCalculator.ads).thenReturn(autosensDataStore)
|
`when`(iobCobCalculator.ads).thenReturn(autosensDataStore)
|
||||||
`when`(autosensDataStore.lastBg()).thenReturn(reading)
|
`when`(autosensDataStore.lastBg()).thenReturn(reading)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.iob.iobCobCalculator
|
package info.nightscout.androidaps.plugins.iob.iobCobCalculator
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.core.R
|
||||||
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||||
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
|
|
||||||
/** All COB up to now, including carbs not yet processed by IobCob calculation. */
|
/** All COB up to now, including carbs not yet processed by IobCob calculation. */
|
||||||
class CobInfo(val displayCob: Double?, val futureCarbs: Double) {
|
class CobInfo(val timestamp: Long, val displayCob: Double?, val futureCarbs: Double) {
|
||||||
|
|
||||||
fun generateCOBString(): String {
|
fun generateCOBString(): String {
|
||||||
var cobStringResult = "--g"
|
var cobStringResult = "--g"
|
||||||
|
@ -15,4 +18,13 @@ class CobInfo(val displayCob: Double?, val futureCarbs: Double) {
|
||||||
}
|
}
|
||||||
return cobStringResult
|
return cobStringResult
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
fun displayText(resourceHelper: ResourceHelper, dateUtil: DateUtil, isDev: Boolean): String? =
|
||||||
|
if (displayCob != null) {
|
||||||
|
var cobText = resourceHelper.gs(R.string.format_carbs, displayCob.toInt())
|
||||||
|
if (futureCarbs > 0) cobText += "(" + DecimalFormatter.to0Decimal(futureCarbs) + ")"
|
||||||
|
// This is only temporary for debugging
|
||||||
|
if (isDev) cobText += "\n" + dateUtil.timeStringWithSeconds(timestamp)
|
||||||
|
cobText
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ class DateUtil @Inject constructor(private val context: Context) {
|
||||||
return DateTime(mills).toString(DateTimeFormat.forPattern(format))
|
return DateTime(mills).toString(DateTimeFormat.forPattern(format))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun timeStringWithSeconds(mills: Long): String {
|
fun timeStringWithSeconds(mills: Long): String {
|
||||||
var format = "hh:mm:ssa"
|
var format = "hh:mm:ssa"
|
||||||
if (android.text.format.DateFormat.is24HourFormat(context)) {
|
if (android.text.format.DateFormat.is24HourFormat(context)) {
|
||||||
format = "HH:mm:ss"
|
format = "HH:mm:ss"
|
||||||
|
|
Loading…
Reference in a new issue