UserEntryPresentationHelper

This commit is contained in:
AdrianLxM 2021-03-27 22:33:39 +01:00
parent 60f51cfab9
commit 7db2e112ee
7 changed files with 116 additions and 59 deletions

View file

@ -42,6 +42,7 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
@Inject lateinit var translator: Translator
@Inject lateinit var importExportPrefs: ImportExportPrefsInterface
@Inject lateinit var uel: UserEntryLogger
@Inject lateinit var userEntryPresentationHelper: UserEntryPresentationHelper
private val disposable = CompositeDisposable()
@ -112,9 +113,9 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
val current = entries[position]
holder.binding.date.text = dateUtil.dateAndTimeAndSecondsString(current.timestamp)
holder.binding.action.text = translator.translate(current.action)
holder.binding.action.setTextColor(resourceHelper.gc(current.action.colorGroup.colorId()))
if (current.s != "") {
holder.binding.s.text = current.s
holder.binding.action.setTextColor(resourceHelper.gc(userEntryPresentationHelper.colorId(current.action.colorGroup)))
if (current.remark != "") {
holder.binding.s.text = current.remark
holder.binding.s.visibility = View.VISIBLE
} else
holder.binding.s.visibility = View.GONE

View file

@ -96,7 +96,7 @@ class ClassicPrefsFormat @Inject constructor(
dateUtil.dateAndTimeAndSecondsString(entry.timestamp) + ";" +
dateUtil.timeString(entry.utcOffset) + ";" +
csvString(entry.action) + ";" +
csvString(entry.s) + ";" +
csvString(entry.remark) + ";" +
valueWithUnitToCsv(value)
}
} else {
@ -104,7 +104,7 @@ class ClassicPrefsFormat @Inject constructor(
dateUtil.dateAndTimeAndSecondsString(entry.timestamp) + ";" +
dateUtil.timeString(entry.utcOffset) + ";" +
csvString(entry.action) + ";" +
csvString(entry.s) + ";;"
csvString(entry.remark) + ";;"
}
}
}

View file

@ -1,19 +0,0 @@
package info.nightscout.androidaps.utils.extensions
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.database.entities.UserEntry.*
fun ColorGroup.colorId(): Int {
return when (this) {
ColorGroup.InsulinTreatment -> R.color.basal
ColorGroup.CarbTreatment -> R.color.carbs
ColorGroup.TT -> R.color.tempTargetConfirmation
ColorGroup.Profile -> R.color.white
ColorGroup.Loop -> R.color.loopClosed
ColorGroup.Careportal -> R.color.high
ColorGroup.Pump -> R.color.iob
ColorGroup.Aaps -> R.color.defaulttext
else -> R.color.defaulttext
}
}

View file

