Wear: optimize loading treed arrow
This commit is contained in:
parent
90b101e77f
commit
ff0d327a15
3 changed files with 5 additions and 88 deletions
|
@ -1,7 +1,6 @@
|
||||||
package app.aaps.core.interfaces.utils
|
package app.aaps.core.interfaces.utils
|
||||||
|
|
||||||
import app.aaps.core.interfaces.aps.AutosensDataStore
|
import app.aaps.core.interfaces.aps.AutosensDataStore
|
||||||
import app.aaps.core.interfaces.iob.InMemoryGlucoseValue
|
|
||||||
import app.aaps.database.entities.GlucoseValue
|
import app.aaps.database.entities.GlucoseValue
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,22 +9,6 @@ import app.aaps.database.entities.GlucoseValue
|
||||||
*/
|
*/
|
||||||
interface TrendCalculator {
|
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
|
* Provide or calculate trend from newest bucketed data
|
||||||
*
|
*
|
||||||
|
@ -34,14 +17,6 @@ interface TrendCalculator {
|
||||||
*/
|
*/
|
||||||
fun getTrendArrow(autosensDataStore: AutosensDataStore): GlucoseValue.TrendArrow?
|
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
|
* Provide or calculate trend from newest bucketed data
|
||||||
*
|
*
|
||||||
|
|
|
@ -3,75 +3,16 @@ package app.aaps.implementation.utils
|
||||||
import app.aaps.core.interfaces.aps.AutosensDataStore
|
import app.aaps.core.interfaces.aps.AutosensDataStore
|
||||||
import app.aaps.core.interfaces.iob.InMemoryGlucoseValue
|
import app.aaps.core.interfaces.iob.InMemoryGlucoseValue
|
||||||
import app.aaps.core.interfaces.resources.ResourceHelper
|
import app.aaps.core.interfaces.resources.ResourceHelper
|
||||||
import app.aaps.core.interfaces.utils.T
|
|
||||||
import app.aaps.core.interfaces.utils.TrendCalculator
|
import app.aaps.core.interfaces.utils.TrendCalculator
|
||||||
import app.aaps.database.entities.GlucoseValue
|
import app.aaps.database.entities.GlucoseValue
|
||||||
import app.aaps.database.impl.AppRepository
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class TrendCalculatorImpl @Inject constructor(
|
class TrendCalculatorImpl @Inject constructor(
|
||||||
private val repository: AppRepository,
|
|
||||||
private val rh: ResourceHelper
|
private val rh: ResourceHelper
|
||||||
) : TrendCalculator {
|
) : 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? {
|
override fun getTrendArrow(autosensDataStore: AutosensDataStore): GlucoseValue.TrendArrow? {
|
||||||
val data = autosensDataStore.getBucketedDataTableCopy() ?: return null
|
val data = autosensDataStore.getBucketedDataTableCopy() ?: return null
|
||||||
if (data.size == 0) return null
|
if (data.size == 0) return null
|
||||||
|
|
|
@ -2,6 +2,7 @@ package app.aaps.plugins.sync.wear.wearintegration
|
||||||
|
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import app.aaps.core.interfaces.aps.AutosensDataStore
|
||||||
import app.aaps.core.interfaces.aps.Loop
|
import app.aaps.core.interfaces.aps.Loop
|
||||||
import app.aaps.core.interfaces.configuration.Config
|
import app.aaps.core.interfaces.configuration.Config
|
||||||
import app.aaps.core.interfaces.configuration.Constants
|
import app.aaps.core.interfaces.configuration.Constants
|
||||||
|
@ -741,7 +742,7 @@ class DataHandlerMobile @Inject constructor(
|
||||||
fun resendData(from: String) {
|
fun resendData(from: String) {
|
||||||
aapsLogger.debug(LTag.WEAR, "Sending data to wear from $from")
|
aapsLogger.debug(LTag.WEAR, "Sending data to wear from $from")
|
||||||
// SingleBg
|
// SingleBg
|
||||||
iobCobCalculator.ads.lastBg()?.let { rxBus.send(EventMobileToWear(getSingleBG(it))) }
|
iobCobCalculator.ads.lastBg()?.let { rxBus.send(EventMobileToWear(getSingleBG(it, iobCobCalculator.ads))) }
|
||||||
// Preferences
|
// Preferences
|
||||||
rxBus.send(
|
rxBus.send(
|
||||||
EventMobileToWear(
|
EventMobileToWear(
|
||||||
|
@ -769,7 +770,7 @@ class DataHandlerMobile @Inject constructor(
|
||||||
)
|
)
|
||||||
// GraphData
|
// GraphData
|
||||||
iobCobCalculator.ads.getBucketedDataTableCopy()?.let { bucketedData ->
|
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
|
// Treatments
|
||||||
sendTreatments()
|
sendTreatments()
|
||||||
|
@ -969,7 +970,7 @@ class DataHandlerMobile @Inject constructor(
|
||||||
return deltaStringDetailed
|
return deltaStringDetailed
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSingleBG(glucoseValue: InMemoryGlucoseValue): EventData.SingleBg {
|
private fun getSingleBG(glucoseValue: InMemoryGlucoseValue, autosensDataStore: AutosensDataStore?): EventData.SingleBg {
|
||||||
val glucoseStatus = glucoseStatusProvider.getGlucoseStatusData(true)
|
val glucoseStatus = glucoseStatusProvider.getGlucoseStatusData(true)
|
||||||
val units = profileFunction.getUnits()
|
val units = profileFunction.getUnits()
|
||||||
val lowLine = profileUtil.convertToMgdl(defaultValueHelper.determineLowLine(), units)
|
val lowLine = profileUtil.convertToMgdl(defaultValueHelper.determineLowLine(), units)
|
||||||
|
@ -979,7 +980,7 @@ class DataHandlerMobile @Inject constructor(
|
||||||
timeStamp = glucoseValue.timestamp,
|
timeStamp = glucoseValue.timestamp,
|
||||||
sgvString = profileUtil.stringInCurrentUnitsDetect(glucoseValue.value),
|
sgvString = profileUtil.stringInCurrentUnitsDetect(glucoseValue.value),
|
||||||
glucoseUnits = units.asText,
|
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) } ?: "--",
|
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) } ?: "--",
|
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) } ?: "--",
|
avgDelta = glucoseStatus?.let { deltaString(it.shortAvgDelta, it.shortAvgDelta * Constants.MGDL_TO_MMOLL, units) } ?: "--",
|
||||||
|
|
Loading…
Reference in a new issue