diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt index e000c9ff44..981881ffa3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt @@ -680,14 +680,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList activity?.let { OKDialog.show(it, resourceHelper.gs(R.string.iob), overviewData.iobDialogText) } } // cob - var cobText: String = 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 + var cobText = overviewData.cobInfo?.displayText(resourceHelper, dateUtil, buildHelper.isDev()) ?: resourceHelper.gs(R.string.value_unavailable_short) val constraintsProcessed = loopPlugin.lastRun?.constraintsProcessed val lastRun = loopPlugin.lastRun @@ -695,7 +688,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList if (constraintsProcessed.carbsReq > 0) { //only display carbsreq when carbs have not been entered recently 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) carbAnimation?.start() @@ -704,6 +697,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList carbAnimation?.selectDrawable(0) } } + binding.infoLayout.cob.text = cobText } OverviewData.Property.TEMPORARY_TARGET -> { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt index 97fbb823a1..003dc89440 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewPlugin.kt @@ -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.utils.DateUtil import info.nightscout.androidaps.utils.FabricPrivacy -import info.nightscout.androidaps.utils.Translator import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.androidaps.utils.sharedPreferences.SP @@ -45,8 +44,6 @@ class OverviewPlugin @Inject constructor( resourceHelper: ResourceHelper, private val config: Config, private val dateUtil: DateUtil, - private val translator: Translator, -// private val profiler: Profiler, private val profileFunction: ProfileFunction, private val iobCobCalculator: IobCobCalculator, 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.TEMPORARY_BASAL)) 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.SENSITIVITY)) loadAsData(from) @@ -244,6 +240,7 @@ class OverviewPlugin @Inject constructor( overviewData.prepareTreatmentsData(from) overviewData.prepareIobAutosensData(from) overviewBus.send(EventUpdateOverview(from, OverviewData.Property.GRAPH)) + overviewBus.send(EventUpdateOverview(from, OverviewData.Property.IOB_COB)) aapsLogger.debug(LTag.UI, "refreshLoop finished") runningRefresh = false } @@ -305,7 +302,7 @@ class OverviewPlugin @Inject constructor( private fun loadIobCobResults(from: String) { overviewData.bolusIob = iobCobCalculator.calculateIobFromBolus().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() overviewData.lastCarbsTime = if (lastCarbs is ValueWrapper.Existing) lastCarbs.value.timestamp else 0L diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt index bd1817db2b..4cad7c1f92 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobCalculatorPlugin.kt @@ -270,18 +270,19 @@ class IobCobCalculatorPlugin @Inject constructor( var displayCob: Double? = null var futureCarbs = 0.0 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) { displayCob = autosensData.cob 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 - } } + timestamp = autosensData.time } // Future carbs carbs.forEach { carb -> if (carb.timestamp > now) futureCarbs += carb.amount } - return CobInfo(displayCob, futureCarbs) + return CobInfo(timestamp, displayCob, futureCarbs) } override fun getMealDataWithWaitingForCalculationFinish(): MealData { @@ -579,7 +580,7 @@ class IobCobCalculatorPlugin @Inject constructor( 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 pumpInterface = activePlugin.activePump val now = dateUtil.now() diff --git a/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt b/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt index 9e9ae6a87a..c1784ca4ff 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/wizard/QuickWizardEntry.kt @@ -84,11 +84,9 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec bg = lastBG.valueToUnits(profileFunction.getUnits()) } // COB - var cob = 0.0 - if (useCOB() == YES) { - val cobInfo = iobCobCalculator.getCobInfo(_synchronized, "QuickWizard COB") - if (cobInfo.displayCob != null) cob = cobInfo.displayCob!! - } + val cob = + if (useCOB() == YES) iobCobCalculator.getCobInfo(_synchronized, "QuickWizard COB").displayCob ?: 0.0 + else 0.0 // Bolus IOB var bolusIOB = false if (useBolusIOB() == YES) { @@ -121,7 +119,7 @@ class QuickWizardEntry @Inject constructor(private val injector: HasAndroidInjec trend = true } 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", "") diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt b/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt index fe2197fc1f..a2c6d32a08 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt +++ b/app/src/test/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPluginTest.kt @@ -98,7 +98,7 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() { val bgList: MutableList = ArrayList() 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`(autosensDataStore.lastBg()).thenReturn(reading) diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt index 2676fde7b6..59d9bc1111 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/CobInfo.kt @@ -1,9 +1,12 @@ 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.resources.ResourceHelper /** 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 { var cobStringResult = "--g" @@ -15,4 +18,13 @@ class CobInfo(val displayCob: Double?, val futureCarbs: Double) { } return cobStringResult } -} \ No newline at end of file + + 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 +} diff --git a/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt b/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt index 6d7f79d3f6..5ec6da3238 100644 --- a/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt +++ b/core/src/main/java/info/nightscout/androidaps/utils/DateUtil.kt @@ -119,7 +119,7 @@ class DateUtil @Inject constructor(private val context: Context) { return DateTime(mills).toString(DateTimeFormat.forPattern(format)) } - private fun timeStringWithSeconds(mills: Long): String { + fun timeStringWithSeconds(mills: Long): String { var format = "hh:mm:ssa" if (android.text.format.DateFormat.is24HourFormat(context)) { format = "HH:mm:ss"