@ -0,0 +1,67 @@
package info.nightscout.androidaps.utils.extensions
import dagger.Reusable
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.database.entities.Translator
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.UserEntry.ColorGroup
import info.nightscout.androidaps.database.entities.UserEntry.Units
import info.nightscout.androidaps.database.entities.XXXValueWithUnit
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.resources.ResourceHelper
import javax.inject.Inject
@Reusable
class UserEntryPresentationHelper @Inject constructor(
private val translator: Translator,
private val profileFunction: ProfileFunction,
private val resourceHelper: ResourceHelper,
private val dateUtil: DateUtil
) {
fun colorId(colorGroup: ColorGroup): Int = when (colorGroup) {
ColorGroup.InsulinTreatment -> R.color.basal
ColorGroup.CarbTreatment -> R.color.carbs
ColorGroup.TT -> R.color.tempTargetConfirmation
ColorGroup.Profile -> R.color.white
ColorGroup.Loop -> R.color.loopClosed
ColorGroup.Careportal -> R.color.high
ColorGroup.Pump -> R.color.iob
ColorGroup.Aaps -> R.color.defaulttext
else -> R.color.defaulttext
}
fun listToPresentationString(list: List<XXXValueWithUnit>) =
list.joinToString(separator = " ", transform = this::toPresentationString)
private fun toPresentationString(valueWithUnit: XXXValueWithUnit): String = when (valueWithUnit) {
is XXXValueWithUnit.Gram -> "${valueWithUnit.value} ${translator.translate(Units.G)}"
is XXXValueWithUnit.Hour -> "${valueWithUnit.value} ${translator.translate(Units.H)}"
is XXXValueWithUnit.Minute -> "${valueWithUnit.value} ${translator.translate(Units.G)}"
is XXXValueWithUnit.Percent -> "${valueWithUnit.value} ${translator.translate(Units.Percent)}"
is XXXValueWithUnit.Insulin -> DecimalFormatter.to2Decimal(valueWithUnit.value) + translator.translate(UserEntry.Units.U)
is XXXValueWithUnit.UnitPerHour -> DecimalFormatter.to2Decimal(valueWithUnit.value) + translator.translate(UserEntry.Units.U_H)
is XXXValueWithUnit.SimpleInt -> valueWithUnit.value.toString()
is XXXValueWithUnit.SimpleString -> valueWithUnit.value
is XXXValueWithUnit.StringResource -> resourceHelper.gs(valueWithUnit.value, valueWithUnit.params.map(this::toPresentationString))
is XXXValueWithUnit.TherapyEventMeterType -> translator.translate(valueWithUnit.value)
is XXXValueWithUnit.TherapyEventTTReason -> translator.translate(valueWithUnit.value)
is XXXValueWithUnit.TherapyEventType -> translator.translate(valueWithUnit.value)
is XXXValueWithUnit.Timestamp -> dateUtil.dateAndTimeAndSecondsString(valueWithUnit.value)
is XXXValueWithUnit.Mgdl -> {
if (profileFunction.getUnits() == Constants.MGDL) DecimalFormatter.to0Decimal(valueWithUnit.value) + translator.translate(Units.Mg_Dl)
else DecimalFormatter.to1Decimal(valueWithUnit.value / Constants.MMOLL_TO_MGDL) + translator.translate(Units.Mmol_L)
}
is XXXValueWithUnit.Mmoll -> {
if (profileFunction.getUnits() == Constants.MGDL) DecimalFormatter.to0Decimal(valueWithUnit.value) + translator.translate(Units.Mmol_L)
else DecimalFormatter.to1Decimal(valueWithUnit.value * Constants.MMOLL_TO_MGDL) + translator.translate(Units.Mg_Dl)
}
XXXValueWithUnit.UNKNOWN -> ""
}
}

View file

@ -15,7 +15,8 @@ data class UserEntry(
override var timestamp: Long,
override var utcOffset: Long = TimeZone.getDefault().getOffset(timestamp).toLong(),
var action: Action,
var s: String,
var remark: String,
val sources: Sources,
var values: MutableList<ValueWithUnit>
) : DBEntry, DBEntryWithTime {
enum class Action (val colorGroup: ColorGroup) {

View file

@ -46,39 +46,6 @@ sealed class XXXValueWithUnit {
}
}
fun List<XXXValueWithUnit>.toPresentationString(translator: Translator) =
joinToString(separator = " ") { it.toPresentationString(translator) }
// TODO Move to destination module, then uncomment
fun XXXValueWithUnit.toPresentationString(translator: Translator) : String = when(this){
is XXXValueWithUnit.Gram -> "$value ${translator.translate(UserEntry.Units.G)}"
is XXXValueWithUnit.Hour -> "$value ${translator.translate(UserEntry.Units.H)}"
is XXXValueWithUnit.Minute -> "$value ${translator.translate(UserEntry.Units.G)}"
is XXXValueWithUnit.Percent -> "$value ${translator.translate(UserEntry.Units.Percent)}"
is XXXValueWithUnit.Insulin -> "" // DecimalFormatter.to2Decimal(value) + translator.translate(UserEntry.Units.U)
is XXXValueWithUnit.UnitPerHour -> "" // DecimalFormatter.to2Decimal(value) + translator.translate(UserEntry.Units.U_H)
is XXXValueWithUnit.SimpleInt -> value.toString()
is XXXValueWithUnit.SimpleString -> value
is XXXValueWithUnit.StringResource -> "" //resourceHelper.gs(value, params.map { it.toPresentationString(translator) }) // recursively resolve params
is XXXValueWithUnit.TherapyEventMeterType -> translator.translate(value)
is XXXValueWithUnit.TherapyEventTTReason -> translator.translate(value)
is XXXValueWithUnit.TherapyEventType -> translator.translate(value)
is XXXValueWithUnit.Timestamp -> "" // TODO dateUtil.dateAndTimeAndSecondsString(value)
is XXXValueWithUnit.Mgdl -> {
// if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(value) + translator.translate(UserEntry.Units.Mg_Dl)
// else DecimalFormatter.to1Decimal(value/Constants.MMOLL_TO_MGDL) + translator.translate(UserEntry.Units.Mmol_L)
""
}
is XXXValueWithUnit.Mmoll -> {
// if (profileFunction.getUnits()==Constants.MGDL) DecimalFormatter.to0Decimal(value) + translator.translate(UserEntry.Units.Mmol_L)
// else DecimalFormatter.to1Decimal(value * Constants.MMOLL_TO_MGDL) + translator.translate(UserEntry.Units.Mg_Dl)
""
}
XXXValueWithUnit.UNKNOWN -> ""
}
/***
@ -105,3 +72,43 @@ interface Translator {
fun translate(type: TherapyEvent.Type): String
fun translate(reason: TemporaryTarget.Reason): String
}
enum class Sources(val text: String) {
@SerializedName("TreatmentDialog") TreatmentDialog ("TreatmentDialog"),
@SerializedName("InsulinDialog") InsulinDialog ("InsulinDialog"),
@SerializedName("CarbDialog") CarbDialog ("CarbDialog"),
@SerializedName("WizardDialog") WizardDialog ("WizardDialog"),
@SerializedName("QuickWizard") QuickWizard ("QuickWizard"),
@SerializedName("ExtendedBolusDialog") ExtendedBolusDialog ("ExtendedBolusDialog"),
@SerializedName("TTDialog") TTDialog ("TTDialog"),
@SerializedName("ProfileSwitchDialog") ProfileSwitchDialog ("ProfileSwitchDialog"),
@SerializedName("LoopDialog") LoopDialog ("LoopDialog"),
@SerializedName("TempBasalDialog") TempBasalDialog ("TempBasalDialog"),
@SerializedName("CalibrationDialog") CalibrationDialog ("CalibrationDialog"),
@SerializedName("FillDialog") FillDialog ("FillDialog"),
@SerializedName("BgCheck") BgCheck ("BgCheck"),
@SerializedName("SensorInsert") SensorInsert ("SensorInsert"),
@SerializedName("BatteryChange") BatteryChange ("BatteryChange"),
@SerializedName("Note") Note ("Note"),
@SerializedName("Exercise") Exercise ("Exercise"),
@SerializedName("Question") Question ("Question"),
@SerializedName("Announcement") Announcement ("Announcement"),
@SerializedName("Actions") Actions ("Actions"), //From Actions plugin
@SerializedName("Automation") Automation ("Automation"), //From Automation plugin
@SerializedName("LocalProfile") LocalProfile ("LocalProfile"), //From LocalProfile plugin
@SerializedName("Loop") Loop ("Loop"), //From Loop plugin
@SerializedName("Maintenance") Maintenance ("Maintenance"), //From Maintenance plugin
@SerializedName("NSClient") NSClient ("NSClient"), //From NSClient plugin
@SerializedName("Pump") Pump ("Pump"), //From Pump plugin (for example from pump history)
@SerializedName("SMS") SMS ("SMS"), //From SMS plugin
@SerializedName("Treatments") Treatments ("Treatments"), //From Treatments plugin
@SerializedName("Wear") Wear ("Wear"), //From Wear plugin
@SerializedName("Food") Food ("Food"), //From Food plugin
@SerializedName("Unknown") Unknown ("Unknown") //if necessary
;
companion object {
fun fromString(source: String?) = values().firstOrNull { it.name == source } ?: Unknown
fun fromText(source: String?) = values().firstOrNull { it.text == source } ?: Unknown
}
}

View file

@ -13,7 +13,7 @@ class UserEntryTransaction(
database.userEntryDao.insert(UserEntry(
timestamp = System.currentTimeMillis(),
action = action,
s = s,
remark = s,
values = values
))
}