diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
index a96889c0f6..98043b9b8a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.kt
@@ -923,6 +923,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
}
statusLightHandler.updateStatusLights(
binding.statusLightsLayout.cannulaAge,
+ null,
binding.statusLightsLayout.insulinAge,
binding.statusLightsLayout.reservoirLevel,
binding.statusLightsLayout.sensorAge,
diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/actions/ActionsFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/actions/ActionsFragment.kt
index a10ba59a73..3b3daf4ce4 100644
--- a/plugins/main/src/main/java/info/nightscout/plugins/general/actions/ActionsFragment.kt
+++ b/plugins/main/src/main/java/info/nightscout/plugins/general/actions/ActionsFragment.kt
@@ -289,12 +289,14 @@ class ActionsFragment : DaggerFragment() {
val imageResource = if (isPatchPump) R.drawable.ic_patch_pump_outline else R.drawable.ic_cp_age_cannula
cannulaOrPatch.setCompoundDrawablesWithIntrinsicBounds(imageResource, 0, 0, 0)
batteryLayout.visibility = (!isPatchPump || pump.pumpDescription.useHardwareLink).toVisibility()
+ cannulaUsageLabel.visibility = isPatchPump.not().toVisibility()
+ cannulaUsage.visibility = isPatchPump.not().toVisibility()
if (!config.NSCLIENT) {
- statusLightHandler.updateStatusLights(cannulaAge, insulinAge, reservoirLevel, sensorAge, sensorLevel, pbAge, batteryLevel)
+ statusLightHandler.updateStatusLights(cannulaAge, cannulaUsage, insulinAge, reservoirLevel, sensorAge, sensorLevel, pbAge, batteryLevel)
sensorLevelLabel.text = if (activeBgSource.sensorBatteryLevel == -1) "" else rh.gs(R.string.level_label)
} else {
- statusLightHandler.updateStatusLights(cannulaAge, insulinAge, null, sensorAge, null, pbAge, null)
+ statusLightHandler.updateStatusLights(cannulaAge, cannulaUsage, insulinAge, null, sensorAge, null, pbAge, null)
sensorLevelLabel.text = ""
insulinLevelLabel.text = ""
pbLevelLabel.text = ""
diff --git a/plugins/main/src/main/java/info/nightscout/plugins/skins/SkinLowRes.kt b/plugins/main/src/main/java/info/nightscout/plugins/skins/SkinLowRes.kt
index d9e3c51848..4af731facf 100644
--- a/plugins/main/src/main/java/info/nightscout/plugins/skins/SkinLowRes.kt
+++ b/plugins/main/src/main/java/info/nightscout/plugins/skins/SkinLowRes.kt
@@ -30,7 +30,7 @@ class SkinLowRes @Inject constructor(private val config: Config) : SkinInterface
insulinAgeLabel.visibility = GONE
insulinLevelLabel.visibility = GONE
cannulaAgeLabel.visibility = GONE
- cannulaPlaceholder.visibility = GONE
+ cannulaUsageLabel.visibility = GONE
pbAgeLabel.visibility = GONE
pbLevelLabel.visibility = GONE
}
diff --git a/plugins/main/src/main/java/info/nightscout/plugins/ui/StatusLightHandler.kt b/plugins/main/src/main/java/info/nightscout/plugins/ui/StatusLightHandler.kt
index 95aa14d5ba..d164e08a0d 100644
--- a/plugins/main/src/main/java/info/nightscout/plugins/ui/StatusLightHandler.kt
+++ b/plugins/main/src/main/java/info/nightscout/plugins/ui/StatusLightHandler.kt
@@ -2,6 +2,7 @@ package info.nightscout.plugins.ui
import android.widget.TextView
import androidx.annotation.StringRes
+import info.nightscout.database.entities.Bolus
import info.nightscout.database.entities.TherapyEvent
import info.nightscout.database.impl.AppRepository
import info.nightscout.database.impl.ValueWrapper
@@ -33,27 +34,28 @@ class StatusLightHandler @Inject constructor(
* applies the extended statusLight subview on the overview fragment
*/
fun updateStatusLights(
- careportal_cannula_age: TextView?,
- careportal_insulin_age: TextView?,
- careportal_reservoir_level: TextView?,
- careportal_sensor_age: TextView?,
- careportal_sensor_battery_level: TextView?,
- careportal_pb_age: TextView?,
- careportal_battery_level: TextView?
+ cannulaAge: TextView?,
+ cannulaUsage: TextView?,
+ insulinAge: TextView?,
+ reservoirLevel: TextView?,
+ sensorAge: TextView?,
+ sensorBatteryLevel: TextView?,
+ batteryAge: TextView?,
+ batteryLevel: TextView?
) {
val pump = activePlugin.activePump
val bgSource = activePlugin.activeBgSource
- handleAge(careportal_cannula_age, TherapyEvent.Type.CANNULA_CHANGE, R.string.key_statuslights_cage_warning, 48.0, R.string.key_statuslights_cage_critical, 72.0)
- handleAge(careportal_insulin_age, TherapyEvent.Type.INSULIN_CHANGE, R.string.key_statuslights_iage_warning, 72.0, R.string.key_statuslights_iage_critical, 144.0)
- handleAge(careportal_sensor_age, TherapyEvent.Type.SENSOR_CHANGE, R.string.key_statuslights_sage_warning, 216.0, R.string.key_statuslights_sage_critical, 240.0)
+ handleAge(cannulaAge, TherapyEvent.Type.CANNULA_CHANGE, R.string.key_statuslights_cage_warning, 48.0, R.string.key_statuslights_cage_critical, 72.0)
+ handleAge(insulinAge, TherapyEvent.Type.INSULIN_CHANGE, R.string.key_statuslights_iage_warning, 72.0, R.string.key_statuslights_iage_critical, 144.0)
+ handleAge(sensorAge, TherapyEvent.Type.SENSOR_CHANGE, R.string.key_statuslights_sage_warning, 216.0, R.string.key_statuslights_sage_critical, 240.0)
if (pump.pumpDescription.isBatteryReplaceable || pump.isBatteryChangeLoggingEnabled()) {
- handleAge(careportal_pb_age, TherapyEvent.Type.PUMP_BATTERY_CHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
+ handleAge(batteryAge, TherapyEvent.Type.PUMP_BATTERY_CHANGE, R.string.key_statuslights_bage_warning, 216.0, R.string.key_statuslights_bage_critical, 240.0)
}
val insulinUnit = rh.gs(R.string.insulin_unit_shortname)
- if (pump.pumpDescription.isPatchPump)
+ if (pump.pumpDescription.isPatchPump) {
handlePatchReservoirLevel(
- careportal_reservoir_level,
+ reservoirLevel,
R.string.key_statuslights_res_critical,
10.0,
R.string.key_statuslights_res_warning,
@@ -62,14 +64,15 @@ class StatusLightHandler @Inject constructor(
insulinUnit,
pump.pumpDescription.maxResorvoirReading.toDouble()
)
- else
- handleLevel(careportal_reservoir_level, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
-
+ } else {
+ handleUsage(cannulaUsage, TherapyEvent.Type.CANNULA_CHANGE, insulinUnit)
+ handleLevel(reservoirLevel, R.string.key_statuslights_res_critical, 10.0, R.string.key_statuslights_res_warning, 80.0, pump.reservoirLevel, insulinUnit)
+ }
if (!config.NSCLIENT) {
if (bgSource.sensorBatteryLevel != -1)
- handleLevel(careportal_sensor_battery_level, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
+ handleLevel(sensorBatteryLevel, R.string.key_statuslights_sbat_critical, 5.0, R.string.key_statuslights_sbat_warning, 20.0, bgSource.sensorBatteryLevel.toDouble(), "%")
else
- careportal_sensor_battery_level?.text = ""
+ sensorBatteryLevel?.text = ""
}
if (!config.NSCLIENT) {
@@ -79,10 +82,10 @@ class StatusLightHandler @Inject constructor(
val erosBatteryLinkAvailable = pump.model() == PumpType.OMNIPOD_EROS && pump.isUseRileyLinkBatteryLevel()
if (pump.model().supportBatteryLevel || erosBatteryLinkAvailable) {
- handleLevel(careportal_battery_level, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%")
+ handleLevel(batteryLevel, R.string.key_statuslights_bat_critical, 26.0, R.string.key_statuslights_bat_warning, 51.0, pump.batteryLevel.toDouble(), "%")
} else {
- careportal_battery_level?.text = rh.gs(R.string.value_unavailable_short)
- careportal_battery_level?.setTextColor(rh.gac(careportal_battery_level.context, R.attr.defaultTextColor))
+ batteryLevel?.text = rh.gs(R.string.value_unavailable_short)
+ batteryLevel?.setTextColor(rh.gac(batteryLevel.context, R.attr.defaultTextColor))
}
}
}
@@ -121,4 +124,16 @@ class StatusLightHandler @Inject constructor(
handleLevel(view, criticalSetting, criticalDefaultValue, warnSetting, warnDefaultValue, level, units)
}
}
-}
\ No newline at end of file
+
+ private fun handleUsage(view: TextView?, type: TherapyEvent.Type, units: String) {
+ val therapyEvent = repository.getLastTherapyRecordUpToNow(type).blockingGet()
+ var usage = 0.0
+ if (therapyEvent is ValueWrapper.Existing) {
+ val startTime = therapyEvent.value.timestamp
+ usage = repository.getBolusesDataFromTime(startTime, true).blockingGet()
+ .filter { it.type != Bolus.Type.PRIMING }
+ .sumOf { t -> t.amount }
+ }
+ view?.text = " " + DecimalFormatter.to0Decimal(usage) + units
+ }
+}
diff --git a/plugins/main/src/main/res/layout/actions_stats_fragment.xml b/plugins/main/src/main/res/layout/actions_stats_fragment.xml
index 80e98496ea..1dda739d7c 100644
--- a/plugins/main/src/main/res/layout/actions_stats_fragment.xml
+++ b/plugins/main/src/main/res/layout/actions_stats_fragment.xml
@@ -57,8 +57,8 @@
android:layout_marginEnd="20dp"
android:gravity="center_vertical"
android:paddingStart="2dp"
- android:textSize="14sp"
- tools:ignore="RtlSymmetry" />
+ android:paddingEnd="0dp"
+ android:textSize="14sp" />
@@ -129,8 +129,9 @@
android:layout_marginEnd="20dp"
android:gravity="center_vertical"
android:paddingStart="2dp"
+ android:paddingEnd="0dp"
android:textSize="14sp"
- tools:ignore="RtlSymmetry" />
+ tools:text="15U" />
@@ -186,23 +187,25 @@
android:textSize="14sp" />
+ tools:text="22U" />
@@ -275,8 +278,9 @@
android:layout_marginEnd="20dp"
android:gravity="center_vertical"
android:paddingStart="2dp"
+ android:paddingEnd="0dp"
android:textSize="14sp"
- tools:ignore="RtlSymmetry" />
+ tools:text="70%" />
diff --git a/plugins/main/src/main/res/values/strings.xml b/plugins/main/src/main/res/values/strings.xml
index d0ca819e7e..f468ed8773 100644
--- a/plugins/main/src/main/res/values/strings.xml
+++ b/plugins/main/src/main/res/values/strings.xml
@@ -583,5 +583,6 @@
Data Broadcaster
+ usage:
-
\ No newline at end of file
+