:core:graph
This commit is contained in:
parent
cb9ea1d06b
commit
fda8498c8e
168 changed files with 799 additions and 568 deletions
|
@ -188,6 +188,7 @@ dependencies {
|
|||
implementation project(':app-wear-shared:shared')
|
||||
implementation project(':app-wear-shared:shared-impl')
|
||||
implementation project(':core:core-main')
|
||||
implementation project(':core:graph')
|
||||
implementation project(':core:utils')
|
||||
implementation project(':core:ui')
|
||||
implementation project(':interfaces')
|
||||
|
|
|
@ -17,11 +17,11 @@ import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
|
|||
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewGraph
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.rx.AapsSchedulers
|
||||
import info.nightscout.rx.events.EventAutosensCalculationFinished
|
||||
import info.nightscout.rx.events.EventCustomCalculationFinished
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
package info.nightscout.androidaps.activities
|
||||
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.implementation.overview.OverviewDataImpl
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.rx.AapsSchedulers
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
|
@ -41,7 +42,7 @@ class HistoryBrowserData @Inject constructor(
|
|||
init {
|
||||
// We don't want to use injected singletons but own instance working on top of different data
|
||||
overviewData =
|
||||
OverviewData(
|
||||
OverviewDataImpl(
|
||||
aapsLogger,
|
||||
rh,
|
||||
dateUtil,
|
||||
|
|
|
@ -31,7 +31,6 @@ import info.nightscout.androidaps.plugins.pump.eopatch.EopatchPumpPlugin
|
|||
import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin
|
||||
import info.nightscout.automation.AutomationPlugin
|
||||
import info.nightscout.core.profile.toCurrentUnits
|
||||
import info.nightscout.core.ui.dialogs.OKDialog
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.plugin.PluginBase
|
||||
|
|
|
@ -15,9 +15,9 @@ import info.nightscout.androidaps.diaconn.database.DiaconnHistoryDatabase
|
|||
import info.nightscout.androidaps.insight.database.InsightDatabase
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.general.maintenance.activities.LogSettingActivity
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.dash.history.database.DashHistoryDatabase
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryDatabase
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.ui.dialogs.OKDialog
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.database.entities.UserEntry.Action
|
||||
|
|
|
@ -42,12 +42,9 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOve
|
|||
import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.androidaps.plugins.pump.omnipod.eros.OmnipodErosPumpPlugin
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.automation.AutomationPlugin
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.iob.displayText
|
||||
import info.nightscout.core.profile.toSignedUnitsString
|
||||
import info.nightscout.core.profile.toTargetRangeString
|
||||
import info.nightscout.core.profile.toUnits
|
||||
import info.nightscout.core.ui.UIRunnable
|
||||
import info.nightscout.core.ui.dialogs.OKDialog
|
||||
import info.nightscout.core.ui.elements.SingleClickButton
|
||||
|
@ -67,6 +64,7 @@ import info.nightscout.interfaces.constraints.Constraints
|
|||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.plugin.PluginBase
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.protection.ProtectionCheck
|
||||
|
@ -555,7 +553,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
|||
binding.buttonsLayout.quickWizardButton.visibility = View.VISIBLE
|
||||
val wizard = quickWizardEntry.doCalc(profile, profileName, lastBG, false)
|
||||
binding.buttonsLayout.quickWizardButton.text = quickWizardEntry.buttonText() + "\n" + rh.gs(R.string.format_carbs, quickWizardEntry.carbs()) +
|
||||
" " + rh.gs(R.string.formatinsulinunits, wizard.calculatedTotalInsulin)
|
||||
" " + rh.gs(R.string.format_insulin_units, wizard.calculatedTotalInsulin)
|
||||
if (wizard.calculatedTotalInsulin <= 0) binding.buttonsLayout.quickWizardButton.visibility = View.GONE
|
||||
} else binding.buttonsLayout.quickWizardButton.visibility = View.GONE
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNo
|
|||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventUpdateOverviewCalcProgress
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.ui.dialogs.OKDialog
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.interfaces.Config
|
||||
|
|
|
@ -9,16 +9,14 @@ import com.jjoe64.graphview.series.LineGraphSeries
|
|||
import com.jjoe64.graphview.series.Series
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.AreaGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.BolusDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DoubleDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.EffectiveProfileSwitchDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.TimeAsXAxisLabelFormatter
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.BolusDataPoint
|
||||
import info.nightscout.core.graph.data.EffectiveProfileSwitchDataPoint
|
||||
import info.nightscout.core.graph.data.GlucoseValueDataPoint
|
||||
import info.nightscout.core.graph.data.TimeAsXAxisLabelFormatter
|
||||
import info.nightscout.core.ui.toast.ToastUtils
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
import info.nightscout.rx.logging.AAPSLogger
|
||||
|
@ -66,10 +64,10 @@ class GraphData(
|
|||
|
||||
fun addInRangeArea(fromTime: Long, toTime: Long, lowLine: Double, highLine: Double) {
|
||||
val inRangeAreaDataPoints = arrayOf(
|
||||
DoubleDataPoint(fromTime.toDouble(), lowLine, highLine),
|
||||
DoubleDataPoint(toTime.toDouble(), lowLine, highLine)
|
||||
info.nightscout.core.graph.data.DoubleDataPoint(fromTime.toDouble(), lowLine, highLine),
|
||||
info.nightscout.core.graph.data.DoubleDataPoint(toTime.toDouble(), lowLine, highLine)
|
||||
)
|
||||
addSeries(AreaGraphSeries(inRangeAreaDataPoints).also {
|
||||
addSeries(info.nightscout.core.graph.data.AreaGraphSeries(inRangeAreaDataPoints).also {
|
||||
it.color = 0
|
||||
it.isDrawBackground = true
|
||||
it.backgroundColor = rh.gac(graph.context, R.attr.inRangeBackground)
|
||||
|
|
|
@ -11,10 +11,8 @@ import info.nightscout.androidaps.R
|
|||
import info.nightscout.androidaps.extensions.toStringShort
|
||||
import info.nightscout.androidaps.extensions.valueToUnitsString
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.core.iob.generateCOBString
|
||||
import info.nightscout.core.iob.round
|
||||
import info.nightscout.core.profile.toSignedUnitsString
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.NotificationHolder
|
||||
|
@ -26,6 +24,7 @@ import info.nightscout.interfaces.plugin.PluginType
|
|||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.ui.IconsProvider
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.rx.AapsSchedulers
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
import info.nightscout.rx.events.EventAutosensCalculationFinished
|
||||
|
|
|
@ -10,19 +10,14 @@ import info.nightscout.androidaps.extensions.total
|
|||
import info.nightscout.androidaps.extensions.valueToUnits
|
||||
import info.nightscout.androidaps.extensions.valueToUnitsString
|
||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.core.utils.receivers.ReceiverStatusStore
|
||||
import info.nightscout.androidaps.services.AlarmSoundServiceHelper
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.graph.data.GlucoseValueDataPoint
|
||||
import info.nightscout.core.iob.generateCOBString
|
||||
import info.nightscout.core.iob.round
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.profile.toMgdl
|
||||
import info.nightscout.core.profile.toTargetRangeString
|
||||
import info.nightscout.core.ui.toast.ToastUtils
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.core.utils.receivers.ReceiverStatusStore
|
||||
import info.nightscout.core.wizard.BolusWizard
|
||||
import info.nightscout.core.wizard.QuickWizard
|
||||
import info.nightscout.core.wizard.QuickWizardEntry
|
||||
|
@ -47,11 +42,13 @@ import info.nightscout.interfaces.constraints.Constraints
|
|||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.plugin.PluginBase
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.pump.DetailedBolusInfo
|
||||
import info.nightscout.interfaces.queue.Callback
|
||||
import info.nightscout.interfaces.queue.CommandQueue
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.HardLimits
|
||||
import info.nightscout.interfaces.utils.TrendCalculator
|
||||
import info.nightscout.plugins.sync.nsclient.data.ProcessedDeviceStatusData
|
||||
|
|
|
@ -18,14 +18,14 @@ import dagger.android.AndroidInjection
|
|||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.general.wear.WearPlugin
|
||||
import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui
|
||||
import info.nightscout.core.utils.receivers.ReceiverStatusStore
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.core.utils.receivers.ReceiverStatusStore
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.aps.Loop
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.rx.AapsSchedulers
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
|
|
|
@ -10,9 +10,8 @@ import info.nightscout.androidaps.events.EventNewHistoryData
|
|||
import info.nightscout.androidaps.extensions.convertedToAbsolute
|
||||
import info.nightscout.androidaps.extensions.iobCalc
|
||||
import info.nightscout.androidaps.extensions.toTemporaryBasal
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.iob.combine
|
||||
import info.nightscout.core.iob.copy
|
||||
import info.nightscout.core.iob.determineBasalJson
|
||||
|
@ -40,6 +39,7 @@ import info.nightscout.interfaces.plugin.PluginDescription
|
|||
import info.nightscout.interfaces.plugin.PluginType
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.MidnightTime
|
||||
import info.nightscout.rx.AapsSchedulers
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
|
|
|
@ -11,7 +11,6 @@ import info.nightscout.androidaps.extensions.target
|
|||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensDataObject
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
|
@ -26,6 +25,7 @@ import info.nightscout.interfaces.notifications.Notification
|
|||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.profiling.Profiler
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
import info.nightscout.rx.events.Event
|
||||
import info.nightscout.rx.events.EventAutosensCalculationFinished
|
||||
|
|
|
@ -10,7 +10,6 @@ import info.nightscout.androidaps.R
|
|||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensDataObject
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.workflow.CalculationWorkflow
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
|
@ -24,6 +23,7 @@ import info.nightscout.interfaces.notifications.Notification
|
|||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.profiling.Profiler
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
import info.nightscout.rx.events.Event
|
||||
import info.nightscout.rx.events.EventAutosensCalculationFinished
|
||||
|
|
|
@ -11,10 +11,10 @@ import androidx.work.WorkManager
|
|||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.events.EventNewHistoryData
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOref1Worker
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobOrefWorker
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
|
|
|
@ -9,9 +9,9 @@ import androidx.work.workDataOf
|
|||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ScaledDataPoint
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.ScaledDataPoint
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
|
@ -28,7 +28,7 @@ class PrepareBasalDataWorker(
|
|||
@Inject lateinit var profileFunction: ProfileFunction
|
||||
@Inject lateinit var rh: ResourceHelper
|
||||
@Inject lateinit var rxBus: RxBus
|
||||
var ctx: Context
|
||||
private var ctx: Context
|
||||
init {
|
||||
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
|
||||
ctx = rh.getThemedCtx(context)
|
||||
|
|
|
@ -5,16 +5,15 @@ import androidx.work.Worker
|
|||
import androidx.work.WorkerParameters
|
||||
import androidx.work.workDataOf
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.GlucoseValueDataPoint
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
|
|
|
@ -5,10 +5,10 @@ import androidx.work.Worker
|
|||
import androidx.work.WorkerParameters
|
||||
import androidx.work.workDataOf
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.InMemoryGlucoseValueDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.InMemoryGlucoseValueDataPoint
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
|
|
|
@ -10,19 +10,19 @@ import com.jjoe64.graphview.series.BarGraphSeries
|
|||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DeviationDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.FixedLineGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ScaledDataPoint
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.data.AutosensDataObject
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.DeviationDataPoint
|
||||
import info.nightscout.core.graph.data.FixedLineGraphSeries
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.data.Scale
|
||||
import info.nightscout.core.graph.data.ScaledDataPoint
|
||||
import info.nightscout.core.iob.combine
|
||||
import info.nightscout.core.iob.copy
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.database.impl.ValueWrapper
|
||||
import info.nightscout.interfaces.aps.AutosensResult
|
||||
|
@ -30,6 +30,7 @@ import info.nightscout.interfaces.aps.SMBDefaults
|
|||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.iob.IobTotal
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
import info.nightscout.rx.logging.AAPSLogger
|
||||
import info.nightscout.rx.logging.LTag
|
||||
|
@ -53,7 +54,7 @@ class PrepareIobAutosensGraphDataWorker(
|
|||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var repository: AppRepository
|
||||
@Inject lateinit var rxBus: RxBus
|
||||
var ctx: Context
|
||||
private var ctx: Context
|
||||
|
||||
init {
|
||||
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
|
||||
|
@ -96,6 +97,25 @@ class PrepareIobAutosensGraphDataWorker(
|
|||
}
|
||||
}
|
||||
|
||||
class AutosensDataPoint(
|
||||
private val ad: AutosensDataObject,
|
||||
private val scale: Scale,
|
||||
private val chartTime: Long,
|
||||
private val rh: ResourceHelper
|
||||
) : DataPointWithLabelInterface {
|
||||
|
||||
override fun getX(): Double = chartTime.toDouble()
|
||||
override fun getY(): Double = scale.transform(ad.cob)
|
||||
override fun setY(y: Double) {}
|
||||
override val label: String = ""
|
||||
override val duration = 0L
|
||||
override val shape = PointsWithLabelGraphSeries.Shape.COB_FAIL_OVER
|
||||
override val size = 0.5f
|
||||
override fun color(context: Context?): Int {
|
||||
return rh.gac(context, R.attr.cobColor)
|
||||
}
|
||||
}
|
||||
|
||||
override fun doWork(): Result {
|
||||
val data = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as PrepareIobAutosensData?
|
||||
?: return Result.failure(workDataOf("Error" to "missing input data"))
|
||||
|
@ -171,9 +191,7 @@ class PrepareIobAutosensGraphDataWorker(
|
|||
lastCob = cob
|
||||
}
|
||||
if (autosensData.failOverToMinAbsorptionRate) {
|
||||
autosensData.scale = data.overviewData.cobScale
|
||||
autosensData.chartTime = time
|
||||
minFailOverActiveList.add(autosensData)
|
||||
minFailOverActiveList.add(AutosensDataPoint(autosensData, data.overviewData.cobScale, time, rh))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,16 +5,16 @@ import androidx.work.Worker
|
|||
import androidx.work.WorkerParameters
|
||||
import androidx.work.workDataOf
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewMenus
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.GlucoseValueDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.GlucoseValueDataPoint
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.aps.Loop
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.plugins.sync.nsclient.data.ProcessedDeviceStatusData
|
||||
import info.nightscout.rx.bus.RxBus
|
||||
|
|
|
@ -9,10 +9,9 @@ import com.jjoe64.graphview.series.LineGraphSeries
|
|||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.R
|
||||
import info.nightscout.androidaps.extensions.target
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.database.impl.ValueWrapper
|
||||
import info.nightscout.interfaces.aps.Loop
|
||||
|
|
|
@ -5,24 +5,23 @@ import androidx.work.Worker
|
|||
import androidx.work.WorkerParameters
|
||||
import androidx.work.workDataOf
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.OverviewData
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.BolusDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.CarbsDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.EffectiveProfileSwitchDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ExtendedBolusDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.TherapyEventDataPoint
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventIobCalculationProgress
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.BolusDataPoint
|
||||
import info.nightscout.core.graph.data.CarbsDataPoint
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.EffectiveProfileSwitchDataPoint
|
||||
import info.nightscout.core.graph.data.ExtendedBolusDataPoint
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.data.TherapyEventDataPoint
|
||||
import info.nightscout.core.utils.receivers.DataWorkerStorage
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.database.entities.Bolus
|
||||
import info.nightscout.database.entities.TherapyEvent
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.Translator
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
|
|
|
@ -8,7 +8,6 @@ import info.nightscout.androidaps.extensions.shiftTargetBlock
|
|||
import info.nightscout.androidaps.extensions.targetBlockValueBySeconds
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.toMgdl
|
||||
import info.nightscout.core.utils.MidnightUtils
|
||||
import info.nightscout.database.entities.EffectiveProfileSwitch
|
||||
import info.nightscout.database.entities.ProfileSwitch
|
||||
|
|
|
@ -2,7 +2,6 @@ package info.nightscout.androidaps.extensions
|
|||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonSyntaxException
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.database.entities.BolusCalculatorResult
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package info.nightscout.androidaps.extensions
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.database.entities.Bolus
|
||||
import info.nightscout.database.entities.ExtendedBolus
|
||||
import info.nightscout.database.entities.TemporaryBasal
|
||||
|
@ -9,6 +8,7 @@ import info.nightscout.interfaces.aps.AutosensResult
|
|||
import info.nightscout.interfaces.insulin.Insulin
|
||||
import info.nightscout.interfaces.iob.IobTotal
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import info.nightscout.shared.utils.T
|
||||
import kotlin.math.ceil
|
||||
|
@ -30,8 +30,6 @@ fun ExtendedBolus.toStringFull(dateUtil: DateUtil): String =
|
|||
fun ExtendedBolus.toStringMedium(dateUtil: DateUtil): String =
|
||||
DecimalFormatter.to2Decimal(rate) + "U/h " + getPassedDurationToTimeInMinutes(dateUtil.now()) + "/" + T.msecs(duration).mins() + "'"
|
||||
|
||||
fun ExtendedBolus.toStringTotal(): String = "${DecimalFormatter.to2Decimal(amount)}U ( ${DecimalFormatter.to2Decimal(rate)} U/h )"
|
||||
|
||||
fun ExtendedBolus.getPassedDurationToTimeInMinutes(time: Long): Int =
|
||||
((min(time, end) - timestamp) / 60.0 / 1000).roundToInt()
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package info.nightscout.androidaps.extensions
|
||||
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.database.entities.GlucoseValue
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import org.json.JSONObject
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package info.nightscout.androidaps.extensions
|
||||
|
||||
import info.nightscout.androidaps.data.ProfileSealed
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.database.entities.ProfileSwitch
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.PureProfile
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.JsonHelper
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import info.nightscout.shared.utils.T
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package info.nightscout.androidaps.extensions
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.database.entities.Bolus
|
||||
import info.nightscout.database.entities.TemporaryBasal
|
||||
import info.nightscout.database.entities.interfaces.end
|
||||
|
@ -8,6 +7,7 @@ import info.nightscout.interfaces.aps.AutosensResult
|
|||
import info.nightscout.interfaces.insulin.Insulin
|
||||
import info.nightscout.interfaces.iob.IobTotal
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import info.nightscout.shared.utils.T
|
||||
import kotlin.math.ceil
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package info.nightscout.androidaps.extensions
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.toTargetRangeString
|
||||
import info.nightscout.database.entities.TemporaryTarget
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
|
|
@ -37,9 +37,9 @@ fun TotalDailyDose.toTableRow(context: Context, rh: ResourceHelper, dateUtil: Da
|
|||
row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)
|
||||
row.gravity = Gravity.CENTER_HORIZONTAL
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = dateUtil.dateStringShort(timestamp) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(R.string.formatinsulinunits1, total) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(R.string.formatinsulinunits1, bolusAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(R.string.formatinsulinunits1, basalAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(R.string.format_insulin_units1, total) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(R.string.format_insulin_units1, bolusAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(R.string.format_insulin_units1, basalAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 4 }; text = rh.gs(R.string.formatPercent, basalPct) })
|
||||
if (includeCarbs)
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 5 }; text = rh.gs(R.string.format_carbs, carbs.toInt()) })
|
||||
|
@ -54,9 +54,9 @@ fun TotalDailyDose.toTableRow(context: Context, rh: ResourceHelper, days: Int, i
|
|||
row.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)
|
||||
row.gravity = Gravity.CENTER_HORIZONTAL
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 0 }; text = "%02d".format(days) + " " + rh.gs(R.string.days) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(R.string.formatinsulinunits1, total) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(R.string.formatinsulinunits1, bolusAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(R.string.formatinsulinunits1, basalAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 1 }; text = rh.gs(R.string.format_insulin_units1, total) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 2 }; text = rh.gs(R.string.format_insulin_units1, bolusAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 3 }; text = rh.gs(R.string.format_insulin_units1, basalAmount) })
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 4 }; text = rh.gs(R.string.formatPercent, basalPct) })
|
||||
if (includeCarbs)
|
||||
row.addView(TextView(context).apply { gravity = Gravity.CENTER_HORIZONTAL; layoutParams = lp.apply { column = 5 }; text = rh.gs(R.string.format_carbs, carbs.toInt()) })
|
||||
|
|
|
@ -4,7 +4,6 @@ import android.text.Spanned
|
|||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.extensions.convertedToAbsolute
|
||||
import info.nightscout.androidaps.extensions.convertedToPercent
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.database.entities.GlucoseValue
|
||||
import info.nightscout.interfaces.aps.APSResult
|
||||
|
@ -15,6 +14,7 @@ import info.nightscout.interfaces.iob.IobTotal
|
|||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.pump.defs.PumpDescription
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.HtmlHelper.fromHtml
|
||||
import info.nightscout.rx.logging.AAPSLogger
|
||||
import info.nightscout.rx.logging.LTag
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package info.nightscout.androidaps.plugins.iob.iobCobCalculator.data
|
||||
|
||||
import android.content.Context
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Scale
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.aps.AutosensData
|
||||
|
@ -19,7 +15,7 @@ import java.util.Locale
|
|||
import javax.inject.Inject
|
||||
import kotlin.math.min
|
||||
|
||||
class AutosensDataObject(injector: HasAndroidInjector) : DataPointWithLabelInterface, AutosensData {
|
||||
class AutosensDataObject(injector: HasAndroidInjector) : AutosensData {
|
||||
|
||||
@Inject lateinit var aapsLogger: AAPSLogger
|
||||
@Inject lateinit var sp: SP
|
||||
|
@ -29,7 +25,6 @@ class AutosensDataObject(injector: HasAndroidInjector) : DataPointWithLabelInter
|
|||
|
||||
override var time = 0L
|
||||
override var bg = 0.0 // mgdl
|
||||
var chartTime: Long = 0
|
||||
override var pastSensitivity = ""
|
||||
override var deviation = 0.0
|
||||
override var validDeviation = false
|
||||
|
@ -121,22 +116,6 @@ class AutosensDataObject(injector: HasAndroidInjector) : DataPointWithLabelInter
|
|||
i++
|
||||
}
|
||||
}
|
||||
|
||||
// ------- DataPointWithLabelInterface ------
|
||||
var scale: Scale? = null
|
||||
|
||||
override fun getX(): Double = chartTime.toDouble()
|
||||
override fun getY(): Double = scale!!.transform(cob)
|
||||
|
||||
override fun setY(y: Double) {}
|
||||
override val label: String = ""
|
||||
override val duration = 0L
|
||||
override val shape = PointsWithLabelGraphSeries.Shape.COB_FAIL_OVER
|
||||
override val size = 0.5f
|
||||
override fun color(context: Context?): Int {
|
||||
return rh.gac(context,R.attr.cobColor)
|
||||
}
|
||||
|
||||
init {
|
||||
injector.androidInjector().inject(this)
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ import info.nightscout.androidaps.utils.textValidator.validators.RegexpValidator
|
|||
import info.nightscout.androidaps.utils.textValidator.validators.Validator
|
||||
import info.nightscout.androidaps.utils.textValidator.validators.WebUrlValidator
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import javax.inject.Inject
|
||||
|
|
|
@ -6,8 +6,6 @@ import androidx.preference.EditTextPreference
|
|||
import androidx.preference.PreferenceViewHolder
|
||||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.profile.toMgdl
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.shared.SafeParse
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package info.nightscout.androidaps.utils.textValidator.validators
|
||||
|
||||
import android.widget.EditText
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
|
||||
|
|
|
@ -2,10 +2,7 @@ package info.nightscout.androidaps.utils.userEntry
|
|||
|
||||
import android.text.Spanned
|
||||
import dagger.Reusable
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.toUnitsString
|
||||
import info.nightscout.database.entities.UserEntry
|
||||
import info.nightscout.database.entities.UserEntry.Action
|
||||
import info.nightscout.database.entities.UserEntry.ColorGroup
|
||||
|
@ -13,8 +10,10 @@ import info.nightscout.database.entities.UserEntry.Sources
|
|||
import info.nightscout.database.entities.ValueWithUnit
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.Translator
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.HtmlHelper
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package info.nightscout.core.iob
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.interfaces.iob.CobInfo
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.core.iob
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.iob.GlucoseStatus
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
|
||||
fun GlucoseStatus.log(): String = "Glucose: " + DecimalFormatter.to0Decimal(glucose) + " mg/dl " +
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
package info.nightscout.core.profile
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
|
||||
/*
|
||||
* Units conversion
|
||||
*/
|
||||
|
||||
fun Profile.Companion.fromMgdlToUnits(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) value else value * Constants.MGDL_TO_MMOLL
|
||||
|
||||
fun Profile.Companion.fromMmolToUnits(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MMOL) value else value * Constants.MMOLL_TO_MGDL
|
||||
|
||||
fun Profile.Companion.toUnits(valueInMgdl: Double, valueInMmol: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) valueInMgdl else valueInMmol
|
||||
|
||||
fun Profile.Companion.toUnitsString(valueInMgdl: Double, valueInMmol: Double, units: GlucoseUnit): String =
|
||||
if (units == GlucoseUnit.MGDL) DecimalFormatter.to0Decimal(valueInMgdl) else DecimalFormatter.to1Decimal(valueInMmol)
|
||||
|
||||
fun Profile.Companion.toSignedUnitsString(valueInMgdl: Double, valueInMmol: Double, units: GlucoseUnit): String =
|
||||
if (units == GlucoseUnit.MGDL) (if (valueInMgdl > 0) "+" else "") + DecimalFormatter.to0Decimal(valueInMgdl)
|
||||
else (if (valueInMmol > 0) "+" else "") + DecimalFormatter.to1Decimal(valueInMmol)
|
||||
|
||||
fun Profile.Companion.isMgdl(anyBg: Double) = anyBg >= 39
|
||||
fun Profile.Companion.isMmol(anyBg: Double) = anyBg < 39
|
||||
fun Profile.Companion.unit(anyBg: Double) = if (isMgdl(anyBg)) GlucoseUnit.MGDL else GlucoseUnit.MMOL
|
||||
|
||||
fun Profile.Companion.toCurrentUnits(profileFunction: ProfileFunction, anyBg: Double): Double =
|
||||
if (isMmol(anyBg)) fromMmolToUnits(anyBg, profileFunction.getUnits())
|
||||
else fromMgdlToUnits(anyBg, profileFunction.getUnits())
|
||||
|
||||
fun Profile.Companion.toCurrentUnits(units: GlucoseUnit, anyBg: Double): Double =
|
||||
if (isMmol(anyBg)) fromMmolToUnits(anyBg, units)
|
||||
else fromMgdlToUnits(anyBg, units)
|
||||
|
||||
fun Profile.Companion.toCurrentUnitsString(profileFunction: ProfileFunction, anyBg: Double): String =
|
||||
if (isMmol(anyBg)) toUnitsString(anyBg * Constants.MMOLL_TO_MGDL, anyBg, profileFunction.getUnits())
|
||||
else toUnitsString(anyBg, anyBg * Constants.MGDL_TO_MMOLL, profileFunction.getUnits())
|
||||
|
||||
fun Profile.Companion.toMgdl(value: Double): Double =
|
||||
if (isMgdl(value)) value else value * Constants.MMOLL_TO_MGDL
|
||||
|
||||
fun Profile.Companion.toMgdl(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) value else value * Constants.MMOLL_TO_MGDL
|
||||
|
||||
fun Profile.Companion.toMmol(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) value * Constants.MGDL_TO_MMOLL else value
|
||||
|
||||
// targets are stored in mg/dl but profile vary
|
||||
fun Profile.Companion.toTargetRangeString(low: Double, high: Double, sourceUnits: GlucoseUnit, units: GlucoseUnit): String {
|
||||
val lowMgdl = toMgdl(low, sourceUnits)
|
||||
val highMgdl = toMgdl(high, sourceUnits)
|
||||
val lowMmol = toMmol(low, sourceUnits)
|
||||
val highMmol = toMmol(high, sourceUnits)
|
||||
return if (low == high) toUnitsString(lowMgdl, lowMmol, units)
|
||||
else toUnitsString(lowMgdl, lowMmol, units) + " - " + toUnitsString(highMgdl, highMmol, units)
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.core.pump
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.pump.PumpEnactResult
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
|
||||
fun PumpEnactResult.toHtml(rh: ResourceHelper): String {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package info.nightscout.core.pump
|
||||
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.pump.PumpSync
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.utils.DateUtil
|
||||
import info.nightscout.shared.utils.T
|
||||
import kotlin.math.ceil
|
||||
|
|
|
@ -10,8 +10,6 @@ import info.nightscout.androidaps.logging.UserEntryLogger
|
|||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatusProvider
|
||||
import info.nightscout.core.iob.round
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.profile.toMgdl
|
||||
import info.nightscout.core.ui.dialogs.OKDialog
|
||||
import info.nightscout.core.utils.extensions.formatColor
|
||||
import info.nightscout.database.entities.BolusCalculatorResult
|
||||
|
@ -327,7 +325,7 @@ class BolusWizard @Inject constructor(
|
|||
val actions: LinkedList<String> = LinkedList()
|
||||
if (insulinAfterConstraints > 0) {
|
||||
val pct = if (percentageCorrection != 100) " ($percentageCorrection%)" else ""
|
||||
actions.add(rh.gs(R.string.bolus) + ": " + rh.gs(R.string.formatinsulinunits, insulinAfterConstraints).formatColor(context, rh, R.attr.bolusColor) + pct)
|
||||
actions.add(rh.gs(R.string.bolus) + ": " + rh.gs(R.string.format_insulin_units, insulinAfterConstraints).formatColor(context, rh, R.attr.bolusColor) + pct)
|
||||
}
|
||||
if (carbs > 0 && !advisor) {
|
||||
var timeShift = ""
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
<string name="connecting">Connecting</string>
|
||||
<string name="disconnected">Disconnected</string>
|
||||
<string name="androidaps_start">AAPS started</string>
|
||||
<string name="formatinsulinunits1">%1$.1f U</string>
|
||||
<string name="formatinsulinunits">%1$.2f U</string>
|
||||
<string name="formatsignedinsulinunits">%1$+.2f U</string>
|
||||
<string name="format_carbs">%1$d g</string>
|
||||
<string name="reservoirvalue">%1$.0f / %2$d U</string>
|
||||
|
@ -26,7 +24,6 @@
|
|||
<string name="pumpbusy">Pump is busy</string>
|
||||
<string name="connectionerror">Pump connection error</string>
|
||||
<string name="objectives">Objectives</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="please_wait">Please wait…</string>
|
||||
<string name="mute">Mute</string>
|
||||
<string name="reload">Reload</string>
|
||||
|
|
|
@ -5,11 +5,11 @@ import dagger.android.AndroidInjector
|
|||
import dagger.android.HasAndroidInjector
|
||||
import info.nightscout.androidaps.data.ProfileSealed
|
||||
import info.nightscout.androidaps.extensions.pureProfileFromJson
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.profile.ProfileStoreObject
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.profile.ProfileStore
|
||||
|
|
|
@ -7,12 +7,6 @@ import info.nightscout.androidaps.TestBase
|
|||
import info.nightscout.androidaps.TestPumpPlugin
|
||||
import info.nightscout.androidaps.extensions.pureProfileFromJson
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.profile.toMgdl
|
||||
import info.nightscout.core.profile.toMmol
|
||||
import info.nightscout.core.profile.toTargetRangeString
|
||||
import info.nightscout.core.profile.toUnits
|
||||
import info.nightscout.core.profile.toUnitsString
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package info.nightscout.androidaps.utils
|
||||
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
|
||||
|
|
1
core/graph/.gitignore
vendored
Normal file
1
core/graph/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/build
|
28
core/graph/build.gradle
Normal file
28
core/graph/build.gradle
Normal file
|
@ -0,0 +1,28 @@
|
|||
plugins {
|
||||
id 'com.android.library'
|
||||
id 'kotlin-android'
|
||||
id 'kotlin-kapt'
|
||||
id 'kotlin-parcelize'
|
||||
id 'kotlin-allopen'
|
||||
id 'com.hiya.jacoco-android'
|
||||
}
|
||||
|
||||
apply from: "${project.rootDir}/core/core-main/android_dependencies.gradle"
|
||||
apply from: "${project.rootDir}/core/core-main/android_module_dependencies.gradle"
|
||||
apply from: "${project.rootDir}/core/core-main/allopen_dependencies.gradle"
|
||||
apply from: "${project.rootDir}/core/core-main/test_dependencies.gradle"
|
||||
apply from: "${project.rootDir}/core/core-main/jacoco_global.gradle"
|
||||
|
||||
dependencies {
|
||||
implementation project(':graphview')
|
||||
implementation project(':app-wear-shared:shared')
|
||||
implementation project(':database:entities')
|
||||
implementation project(':interfaces')
|
||||
implementation project(':core:ui')
|
||||
|
||||
api "com.google.android.material:material:$material_version"
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'info.nightscout.core.graph'
|
||||
}
|
0
core/graph/consumer-rules.pro
Normal file
0
core/graph/consumer-rules.pro
Normal file
21
core/graph/proguard-rules.pro
vendored
Normal file
21
core/graph/proguard-rules.pro
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
4
core/graph/src/main/AndroidManifest.xml
Normal file
4
core/graph/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest>
|
||||
|
||||
</manifest>
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.utils.ui
|
||||
package info.nightscout.core.graph
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
|
@ -6,7 +6,6 @@ import com.jjoe64.graphview.DefaultLabelFormatter
|
|||
import com.jjoe64.graphview.GraphView
|
||||
import com.jjoe64.graphview.series.DataPoint
|
||||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
import java.text.NumberFormat
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.utils.ui
|
||||
package info.nightscout.core.graph
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
|
@ -6,7 +6,6 @@ import com.jjoe64.graphview.DefaultLabelFormatter
|
|||
import com.jjoe64.graphview.GraphView
|
||||
import com.jjoe64.graphview.series.DataPoint
|
||||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
import java.text.NumberFormat
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.utils.ui
|
||||
package info.nightscout.core.graph
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
|
@ -6,8 +6,8 @@ import com.jjoe64.graphview.DefaultLabelFormatter
|
|||
import com.jjoe64.graphview.GraphView
|
||||
import com.jjoe64.graphview.series.DataPoint
|
||||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
import java.text.NumberFormat
|
||||
|
@ -19,13 +19,16 @@ class IsfProfileGraph : GraphView {
|
|||
constructor(context: Context?) : super(context)
|
||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
|
||||
|
||||
private fun fromMgdlToUnits(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) value else value * Constants.MGDL_TO_MMOLL
|
||||
|
||||
fun show(profile: Profile) {
|
||||
removeAllSeries()
|
||||
val isfArray: MutableList<DataPoint> = ArrayList()
|
||||
var maxIsf = 0.0
|
||||
val units = profile.units
|
||||
for (hour in 0..23) {
|
||||
val isf = Profile.fromMgdlToUnits(profile.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val isf = fromMgdlToUnits(profile.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
maxIsf = max(maxIsf, isf)
|
||||
isfArray.add(DataPoint(hour.toDouble(), isf))
|
||||
isfArray.add(DataPoint((hour + 1).toDouble(), isf))
|
||||
|
@ -59,7 +62,7 @@ class IsfProfileGraph : GraphView {
|
|||
// isf 1
|
||||
val isfArray1: MutableList<DataPoint> = ArrayList()
|
||||
for (hour in 0..23) {
|
||||
val isf = Profile.fromMgdlToUnits(profile1.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val isf = fromMgdlToUnits(profile1.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
minIsf = min(minIsf, isf)
|
||||
maxIsf = max(maxIsf, isf)
|
||||
isfArray1.add(DataPoint(hour.toDouble(), isf))
|
||||
|
@ -73,7 +76,7 @@ class IsfProfileGraph : GraphView {
|
|||
// isf 2
|
||||
val isfArray2: MutableList<DataPoint> = ArrayList()
|
||||
for (hour in 0..23) {
|
||||
val isf = Profile.fromMgdlToUnits(profile2.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val isf = fromMgdlToUnits(profile2.getIsfMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
minIsf = min(minIsf, isf)
|
||||
maxIsf = max(maxIsf, isf)
|
||||
isfArray2.add(DataPoint(hour.toDouble(), isf))
|
|
@ -0,0 +1,151 @@
|
|||
package info.nightscout.core.graph
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.DrawableRes
|
||||
import com.jjoe64.graphview.series.BarGraphSeries
|
||||
import com.jjoe64.graphview.series.DataPoint
|
||||
import com.jjoe64.graphview.series.LineGraphSeries
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.DeviationDataPoint
|
||||
import info.nightscout.core.graph.data.FixedLineGraphSeries
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.data.Scale
|
||||
import info.nightscout.core.graph.data.ScaledDataPoint
|
||||
import info.nightscout.database.entities.GlucoseValue
|
||||
import info.nightscout.database.entities.TemporaryTarget
|
||||
import info.nightscout.interfaces.aps.AutosensData
|
||||
import info.nightscout.interfaces.iob.CobInfo
|
||||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.iob.IobTotal
|
||||
|
||||
interface OverviewData {
|
||||
|
||||
var rangeToDisplay: Int // for graph
|
||||
var toTime: Long
|
||||
var fromTime: Long
|
||||
var endTime: Long
|
||||
|
||||
fun reset()
|
||||
fun initRange()
|
||||
/*
|
||||
* PUMP STATUS
|
||||
*/
|
||||
|
||||
var pumpStatus: String
|
||||
|
||||
/*
|
||||
* CALC PROGRESS
|
||||
*/
|
||||
|
||||
var calcProgressPct: Int
|
||||
|
||||
/*
|
||||
* BG
|
||||
*/
|
||||
|
||||
val lastBg: GlucoseValue?
|
||||
val isLow: Boolean
|
||||
val isHigh: Boolean
|
||||
@ColorInt fun lastBgColor(context: Context?): Int
|
||||
val lastBgDescription: String
|
||||
val isActualBg: Boolean
|
||||
/*
|
||||
* TEMPORARY BASAL
|
||||
*/
|
||||
|
||||
fun temporaryBasalText(iobCobCalculator: IobCobCalculator): String
|
||||
fun temporaryBasalDialogText(iobCobCalculator: IobCobCalculator): String
|
||||
@DrawableRes fun temporaryBasalIcon(iobCobCalculator: IobCobCalculator): Int
|
||||
@AttrRes fun temporaryBasalColor(context: Context?, iobCobCalculator: IobCobCalculator): Int
|
||||
|
||||
/*
|
||||
* EXTENDED BOLUS
|
||||
*/
|
||||
fun extendedBolusText(iobCobCalculator: IobCobCalculator): String
|
||||
fun extendedBolusDialogText(iobCobCalculator: IobCobCalculator): String
|
||||
|
||||
/*
|
||||
* IOB, COB
|
||||
*/
|
||||
fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal
|
||||
fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal
|
||||
fun cobInfo(iobCobCalculator: IobCobCalculator): CobInfo
|
||||
|
||||
val lastCarbsTime: Long
|
||||
fun iobText(iobCobCalculator: IobCobCalculator): String
|
||||
fun iobDialogText(iobCobCalculator: IobCobCalculator): String
|
||||
|
||||
/*
|
||||
* TEMP TARGET
|
||||
*/
|
||||
val temporaryTarget: TemporaryTarget?
|
||||
|
||||
/*
|
||||
* SENSITIVITY
|
||||
*/
|
||||
fun lastAutosensData(iobCobCalculator: IobCobCalculator): AutosensData?
|
||||
/*
|
||||
* Graphs
|
||||
*/
|
||||
|
||||
var bgReadingsArray: List<GlucoseValue>
|
||||
var maxBgValue: Double
|
||||
var bucketedGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
var bgReadingGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
var predictionsGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
|
||||
val basalScale: Scale
|
||||
var baseBasalGraphSeries: LineGraphSeries<ScaledDataPoint>
|
||||
var tempBasalGraphSeries: LineGraphSeries<ScaledDataPoint>
|
||||
var basalLineGraphSeries: LineGraphSeries<ScaledDataPoint>
|
||||
var absoluteBasalGraphSeries: LineGraphSeries<ScaledDataPoint>
|
||||
|
||||
var temporaryTargetSeries: LineGraphSeries<DataPoint>
|
||||
|
||||
var maxIAValue: Double
|
||||
val actScale: Scale
|
||||
var activitySeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
var activityPredictionSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
|
||||
var maxEpsValue: Double
|
||||
val epsScale: Scale
|
||||
var epsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
var maxTreatmentsValue: Double
|
||||
var treatmentsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
var maxTherapyEventValue: Double
|
||||
var therapyEventSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
|
||||
var maxIobValueFound: Double
|
||||
val iobScale: Scale
|
||||
var iobSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
var absIobSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
var iobPredictions1Series: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
|
||||
var maxBGIValue: Double
|
||||
val bgiScale: Scale
|
||||
var minusBgiSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
var minusBgiHistSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
|
||||
var maxCobValueFound: Double
|
||||
val cobScale: Scale
|
||||
var cobSeries: FixedLineGraphSeries<ScaledDataPoint>
|
||||
var cobMinFailOverSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface>
|
||||
|
||||
var maxDevValueFound: Double
|
||||
val devScale: Scale
|
||||
var deviationsSeries: BarGraphSeries<DeviationDataPoint>
|
||||
|
||||
var maxRatioValueFound: Double //even if sens data equals 0 for all the period, minimum scale is between 95% and 105%
|
||||
var minRatioValueFound: Double
|
||||
val ratioScale: Scale
|
||||
var ratioSeries: LineGraphSeries<ScaledDataPoint>
|
||||
|
||||
var maxFromMaxValueFound: Double
|
||||
var maxFromMinValueFound: Double
|
||||
val dsMaxScale: Scale
|
||||
val dsMinScale: Scale
|
||||
var dsMaxSeries: LineGraphSeries<ScaledDataPoint>
|
||||
var dsMinSeries: LineGraphSeries<ScaledDataPoint>
|
||||
}
|
|
@ -1,13 +1,12 @@
|
|||
package info.nightscout.androidaps.utils.ui
|
||||
package info.nightscout.core.graph
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import com.jjoe64.graphview.DefaultLabelFormatter
|
||||
import com.jjoe64.graphview.GraphView
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.AreaGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DoubleDataPoint
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.graph.data.AreaGraphSeries
|
||||
import info.nightscout.core.graph.data.DoubleDataPoint
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.utils.Round
|
||||
|
@ -20,6 +19,9 @@ class TargetBgProfileGraph : GraphView {
|
|||
constructor(context: Context?) : super(context)
|
||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
|
||||
|
||||
private fun fromMgdlToUnits(value: Double, units: GlucoseUnit): Double =
|
||||
if (units == GlucoseUnit.MGDL) value else value * Constants.MGDL_TO_MMOLL
|
||||
|
||||
fun show(profile: Profile) {
|
||||
|
||||
removeAllSeries()
|
||||
|
@ -27,8 +29,8 @@ class TargetBgProfileGraph : GraphView {
|
|||
var maxValue = 0.0
|
||||
val units = profile.units
|
||||
for (hour in 0..23) {
|
||||
val valueLow = Profile.fromMgdlToUnits(profile.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = Profile.fromMgdlToUnits(profile.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueLow = fromMgdlToUnits(profile.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = fromMgdlToUnits(profile.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
maxValue = max(maxValue, valueHigh)
|
||||
targetArray.add(DoubleDataPoint(hour.toDouble(), valueLow, valueHigh))
|
||||
targetArray.add(DoubleDataPoint((hour + 1).toDouble(), valueLow, valueHigh))
|
||||
|
@ -60,8 +62,8 @@ class TargetBgProfileGraph : GraphView {
|
|||
var maxValue = 0.0
|
||||
val units = profile1.units
|
||||
for (hour in 0..23) {
|
||||
val valueLow = Profile.fromMgdlToUnits(profile1.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = Profile.fromMgdlToUnits(profile1.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueLow = fromMgdlToUnits(profile1.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = fromMgdlToUnits(profile1.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
minValue = min(minValue, valueLow)
|
||||
maxValue = max(maxValue, valueHigh)
|
||||
targetArray1.add(DoubleDataPoint(hour.toDouble(), valueLow, valueHigh))
|
||||
|
@ -74,8 +76,8 @@ class TargetBgProfileGraph : GraphView {
|
|||
|
||||
val targetArray2: MutableList<DoubleDataPoint> = ArrayList()
|
||||
for (hour in 0..23) {
|
||||
val valueLow = Profile.fromMgdlToUnits(profile2.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = Profile.fromMgdlToUnits(profile2.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueLow = fromMgdlToUnits(profile2.getTargetLowMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
val valueHigh = fromMgdlToUnits(profile2.getTargetHighMgdlTimeFromMidnight(hour * 60 * 60), units)
|
||||
minValue = min(minValue, valueLow)
|
||||
maxValue = max(maxValue, valueHigh)
|
||||
targetArray2.add(DoubleDataPoint(hour.toDouble(), valueLow, valueHigh))
|
|
@ -17,7 +17,7 @@
|
|||
* with the "Linking Exception" along with this program; if not,
|
||||
* write to the author Jonas Gehring <g.jjoe64@gmail.com>.
|
||||
*/
|
||||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions;
|
||||
package info.nightscout.core.graph.data;
|
||||
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
|
@ -1,11 +1,11 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.Bolus
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
|
||||
class BolusDataPoint(
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.Carbs
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import com.jjoe64.graphview.series.DataPointInterface
|
|
@ -1,3 +1,3 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
class DeviationDataPoint(x: Double, y: Double, var color: Int, scale: Scale) : ScaledDataPoint(x, y, scale)
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import com.jjoe64.graphview.series.DataPointInterface
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.EffectiveProfileSwitch
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
import info.nightscout.shared.utils.T
|
|
@ -1,9 +1,9 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.androidaps.extensions.toStringTotal
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.ExtendedBolus
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
|
||||
class ExtendedBolusDataPoint(
|
||||
|
@ -26,4 +26,6 @@ class ExtendedBolusDataPoint(
|
|||
override fun setY(y: Double) {
|
||||
yValue = y
|
||||
}
|
||||
|
||||
private fun ExtendedBolus.toStringTotal(): String = "${DecimalFormatter.to2Decimal(amount)}U ( ${DecimalFormatter.to2Decimal(rate)} U/h )"
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions;
|
||||
package info.nightscout.core.graph.data;
|
||||
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
|
@ -1,12 +1,11 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.toCurrentUnitsString
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.GlucoseValue
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
|
@ -1,7 +1,7 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.iob.InMemoryGlucoseValue
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions;
|
||||
package info.nightscout.core.graph.data;
|
||||
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
|
@ -17,7 +17,7 @@ import com.jjoe64.graphview.series.BaseSeries;
|
|||
|
||||
import java.util.Iterator;
|
||||
|
||||
import info.nightscout.core.main.R;
|
||||
import info.nightscout.core.graph.R;
|
||||
|
||||
/**
|
||||
* Series that plots the data as points.
|
||||
|
@ -96,7 +96,6 @@ public class PointsWithLabelGraphSeries<E extends DataPointWithLabelInterface> e
|
|||
* @param isSecondScale whether it is the second scale
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings({"deprecation"})
|
||||
public void draw(GraphView graphView, Canvas canvas, boolean isSecondScale) {
|
||||
// Convert the sp to pixels
|
||||
float scaledTextSize = spSize * graphView.getContext().getResources().getDisplayMetrics().scaledDensity;
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
class Scale(var shift: Double = 0.0, var multiplier: Double = 1.0) {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import com.jjoe64.graphview.series.DataPointInterface
|
||||
|
|
@ -1,12 +1,10 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions
|
||||
package info.nightscout.core.graph.data
|
||||
|
||||
import android.content.Context
|
||||
import info.nightscout.androidaps.utils.Translator
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.fromMgdlToUnits
|
||||
import info.nightscout.core.profile.toUnits
|
||||
import info.nightscout.core.graph.R
|
||||
import info.nightscout.database.entities.TherapyEvent
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.Translator
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview.graphExtensions;
|
||||
package info.nightscout.core.graph.data;
|
||||
|
||||
import com.jjoe64.graphview.DefaultLabelFormatter;
|
||||
|
||||
|
@ -29,10 +29,11 @@ public class TimeAsXAxisLabelFormatter extends DefaultLabelFormatter {
|
|||
// Fatal Exception: java.lang.NullPointerException
|
||||
// Attempt to invoke virtual method 'double com.jjoe64.graphview.Viewport.getMaxY(boolean)' on a null object reference
|
||||
// com.jjoe64.graphview.DefaultLabelFormatter.formatLabel (DefaultLabelFormatter.java:89)
|
||||
// info.nightscout.androidaps.plugins.general.overview.graphExtensions.TimeAsXAxisLabelFormatter.formatLabel (TimeAsXAxisLabelFormatter.java:26)
|
||||
// info.nightscout.core.graph.data.TimeAsXAxisLabelFormatter.formatLabel (TimeAsXAxisLabelFormatter.java:26)
|
||||
// com.jjoe64.graphview.GridLabelRenderer.drawVerticalSteps (GridLabelRenderer.java:1057)
|
||||
// com.jjoe64.graphview.GridLabelRenderer.draw (GridLabelRenderer.java:866)
|
||||
// com.jjoe64.graphview.GraphView.onDraw (GraphView.java:296)
|
||||
//noinspection ConstantConditions
|
||||
return super.formatLabel(value, isValueX);
|
||||
} catch (Exception ignored) {
|
||||
return "";
|
|
@ -5,5 +5,5 @@
|
|||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M20.132,10.032c-0.141,-0.437 -0.519,-0.756 -0.975,-0.822L14.96,8.6l-1.878,-3.803c-0.406,-0.825 -1.758,-0.825 -2.164,0L9.04,8.6L4.842,9.21C4.388,9.276 4.01,9.594 3.868,10.032c-0.142,0.437 -0.024,0.917 0.305,1.237l3.038,2.96L6.495,18.41c-0.078,0.454 0.108,0.912 0.48,1.181c0.21,0.153 0.459,0.231 0.709,0.231c0.192,0 0.385,-0.047 0.561,-0.14L12,17.71l3.755,1.973c0.409,0.213 0.898,0.181 1.273,-0.091c0.371,-0.269 0.557,-0.729 0.479,-1.181l-0.717,-4.182l3.037,-2.96C20.155,10.948 20.275,10.468 20.132,10.032zM18.689,10.686l-3.16,3.081l0.746,4.35c0.014,0.087 -0.021,0.174 -0.092,0.225c-0.04,0.03 -0.087,0.044 -0.135,0.044c-0.036,0 -0.073,-0.008 -0.108,-0.027l-3.907,-2.053L8.126,18.36c-0.075,0.044 -0.17,0.036 -0.242,-0.017c-0.07,-0.051 -0.106,-0.138 -0.091,-0.225l0.746,-4.35l-3.162,-3.081c-0.063,-0.061 -0.085,-0.153 -0.058,-0.236c0.027,-0.083 0.099,-0.143 0.185,-0.156L9.874,9.66l1.954,-3.959c0.078,-0.158 0.334,-0.158 0.412,0l1.953,3.959l4.369,0.634c0.087,0.013 0.158,0.073 0.185,0.156S18.753,10.625 18.689,10.686z"
|
||||
android:fillColor="?attr/profileColor"/>
|
||||
android:fillColor="?attr/profileColor" />
|
||||
</vector>
|
5
core/graph/src/main/res/values/strings.xml
Normal file
5
core/graph/src/main/res/values/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="format_carbs">%1$d g</string>
|
||||
|
||||
</resources>
|
|
@ -1,23 +0,0 @@
|
|||
package info.nightscout.core.ui
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("info.nightscout.core.ui.test", appContext.packageName)
|
||||
}
|
||||
}
|
17
core/ui/src/main/res/drawable/alert_border_error.xml
Normal file
17
core/ui/src/main/res/drawable/alert_border_error.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="PrivateResource"
|
||||
android:insetLeft="16dp"
|
||||
android:insetTop="16dp"
|
||||
android:insetRight="16dp"
|
||||
android:insetBottom="16dp">
|
||||
<shape android:shape="rectangle">
|
||||
<corners android:radius="2dp" />
|
||||
<solid android:color="@color/background_floating_material_dark" />
|
||||
<stroke
|
||||
android:color="@color/errorAlertBackground"
|
||||
android:width="3dp" />
|
||||
</shape>
|
||||
</inset>
|
||||
|
17
core/ui/src/main/res/drawable/alert_border_warning.xml
Normal file
17
core/ui/src/main/res/drawable/alert_border_warning.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="PrivateResource"
|
||||
android:insetLeft="16dp"
|
||||
android:insetTop="16dp"
|
||||
android:insetRight="16dp"
|
||||
android:insetBottom="16dp">
|
||||
<shape android:shape="rectangle">
|
||||
<corners android:radius="2dp" />
|
||||
<solid android:color="@color/background_floating_material_dark" />
|
||||
<stroke
|
||||
android:color="@color/warningAlertBackground"
|
||||
android:width="3dp" />
|
||||
</shape>
|
||||
</inset>
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
@ -8,6 +8,7 @@
|
|||
<string name="dismiss">DISMISS</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="close">Close</string>
|
||||
|
||||
<!-- TwoMessagesDialog -->
|
||||
<string name="password_preferences_decrypt_prompt">You will be asked for master password, which is needed to decrypt imported preferences.</string>
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
package info.nightscout.core.ui
|
||||
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
class ExampleUnitTest {
|
||||
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|
|
@ -29,6 +29,8 @@ files:
|
|||
translation: /core/utils/src/main/res/values-%android_code%/strings.xml
|
||||
- source: /core/ui/src/main/res/values/strings.xml
|
||||
translation: /core/ui/src/main/res/values-%android_code%/strings.xml
|
||||
- source: /core/graph/src/main/res/values/strings.xml
|
||||
translation: /core/graph/src/main/res/values-%android_code%/strings.xml
|
||||
- source: /app-wear-shared/shared/src/main/res/values/strings.xml
|
||||
translation: /app-wear-shared/shared/src/main/res/values-%android_code%/strings.xml
|
||||
- source: /app-wear-shared/rx/src/main/res/values/strings.xml
|
||||
|
|
|
@ -18,16 +18,17 @@ android {
|
|||
dependencies {
|
||||
implementation project(':app-wear-shared:rx')
|
||||
implementation project(':app-wear-shared:shared')
|
||||
implementation project(path: ':graphview')
|
||||
implementation project(':database:entities')
|
||||
implementation project(':database:impl')
|
||||
implementation project(':plugins:automation')
|
||||
implementation project(':interfaces')
|
||||
implementation project(':core:core-main')
|
||||
implementation project(':core:utils')
|
||||
implementation project(':core:graph')
|
||||
implementation project(':core:ui')
|
||||
implementation project(':core:utils')
|
||||
implementation project(':ui')
|
||||
|
||||
// Protection
|
||||
api 'androidx.biometric:biometric:1.1.0'
|
||||
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package info.nightscout.androidaps.utils
|
||||
package info.nightscout.implementation
|
||||
|
||||
import info.nightscout.androidaps.annotations.OpenForTesting
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.core.profile.toCurrentUnits
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.GlucoseUnit
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.shared.sharedPreferences.SP
|
||||
|
@ -13,10 +13,10 @@ import javax.inject.Singleton
|
|||
|
||||
@OpenForTesting
|
||||
@Singleton
|
||||
class DefaultValueHelper @Inject constructor(
|
||||
class DefaultValueHelperImpl @Inject constructor(
|
||||
private val sp: SP,
|
||||
private val profileFunction: ProfileFunction
|
||||
) {
|
||||
) : DefaultValueHelper {
|
||||
|
||||
/**
|
||||
* returns the corresponding EatingSoon TempTarget based on the given units (MMOL / MGDL)
|
||||
|
@ -53,14 +53,14 @@ class DefaultValueHelper @Inject constructor(
|
|||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineEatingSoonTT(): Double {
|
||||
override fun determineEatingSoonTT(): Double {
|
||||
val units = profileFunction.getUnits()
|
||||
var value = sp.getDouble(R.string.key_eatingsoon_target, getDefaultEatingSoonTT(units))
|
||||
value = Profile.toCurrentUnits(profileFunction, value)
|
||||
return if (value > 0) value else getDefaultEatingSoonTT(units)
|
||||
}
|
||||
|
||||
fun determineEatingSoonTTDuration(): Int {
|
||||
override fun determineEatingSoonTTDuration(): Int {
|
||||
val value = sp.getInt(R.string.key_eatingsoon_duration, Constants.defaultEatingSoonTTDuration)
|
||||
return if (value > 0) value else Constants.defaultEatingSoonTTDuration
|
||||
}
|
||||
|
@ -70,14 +70,14 @@ class DefaultValueHelper @Inject constructor(
|
|||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineActivityTT(): Double {
|
||||
override fun determineActivityTT(): Double {
|
||||
val units = profileFunction.getUnits()
|
||||
var value = sp.getDouble(R.string.key_activity_target, getDefaultActivityTT(units))
|
||||
value = Profile.toCurrentUnits(profileFunction, value)
|
||||
return if (value > 0) value else getDefaultActivityTT(units)
|
||||
}
|
||||
|
||||
fun determineActivityTTDuration(): Int {
|
||||
override fun determineActivityTTDuration(): Int {
|
||||
val value = sp.getInt(R.string.key_activity_duration, Constants.defaultActivityTTDuration)
|
||||
return if (value > 0) value else Constants.defaultActivityTTDuration
|
||||
}
|
||||
|
@ -87,29 +87,29 @@ class DefaultValueHelper @Inject constructor(
|
|||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineHypoTT(): Double {
|
||||
override fun determineHypoTT(): Double {
|
||||
val units = profileFunction.getUnits()
|
||||
var value = sp.getDouble(R.string.key_hypo_target, getDefaultHypoTT(units))
|
||||
value = Profile.toCurrentUnits(profileFunction, value)
|
||||
return if (value > 0) value else getDefaultHypoTT(units)
|
||||
}
|
||||
|
||||
fun determineHypoTTDuration(): Int {
|
||||
override fun determineHypoTTDuration(): Int {
|
||||
val value = sp.getInt(R.string.key_hypo_duration, Constants.defaultHypoTTDuration)
|
||||
return if (value > 0) value else Constants.defaultHypoTTDuration
|
||||
}
|
||||
|
||||
var bgTargetLow = 80.0
|
||||
var bgTargetHigh = 180.0
|
||||
override var bgTargetLow = 80.0
|
||||
override var bgTargetHigh = 180.0
|
||||
|
||||
fun determineHighLine(): Double {
|
||||
override fun determineHighLine(): Double {
|
||||
var highLineSetting = sp.getDouble(R.string.key_high_mark, bgTargetHigh)
|
||||
if (highLineSetting < 1) highLineSetting = Constants.HIGH_MARK
|
||||
highLineSetting = Profile.toCurrentUnits(profileFunction, highLineSetting)
|
||||
return highLineSetting
|
||||
}
|
||||
|
||||
fun determineLowLine(): Double {
|
||||
override fun determineLowLine(): Double {
|
||||
var lowLineSetting = sp.getDouble(R.string.key_low_mark, bgTargetLow)
|
||||
if (lowLineSetting < 1) lowLineSetting = Constants.LOW_MARK
|
||||
lowLineSetting = Profile.toCurrentUnits(profileFunction, lowLineSetting)
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.utils
|
||||
package info.nightscout.implementation
|
||||
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.database.entities.OfflineEvent
|
||||
|
@ -7,16 +7,17 @@ import info.nightscout.database.entities.TherapyEvent
|
|||
import info.nightscout.database.entities.UserEntry.Action
|
||||
import info.nightscout.database.entities.UserEntry.Sources
|
||||
import info.nightscout.database.entities.ValueWithUnit
|
||||
import info.nightscout.interfaces.Translator
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class Translator @Inject internal constructor(
|
||||
class TranslatorImpl @Inject internal constructor(
|
||||
private val rh: ResourceHelper
|
||||
) {
|
||||
) : Translator {
|
||||
|
||||
fun translate(action: Action): String = when (action) {
|
||||
override fun translate(action: Action): String = when (action) {
|
||||
Action.BOLUS -> rh.gs(R.string.uel_bolus)
|
||||
Action.BOLUS_CALCULATOR_RESULT -> rh.gs(R.string.uel_bolus_calculator)
|
||||
Action.BOLUS_CALCULATOR_RESULT_REMOVED -> rh.gs(R.string.uel_bolus_calculator)
|
||||
|
@ -105,7 +106,7 @@ class Translator @Inject internal constructor(
|
|||
Action.UNKNOWN -> rh.gs(R.string.unknown)
|
||||
}
|
||||
|
||||
fun translate(units: ValueWithUnit?): String = when (units) {
|
||||
override fun translate(units: ValueWithUnit?): String = when (units) {
|
||||
is ValueWithUnit.Gram -> rh.gs(R.string.shortgram)
|
||||
is ValueWithUnit.Hour -> rh.gs(R.string.shorthour)
|
||||
is ValueWithUnit.Insulin -> rh.gs(R.string.insulin_unit_shortname)
|
||||
|
@ -117,7 +118,7 @@ class Translator @Inject internal constructor(
|
|||
else -> ""
|
||||
}
|
||||
|
||||
fun translate(meterType: TherapyEvent.MeterType?): String = when (meterType) {
|
||||
override fun translate(meterType: TherapyEvent.MeterType?): String = when (meterType) {
|
||||
TherapyEvent.MeterType.FINGER -> rh.gs(R.string.glucosetype_finger)
|
||||
TherapyEvent.MeterType.SENSOR -> rh.gs(R.string.glucosetype_sensor)
|
||||
TherapyEvent.MeterType.MANUAL -> rh.gs(R.string.manual)
|
||||
|
@ -125,7 +126,7 @@ class Translator @Inject internal constructor(
|
|||
else -> rh.gs(R.string.unknown)
|
||||
}
|
||||
|
||||
fun translate(type: TherapyEvent.Type?): String = when (type) {
|
||||
override fun translate(type: TherapyEvent.Type?): String = when (type) {
|
||||
TherapyEvent.Type.FINGER_STICK_BG_VALUE -> rh.gs(R.string.careportal_bgcheck)
|
||||
TherapyEvent.Type.SNACK_BOLUS -> rh.gs(R.string.careportal_snackbolus)
|
||||
TherapyEvent.Type.MEAL_BOLUS -> rh.gs(R.string.careportal_mealbolus)
|
||||
|
@ -176,7 +177,7 @@ class Translator @Inject internal constructor(
|
|||
else -> rh.gs(R.string.unknown)
|
||||
}
|
||||
|
||||
fun translate(reason: TemporaryTarget.Reason?): String = when (reason) {
|
||||
override fun translate(reason: TemporaryTarget.Reason?): String = when (reason) {
|
||||
TemporaryTarget.Reason.CUSTOM -> rh.gs(R.string.custom)
|
||||
TemporaryTarget.Reason.HYPOGLYCEMIA -> rh.gs(R.string.hypo)
|
||||
TemporaryTarget.Reason.EATING_SOON -> rh.gs(R.string.eatingsoon)
|
||||
|
@ -187,7 +188,7 @@ class Translator @Inject internal constructor(
|
|||
else -> rh.gs(R.string.unknown)
|
||||
}
|
||||
|
||||
fun translate(reason: OfflineEvent.Reason?): String = when (reason) {
|
||||
override fun translate(reason: OfflineEvent.Reason?): String = when (reason) {
|
||||
OfflineEvent.Reason.SUSPEND -> rh.gs(R.string.uel_suspend)
|
||||
OfflineEvent.Reason.DISABLE_LOOP -> rh.gs(R.string.disableloop)
|
||||
OfflineEvent.Reason.DISCONNECT_PUMP -> rh.gs(R.string.uel_disconnect)
|
||||
|
@ -196,7 +197,7 @@ class Translator @Inject internal constructor(
|
|||
else -> rh.gs(R.string.unknown)
|
||||
}
|
||||
|
||||
fun translate(source: Sources): String = when (source) {
|
||||
override fun translate(source: Sources): String = when (source) {
|
||||
/*
|
||||
Sources.TreatmentDialog -> TODO()
|
||||
Sources.InsulinDialog -> TODO()
|
|
@ -6,20 +6,28 @@ import dagger.Module
|
|||
import dagger.Provides
|
||||
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
|
||||
import info.nightscout.androidaps.plugins.general.maintenance.formats.EncryptedPrefsFormat
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.utils.CryptoUtil
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.implementation.DefaultValueHelperImpl
|
||||
import info.nightscout.implementation.HardLimitsImpl
|
||||
import info.nightscout.implementation.TranslatorImpl
|
||||
import info.nightscout.implementation.logging.LoggerUtilsImpl
|
||||
import info.nightscout.implementation.maintenance.PrefFileListProviderImpl
|
||||
import info.nightscout.implementation.overview.OverviewDataImpl
|
||||
import info.nightscout.implementation.profiling.ProfilerImpl
|
||||
import info.nightscout.implementation.protection.PasswordCheckImpl
|
||||
import info.nightscout.implementation.protection.ProtectionCheckImpl
|
||||
import info.nightscout.implementation.pump.WarnColorsImpl
|
||||
import info.nightscout.implementation.resources.ResourceHelperImpl
|
||||
import info.nightscout.interfaces.Config
|
||||
import info.nightscout.interfaces.Translator
|
||||
import info.nightscout.interfaces.logging.LoggerUtils
|
||||
import info.nightscout.interfaces.maintenance.PrefFileListProvider
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.interfaces.profiling.Profiler
|
||||
import info.nightscout.interfaces.protection.PasswordCheck
|
||||
import info.nightscout.interfaces.protection.ProtectionCheck
|
||||
|
@ -72,6 +80,27 @@ open class ImplementationModule {
|
|||
@Singleton
|
||||
fun provideProtectionCheck(sp: SP, passwordCheck: PasswordCheck, dateUtil: DateUtil): ProtectionCheck = ProtectionCheckImpl(sp, passwordCheck, dateUtil)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDefaultValueHelper(sp: SP, profileFunction: ProfileFunction): DefaultValueHelper = DefaultValueHelperImpl(sp, profileFunction)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideTranslator(rh: ResourceHelper): Translator = TranslatorImpl(rh)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideOverviewData(
|
||||
aapsLogger: AAPSLogger,
|
||||
rh: ResourceHelper,
|
||||
dateUtil: DateUtil,
|
||||
sp: SP,
|
||||
activePlugin: ActivePlugin,
|
||||
defaultValueHelper: DefaultValueHelper,
|
||||
profileFunction: ProfileFunction,
|
||||
repository: AppRepository
|
||||
): OverviewData = OverviewDataImpl(aapsLogger, rh, dateUtil, sp, activePlugin, defaultValueHelper, profileFunction, repository)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providePrefFileListProvider(
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package info.nightscout.androidaps.plugins.general.overview
|
||||
package info.nightscout.implementation.overview
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.AttrRes
|
||||
|
@ -12,13 +12,13 @@ import info.nightscout.androidaps.extensions.isInProgress
|
|||
import info.nightscout.androidaps.extensions.toStringFull
|
||||
import info.nightscout.androidaps.extensions.toStringShort
|
||||
import info.nightscout.androidaps.extensions.valueToUnits
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DeviationDataPoint
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.FixedLineGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.Scale
|
||||
import info.nightscout.androidaps.plugins.general.overview.graphExtensions.ScaledDataPoint
|
||||
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||
import info.nightscout.core.graph.OverviewData
|
||||
import info.nightscout.core.graph.data.DataPointWithLabelInterface
|
||||
import info.nightscout.core.graph.data.DeviationDataPoint
|
||||
import info.nightscout.core.graph.data.FixedLineGraphSeries
|
||||
import info.nightscout.core.graph.data.PointsWithLabelGraphSeries
|
||||
import info.nightscout.core.graph.data.Scale
|
||||
import info.nightscout.core.graph.data.ScaledDataPoint
|
||||
import info.nightscout.core.iob.round
|
||||
import info.nightscout.core.main.R
|
||||
import info.nightscout.database.entities.GlucoseValue
|
||||
|
@ -30,6 +30,7 @@ import info.nightscout.interfaces.iob.CobInfo
|
|||
import info.nightscout.interfaces.iob.IobCobCalculator
|
||||
import info.nightscout.interfaces.iob.IobTotal
|
||||
import info.nightscout.interfaces.plugin.ActivePlugin
|
||||
import info.nightscout.interfaces.profile.DefaultValueHelper
|
||||
import info.nightscout.interfaces.profile.ProfileFunction
|
||||
import info.nightscout.rx.logging.AAPSLogger
|
||||
import info.nightscout.shared.interfaces.ResourceHelper
|
||||
|
@ -41,7 +42,7 @@ import javax.inject.Inject
|
|||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class OverviewData @Inject constructor(
|
||||
class OverviewDataImpl @Inject constructor(
|
||||
private val aapsLogger: AAPSLogger,
|
||||
private val rh: ResourceHelper,
|
||||
private val dateUtil: DateUtil,
|
||||
|
@ -50,14 +51,14 @@ class OverviewData @Inject constructor(
|
|||
private val defaultValueHelper: DefaultValueHelper,
|
||||
private val profileFunction: ProfileFunction,
|
||||
private val repository: AppRepository
|
||||
) {
|
||||
) : OverviewData {
|
||||
|
||||
var rangeToDisplay = 6 // for graph
|
||||
var toTime: Long = 0
|
||||
var fromTime: Long = 0
|
||||
var endTime: Long = 0
|
||||
override var rangeToDisplay = 6 // for graph
|
||||
override var toTime: Long = 0
|
||||
override var fromTime: Long = 0
|
||||
override var endTime: Long = 0
|
||||
|
||||
fun reset() {
|
||||
override fun reset() {
|
||||
pumpStatus = ""
|
||||
calcProgressPct = 100
|
||||
bgReadingsArray = ArrayList()
|
||||
|
@ -86,7 +87,7 @@ class OverviewData @Inject constructor(
|
|||
epsSeries = PointsWithLabelGraphSeries()
|
||||
}
|
||||
|
||||
fun initRange() {
|
||||
override fun initRange() {
|
||||
rangeToDisplay = sp.getInt(R.string.key_rangetodisplay, 6)
|
||||
|
||||
val calendar = Calendar.getInstance().also {
|
||||
|
@ -106,51 +107,51 @@ class OverviewData @Inject constructor(
|
|||
* PUMP STATUS
|
||||
*/
|
||||
|
||||
var pumpStatus: String = ""
|
||||
override var pumpStatus: String = ""
|
||||
|
||||
/*
|
||||
* CALC PROGRESS
|
||||
*/
|
||||
|
||||
var calcProgressPct: Int = 100
|
||||
override var calcProgressPct: Int = 100
|
||||
|
||||
/*
|
||||
* BG
|
||||
*/
|
||||
|
||||
val lastBg: GlucoseValue?
|
||||
override val lastBg: GlucoseValue?
|
||||
get() =
|
||||
repository.getLastGlucoseValueWrapped().blockingGet().let { gvWrapped ->
|
||||
if (gvWrapped is ValueWrapper.Existing) gvWrapped.value
|
||||
else null
|
||||
}
|
||||
|
||||
val isLow: Boolean
|
||||
override val isLow: Boolean
|
||||
get() = lastBg?.let { lastBg ->
|
||||
lastBg.valueToUnits(profileFunction.getUnits()) < defaultValueHelper.determineLowLine()
|
||||
} ?: false
|
||||
|
||||
val isHigh: Boolean
|
||||
override val isHigh: Boolean
|
||||
get() = lastBg?.let { lastBg ->
|
||||
lastBg.valueToUnits(profileFunction.getUnits()) > defaultValueHelper.determineHighLine()
|
||||
} ?: false
|
||||
|
||||
@ColorInt
|
||||
fun lastBgColor(context: Context?): Int =
|
||||
override fun lastBgColor(context: Context?): Int =
|
||||
when {
|
||||
isLow -> rh.gac(context, R.attr.bgLow)
|
||||
isHigh -> rh.gac(context, R.attr.highColor)
|
||||
else -> rh.gac(context, R.attr.bgInRange)
|
||||
}
|
||||
|
||||
val lastBgDescription: String
|
||||
override val lastBgDescription: String
|
||||
get() = when {
|
||||
isLow -> rh.gs(R.string.a11y_low)
|
||||
isHigh -> rh.gs(R.string.a11y_high)
|
||||
else -> rh.gs(R.string.a11y_inrange)
|
||||
}
|
||||
|
||||
val isActualBg: Boolean
|
||||
override val isActualBg: Boolean
|
||||
get() =
|
||||
lastBg?.let { lastBg ->
|
||||
lastBg.timestamp > dateUtil.now() - T.mins(9).msecs()
|
||||
|
@ -160,7 +161,7 @@ class OverviewData @Inject constructor(
|
|||
* TEMPORARY BASAL
|
||||
*/
|
||||
|
||||
fun temporaryBasalText(iobCobCalculator: IobCobCalculator): String =
|
||||
override fun temporaryBasalText(iobCobCalculator: IobCobCalculator): String =
|
||||
profileFunction.getProfile()?.let { profile ->
|
||||
var temporaryBasal = iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())
|
||||
if (temporaryBasal?.isInProgress == false) temporaryBasal = null
|
||||
|
@ -168,7 +169,7 @@ class OverviewData @Inject constructor(
|
|||
?: rh.gs(R.string.pump_basebasalrate, profile.getBasal())
|
||||
} ?: rh.gs(R.string.value_unavailable_short)
|
||||
|
||||
fun temporaryBasalDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
override fun temporaryBasalDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
profileFunction.getProfile()?.let { profile ->
|
||||
iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { temporaryBasal ->
|
||||
"${rh.gs(R.string.base_basal_rate_label)}: ${rh.gs(R.string.pump_basebasalrate, profile.getBasal())}" +
|
||||
|
@ -177,7 +178,7 @@ class OverviewData @Inject constructor(
|
|||
?: "${rh.gs(R.string.base_basal_rate_label)}: ${rh.gs(R.string.pump_basebasalrate, profile.getBasal())}"
|
||||
} ?: rh.gs(R.string.value_unavailable_short)
|
||||
|
||||
@DrawableRes fun temporaryBasalIcon(iobCobCalculator: IobCobCalculator): Int =
|
||||
@DrawableRes override fun temporaryBasalIcon(iobCobCalculator: IobCobCalculator): Int =
|
||||
profileFunction.getProfile()?.let { profile ->
|
||||
iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { temporaryBasal ->
|
||||
val percentRate = temporaryBasal.convertedToPercent(dateUtil.now(), profile)
|
||||
|
@ -189,50 +190,54 @@ class OverviewData @Inject constructor(
|
|||
}
|
||||
} ?: R.drawable.ic_cp_basal_no_tbr
|
||||
|
||||
@AttrRes fun temporaryBasalColor(context: Context?, iobCobCalculator: IobCobCalculator): Int = iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let { rh.gac(context, R
|
||||
.attr.basal) }
|
||||
?: rh.gac(context, R.attr.defaultTextColor)
|
||||
@AttrRes override fun temporaryBasalColor(context: Context?, iobCobCalculator: IobCobCalculator): Int = iobCobCalculator.getTempBasalIncludingConvertedExtended(dateUtil.now())?.let {
|
||||
rh.gac(
|
||||
context, R
|
||||
.attr.basal
|
||||
)
|
||||
}
|
||||
?: rh.gac(context, R.attr.defaultTextColor)
|
||||
|
||||
/*
|
||||
* EXTENDED BOLUS
|
||||
*/
|
||||
|
||||
fun extendedBolusText(iobCobCalculator: IobCobCalculator): String =
|
||||
override fun extendedBolusText(iobCobCalculator: IobCobCalculator): String =
|
||||
iobCobCalculator.getExtendedBolus(dateUtil.now())?.let { extendedBolus ->
|
||||
if (!extendedBolus.isInProgress(dateUtil)) ""
|
||||
else if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) rh.gs(R.string.pump_basebasalrate, extendedBolus.rate)
|
||||
else ""
|
||||
} ?: ""
|
||||
|
||||
fun extendedBolusDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
override fun extendedBolusDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
iobCobCalculator.getExtendedBolus(dateUtil.now())?.toStringFull(dateUtil) ?: ""
|
||||
|
||||
/*
|
||||
* IOB, COB
|
||||
*/
|
||||
|
||||
fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round()
|
||||
fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
|
||||
fun cobInfo(iobCobCalculator: IobCobCalculator): CobInfo = iobCobCalculator.getCobInfo(true, "Overview COB")
|
||||
override fun bolusIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromBolus().round()
|
||||
override fun basalIob(iobCobCalculator: IobCobCalculator): IobTotal = iobCobCalculator.calculateIobFromTempBasalsIncludingConvertedExtended().round()
|
||||
override fun cobInfo(iobCobCalculator: IobCobCalculator): CobInfo = iobCobCalculator.getCobInfo(true, "Overview COB")
|
||||
|
||||
val lastCarbsTime: Long
|
||||
override val lastCarbsTime: Long
|
||||
get() = repository.getLastCarbsRecordWrapped().blockingGet().let { lastCarbs ->
|
||||
if (lastCarbs is ValueWrapper.Existing) lastCarbs.value.timestamp else 0L
|
||||
}
|
||||
|
||||
fun iobText(iobCobCalculator: IobCobCalculator): String =
|
||||
rh.gs(R.string.formatinsulinunits, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob)
|
||||
override fun iobText(iobCobCalculator: IobCobCalculator): String =
|
||||
rh.gs(R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob)
|
||||
|
||||
fun iobDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
rh.gs(R.string.formatinsulinunits, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) + "\n" +
|
||||
rh.gs(R.string.bolus) + ": " + rh.gs(R.string.formatinsulinunits, bolusIob(iobCobCalculator).iob) + "\n" +
|
||||
rh.gs(R.string.basal) + ": " + rh.gs(R.string.formatinsulinunits, basalIob(iobCobCalculator).basaliob)
|
||||
override fun iobDialogText(iobCobCalculator: IobCobCalculator): String =
|
||||
rh.gs(R.string.format_insulin_units, bolusIob(iobCobCalculator).iob + basalIob(iobCobCalculator).basaliob) + "\n" +
|
||||
rh.gs(R.string.bolus) + ": " + rh.gs(R.string.format_insulin_units, bolusIob(iobCobCalculator).iob) + "\n" +
|
||||
rh.gs(R.string.basal) + ": " + rh.gs(R.string.format_insulin_units, basalIob(iobCobCalculator).basaliob)
|
||||
|
||||
/*
|
||||
* TEMP TARGET
|
||||
*/
|
||||
|
||||
val temporaryTarget: TemporaryTarget?
|
||||
override val temporaryTarget: TemporaryTarget?
|
||||
get() =
|
||||
repository.getTemporaryTargetActiveAt(dateUtil.now()).blockingGet().let { tempTarget ->
|
||||
if (tempTarget is ValueWrapper.Existing) tempTarget.value
|
||||
|
@ -243,69 +248,77 @@ class OverviewData @Inject constructor(
|
|||
* SENSITIVITY
|
||||
*/
|
||||
|
||||
fun lastAutosensData(iobCobCalculator: IobCobCalculator) : AutosensData? = iobCobCalculator.ads.getLastAutosensData("Overview", aapsLogger, dateUtil)
|
||||
override fun lastAutosensData(iobCobCalculator: IobCobCalculator): AutosensData? = iobCobCalculator.ads.getLastAutosensData("Overview", aapsLogger, dateUtil)
|
||||
|
||||
/*
|
||||
* Graphs
|
||||
*/
|
||||
|
||||
var bgReadingsArray: List<GlucoseValue> = ArrayList()
|
||||
var maxBgValue = Double.MIN_VALUE
|
||||
var bucketedGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
var bgReadingGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
var predictionsGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
override var bgReadingsArray: List<GlucoseValue> = ArrayList()
|
||||
override var maxBgValue = Double.MIN_VALUE
|
||||
override var bucketedGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
override var bgReadingGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
override var predictionsGraphSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
|
||||
val basalScale = Scale()
|
||||
var baseBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
var tempBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
var basalLineGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
var absoluteBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override val basalScale = Scale()
|
||||
override var baseBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var tempBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var basalLineGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var absoluteBasalGraphSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
|
||||
var temporaryTargetSeries: LineGraphSeries<DataPoint> = LineGraphSeries()
|
||||
override var temporaryTargetSeries: LineGraphSeries<DataPoint> = LineGraphSeries()
|
||||
|
||||
var maxIAValue = 0.0
|
||||
val actScale = Scale()
|
||||
var activitySeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
var activityPredictionSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var maxIAValue = 0.0
|
||||
override val actScale = Scale()
|
||||
override var activitySeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var activityPredictionSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
|
||||
var maxEpsValue = 0.0
|
||||
val epsScale = Scale()
|
||||
var epsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
var maxTreatmentsValue = 0.0
|
||||
var treatmentsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
var maxTherapyEventValue = 0.0
|
||||
var therapyEventSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
override var maxEpsValue = 0.0
|
||||
override val epsScale = Scale()
|
||||
override var epsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
override var maxTreatmentsValue = 0.0
|
||||
override var treatmentsSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
override var maxTherapyEventValue = 0.0
|
||||
override var therapyEventSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
|
||||
var maxIobValueFound = Double.MIN_VALUE
|
||||
val iobScale = Scale()
|
||||
var iobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
var absIobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
var iobPredictions1Series: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
override var maxIobValueFound = Double.MIN_VALUE
|
||||
override val iobScale = Scale()
|
||||
override var iobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var absIobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var iobPredictions1Series: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
//var iobPredictions2Series: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
|
||||
var maxBGIValue = Double.MIN_VALUE
|
||||
val bgiScale = Scale()
|
||||
var minusBgiSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
var minusBgiHistSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var maxBGIValue = Double.MIN_VALUE
|
||||
override val bgiScale = Scale()
|
||||
override var minusBgiSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var minusBgiHistSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
|
||||
var maxCobValueFound = Double.MIN_VALUE
|
||||
val cobScale = Scale()
|
||||
var cobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
var cobMinFailOverSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> = PointsWithLabelGraphSeries()
|
||||
override var maxCobValueFound = Double.MIN_VALUE
|
||||
override val cobScale = Scale()
|
||||
override var cobSeries: FixedLineGraphSeries<ScaledDataPoint> = FixedLineGraphSeries()
|
||||
override var cobMinFailOverSeries: PointsWithLabelGraphSeries<DataPointWithLabelInterface> =
|
||||
PointsWithLabelGraphSeries()
|
||||
|
||||
var maxDevValueFound = Double.MIN_VALUE
|
||||
val devScale = Scale()
|
||||
var deviationsSeries: BarGraphSeries<DeviationDataPoint> = BarGraphSeries()
|
||||
override var maxDevValueFound = Double.MIN_VALUE
|
||||
override val devScale = Scale()
|
||||
override var deviationsSeries: BarGraphSeries<DeviationDataPoint> = BarGraphSeries()
|
||||
|
||||
var maxRatioValueFound = 5.0 //even if sens data equals 0 for all the period, minimum scale is between 95% and 105%
|
||||
var minRatioValueFound = -maxRatioValueFound
|
||||
val ratioScale = Scale()
|
||||
var ratioSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var maxRatioValueFound = 5.0 //even if sens data equals 0 for all the period, minimum scale is between 95% and 105%
|
||||
override var minRatioValueFound = -maxRatioValueFound
|
||||
override val ratioScale = Scale()
|
||||
override var ratioSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
|
||||
var maxFromMaxValueFound = Double.MIN_VALUE
|
||||
var maxFromMinValueFound = Double.MIN_VALUE
|
||||
val dsMaxScale = Scale()
|
||||
val dsMinScale = Scale()
|
||||
var dsMaxSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
var dsMinSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var maxFromMaxValueFound = Double.MIN_VALUE
|
||||
override var maxFromMinValueFound = Double.MIN_VALUE
|
||||
override val dsMaxScale = Scale()
|
||||
override val dsMinScale = Scale()
|
||||
override var dsMaxSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
override var dsMinSeries: LineGraphSeries<ScaledDataPoint> = LineGraphSeries()
|
||||
}
|
|
@ -39,7 +39,7 @@ class CommandBolus(
|
|||
}
|
||||
|
||||
override fun log(): String {
|
||||
return (if (detailedBolusInfo.insulin > 0) "BOLUS " + rh.gs(R.string.formatinsulinunits, detailedBolusInfo.insulin) else "") +
|
||||
return (if (detailedBolusInfo.insulin > 0) "BOLUS " + rh.gs(R.string.format_insulin_units, detailedBolusInfo.insulin) else "") +
|
||||
if (detailedBolusInfo.carbs > 0) "CARBS " + rh.gs(R.string.format_carbs, detailedBolusInfo.carbs.toInt()) else ""
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ class CommandSMBBolus(
|
|||
|
||||
override fun status(): String = rh.gs(R.string.smb_bolus_u, detailedBolusInfo.insulin)
|
||||
|
||||
override fun log(): String = "SMB BOLUS ${rh.gs(R.string.formatinsulinunits, detailedBolusInfo.insulin)}"
|
||||
override fun log(): String = "SMB BOLUS ${rh.gs(R.string.format_insulin_units, detailedBolusInfo.insulin)}"
|
||||
override fun cancel() {
|
||||
aapsLogger.debug(LTag.PUMPQUEUE, "Result cancel")
|
||||
callback?.result(PumpEnactResult(injector).success(false).comment(info.nightscout.core.main.R.string.connectiontimedout))?.run()
|
||||
|
|
|
@ -6,8 +6,6 @@ import android.graphics.Typeface
|
|||
import android.view.Gravity
|
||||
import android.widget.TableRow
|
||||
import android.widget.TextView
|
||||
import info.nightscout.core.profile.toCurrentUnitsString
|
||||
import info.nightscout.core.profile.toUnitsString
|
||||
import info.nightscout.implementation.R
|
||||
import info.nightscout.interfaces.Constants
|
||||
import info.nightscout.interfaces.profile.Profile
|
||||
|
|
|
@ -8,7 +8,6 @@ import android.view.Gravity
|
|||
import android.view.ViewGroup
|
||||
import android.widget.TableLayout
|
||||
import android.widget.TextView
|
||||
import info.nightscout.core.profile.toCurrentUnitsString
|
||||
import info.nightscout.database.impl.AppRepository
|
||||
import info.nightscout.implementation.R
|
||||
import info.nightscout.interfaces.Constants
|
||||
|
|
|
@ -149,7 +149,7 @@ class CommandQueueImplementationTest : TestBaseWithProfile() {
|
|||
val percentageConstraint = Constraint(0)
|
||||
`when`(constraintChecker.applyBasalPercentConstraints(anyObject(), anyObject())).thenReturn(percentageConstraint)
|
||||
`when`(rh.gs(R.string.connectiontimedout)).thenReturn("Connection timed out")
|
||||
`when`(rh.gs(R.string.formatinsulinunits)).thenReturn("%1\$.2f U")
|
||||
`when`(rh.gs(R.string.format_insulin_units)).thenReturn("%1\$.2f U")
|
||||
`when`(rh.gs(R.string.goingtodeliver)).thenReturn("Going to deliver %1\$.2f U")
|
||||
}
|
||||
|
||||
|
|
|
@ -29,10 +29,10 @@ import info.nightscout.androidaps.plugins.pump.insight.descriptors.CartridgeStat
|
|||
import info.nightscout.androidaps.plugins.pump.insight.descriptors.InsightState;
|
||||
import info.nightscout.androidaps.plugins.pump.insight.descriptors.TotalDailyDose;
|
||||
import info.nightscout.androidaps.plugins.pump.insight.events.EventLocalInsightUpdateGUI;
|
||||
import info.nightscout.androidaps.utils.DecimalFormatter;
|
||||
import info.nightscout.core.utils.fabric.FabricPrivacy;
|
||||
import info.nightscout.interfaces.queue.Callback;
|
||||
import info.nightscout.interfaces.queue.CommandQueue;
|
||||
import info.nightscout.interfaces.utils.DecimalFormatter;
|
||||
import info.nightscout.rx.AapsSchedulers;
|
||||
import info.nightscout.rx.bus.RxBus;
|
||||
import info.nightscout.shared.interfaces.ResourceHelper;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package info.nightscout.interfaces
|
||||
|
||||
import info.nightscout.database.entities.OfflineEvent
|
||||
import info.nightscout.database.entities.TemporaryTarget
|
||||
import info.nightscout.database.entities.TherapyEvent
|
||||
import info.nightscout.database.entities.UserEntry
|
||||
import info.nightscout.database.entities.ValueWithUnit
|
||||
|
||||
interface Translator {
|
||||
|
||||
fun translate(action: UserEntry.Action): String
|
||||
fun translate(units: ValueWithUnit?): String
|
||||
fun translate(meterType: TherapyEvent.MeterType?): String
|
||||
fun translate(type: TherapyEvent.Type?): String
|
||||
fun translate(reason: TemporaryTarget.Reason?): String
|
||||
fun translate(reason: OfflineEvent.Reason?): String
|
||||
fun translate(source: UserEntry.Sources): String
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package info.nightscout.interfaces.profile
|
||||
|
||||
interface DefaultValueHelper {
|
||||
|
||||
/**
|
||||
* returns the configured EatingSoon TempTarget, if this is set to 0, the Default-Value is returned.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineEatingSoonTT(): Double
|
||||
fun determineEatingSoonTTDuration(): Int
|
||||
|
||||
/**
|
||||
* returns the configured Activity TempTarget, if this is set to 0, the Default-Value is returned.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineActivityTT(): Double
|
||||
fun determineActivityTTDuration(): Int
|
||||
|
||||
/**
|
||||
* returns the configured Hypo TempTarget, if this is set to 0, the Default-Value is returned.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
fun determineHypoTT(): Double
|
||||
fun determineHypoTTDuration(): Int
|
||||
|
||||
var bgTargetLow: Double
|
||||
var bgTargetHigh: Double
|
||||
|
||||
fun determineHighLine(): Double
|
||||
fun determineLowLine(): Double
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue