From ff0d327a157cbbf58328be70f0094829d13050e5 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 27 Oct 2023 13:45:35 +0200 Subject: [PATCH] Wear: optimize loading treed arrow --- .../core/interfaces/utils/TrendCalculator.kt | 25 -------- .../utils/TrendCalculatorImpl.kt | 59 ------------------- .../wear/wearintegration/DataHandlerMobile.kt | 9 +-- 3 files changed, 5 insertions(+), 88 deletions(-) diff --git a/core/interfaces/src/main/kotlin/app/aaps/core/interfaces/utils/TrendCalculator.kt b/core/interfaces/src/main/kotlin/app/aaps/core/interfaces/utils/TrendCalculator.kt index 9e13b843f4..5959c42ab3 100644 --- a/core/interfaces/src/main/kotlin/app/aaps/core/interfaces/utils/TrendCalculator.kt +++ b/core/interfaces/src/main/kotlin/app/aaps/core/interfaces/utils/TrendCalculator.kt @@ -1,7 +1,6 @@ package app.aaps.core.interfaces.utils import app.aaps.core.interfaces.aps.AutosensDataStore -import app.aaps.core.interfaces.iob.InMemoryGlucoseValue import app.aaps.database.entities.GlucoseValue /** @@ -10,22 +9,6 @@ import app.aaps.database.entities.GlucoseValue */ interface TrendCalculator { - /** - * Provide or calculate trend - * - * @param glucoseValue BG - * @return TrendArrow - */ - fun getTrendArrow(glucoseValue: GlucoseValue?): GlucoseValue.TrendArrow - - /** - * Provide or calculate trend - * - * @param glucoseValue BG - * @return TrendArrow - */ - fun getTrendArrow(glucoseValue: InMemoryGlucoseValue?): GlucoseValue.TrendArrow - /** * Provide or calculate trend from newest bucketed data * @@ -34,14 +17,6 @@ interface TrendCalculator { */ fun getTrendArrow(autosensDataStore: AutosensDataStore): GlucoseValue.TrendArrow? - /** - * Provide or calculate trend - * - * @param glucoseValue BG - * @return string description of TrendArrow - */ - fun getTrendDescription(glucoseValue: GlucoseValue?): String - /** * Provide or calculate trend from newest bucketed data * diff --git a/implementation/src/main/kotlin/app/aaps/implementation/utils/TrendCalculatorImpl.kt b/implementation/src/main/kotlin/app/aaps/implementation/utils/TrendCalculatorImpl.kt index c96b2d1e53..9146154dea 100644 --- a/implementation/src/main/kotlin/app/aaps/implementation/utils/TrendCalculatorImpl.kt +++ b/implementation/src/main/kotlin/app/aaps/implementation/utils/TrendCalculatorImpl.kt @@ -3,75 +3,16 @@ package app.aaps.implementation.utils import app.aaps.core.interfaces.aps.AutosensDataStore import app.aaps.core.interfaces.iob.InMemoryGlucoseValue import app.aaps.core.interfaces.resources.ResourceHelper -import app.aaps.core.interfaces.utils.T import app.aaps.core.interfaces.utils.TrendCalculator import app.aaps.database.entities.GlucoseValue -import app.aaps.database.impl.AppRepository import javax.inject.Inject import javax.inject.Singleton @Singleton class TrendCalculatorImpl @Inject constructor( - private val repository: AppRepository, private val rh: ResourceHelper ) : TrendCalculator { - override fun getTrendArrow(glucoseValue: GlucoseValue?): GlucoseValue.TrendArrow = - when { - glucoseValue?.trendArrow == null -> GlucoseValue.TrendArrow.NONE - glucoseValue.trendArrow != GlucoseValue.TrendArrow.NONE -> glucoseValue.trendArrow - else -> calculateDirection(InMemoryGlucoseValue(glucoseValue)) - } - - override fun getTrendArrow(glucoseValue: InMemoryGlucoseValue?): GlucoseValue.TrendArrow = - when { - glucoseValue?.trendArrow == null -> GlucoseValue.TrendArrow.NONE - glucoseValue.trendArrow != GlucoseValue.TrendArrow.NONE -> glucoseValue.trendArrow - else -> calculateDirection(glucoseValue) - } - - override fun getTrendDescription(glucoseValue: GlucoseValue?): String = - when (getTrendArrow(glucoseValue)) { - GlucoseValue.TrendArrow.DOUBLE_DOWN -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_double_down) - GlucoseValue.TrendArrow.SINGLE_DOWN -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_single_down) - GlucoseValue.TrendArrow.FORTY_FIVE_DOWN -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_forty_five_down) - GlucoseValue.TrendArrow.FLAT -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_flat) - GlucoseValue.TrendArrow.FORTY_FIVE_UP -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_forty_five_up) - GlucoseValue.TrendArrow.SINGLE_UP -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_single_up) - GlucoseValue.TrendArrow.DOUBLE_UP -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_double_up) - GlucoseValue.TrendArrow.NONE -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_none) - else -> rh.gs(app.aaps.core.ui.R.string.a11y_arrow_unknown) - } - - private fun calculateDirection(glucoseValue: InMemoryGlucoseValue): GlucoseValue.TrendArrow { - - val toTime = glucoseValue.timestamp - val readings = repository.compatGetBgReadingsDataFromTime(toTime - T.mins(10).msecs(), toTime, false).blockingGet() - - if (readings.size < 2) - return GlucoseValue.TrendArrow.NONE - val current = readings[0] - val previous = readings[1] - - // Avoid division by 0 - val slope = - if (current.timestamp == previous.timestamp) 0.0 - else (previous.value - current.value) / (previous.timestamp - current.timestamp) - - val slopeByMinute = slope * 60000 - - return when { - slopeByMinute <= -3.5 -> GlucoseValue.TrendArrow.DOUBLE_DOWN - slopeByMinute <= -2 -> GlucoseValue.TrendArrow.SINGLE_DOWN - slopeByMinute <= -1 -> GlucoseValue.TrendArrow.FORTY_FIVE_DOWN - slopeByMinute <= 1 -> GlucoseValue.TrendArrow.FLAT - slopeByMinute <= 2 -> GlucoseValue.TrendArrow.FORTY_FIVE_UP - slopeByMinute <= 3.5 -> GlucoseValue.TrendArrow.SINGLE_UP - slopeByMinute <= 40 -> GlucoseValue.TrendArrow.DOUBLE_UP - else -> GlucoseValue.TrendArrow.NONE - } - } - override fun getTrendArrow(autosensDataStore: AutosensDataStore): GlucoseValue.TrendArrow? { val data = autosensDataStore.getBucketedDataTableCopy() ?: return null if (data.size == 0) return null diff --git a/plugins/sync/src/main/kotlin/app/aaps/plugins/sync/wear/wearintegration/DataHandlerMobile.kt b/plugins/sync/src/main/kotlin/app/aaps/plugins/sync/wear/wearintegration/DataHandlerMobile.kt index 927e891e67..a967c33b82 100644 --- a/plugins/sync/src/main/kotlin/app/aaps/plugins/sync/wear/wearintegration/DataHandlerMobile.kt +++ b/plugins/sync/src/main/kotlin/app/aaps/plugins/sync/wear/wearintegration/DataHandlerMobile.kt @@ -2,6 +2,7 @@ package app.aaps.plugins.sync.wear.wearintegration import android.app.NotificationManager import android.content.Context +import app.aaps.core.interfaces.aps.AutosensDataStore import app.aaps.core.interfaces.aps.Loop import app.aaps.core.interfaces.configuration.Config import app.aaps.core.interfaces.configuration.Constants @@ -741,7 +742,7 @@ class DataHandlerMobile @Inject constructor( fun resendData(from: String) { aapsLogger.debug(LTag.WEAR, "Sending data to wear from $from") // SingleBg - iobCobCalculator.ads.lastBg()?.let { rxBus.send(EventMobileToWear(getSingleBG(it))) } + iobCobCalculator.ads.lastBg()?.let { rxBus.send(EventMobileToWear(getSingleBG(it, iobCobCalculator.ads))) } // Preferences rxBus.send( EventMobileToWear( @@ -769,7 +770,7 @@ class DataHandlerMobile @Inject constructor( ) // GraphData iobCobCalculator.ads.getBucketedDataTableCopy()?.let { bucketedData -> - rxBus.send(EventMobileToWear(EventData.GraphData(ArrayList(bucketedData.map { getSingleBG(it) })))) + rxBus.send(EventMobileToWear(EventData.GraphData(ArrayList(bucketedData.map { getSingleBG(it, null) })))) } // Treatments sendTreatments() @@ -969,7 +970,7 @@ class DataHandlerMobile @Inject constructor( return deltaStringDetailed } - private fun getSingleBG(glucoseValue: InMemoryGlucoseValue): EventData.SingleBg { + private fun getSingleBG(glucoseValue: InMemoryGlucoseValue, autosensDataStore: AutosensDataStore?): EventData.SingleBg { val glucoseStatus = glucoseStatusProvider.getGlucoseStatusData(true) val units = profileFunction.getUnits() val lowLine = profileUtil.convertToMgdl(defaultValueHelper.determineLowLine(), units) @@ -979,7 +980,7 @@ class DataHandlerMobile @Inject constructor( timeStamp = glucoseValue.timestamp, sgvString = profileUtil.stringInCurrentUnitsDetect(glucoseValue.value), glucoseUnits = units.asText, - slopeArrow = trendCalculator.getTrendArrow(glucoseValue).symbol, + slopeArrow = (autosensDataStore?.let { ads -> trendCalculator.getTrendArrow(ads) } ?: GlucoseValue.TrendArrow.NONE).symbol, delta = glucoseStatus?.let { deltaString(it.delta, it.delta * Constants.MGDL_TO_MMOLL, units) } ?: "--", deltaDetailed = glucoseStatus?.let { deltaStringDetailed(it.delta, it.delta * Constants.MGDL_TO_MMOLL, units) } ?: "--", avgDelta = glucoseStatus?.let { deltaString(it.shortAvgDelta, it.shortAvgDelta * Constants.MGDL_TO_MMOLL, units) } ?: "--",