Exemple with CalibrationDialog and CarbsDialog.kt
Good Direction ?
This commit is contained in:
parent
274cac8ff9
commit
95e32c3406
|
@ -9,13 +9,11 @@ import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.Constants
|
import info.nightscout.androidaps.Constants
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.data.Profile
|
import info.nightscout.androidaps.data.Profile
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry
|
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||||
import info.nightscout.androidaps.databinding.DialogCalibrationBinding
|
import info.nightscout.androidaps.databinding.DialogCalibrationBinding
|
||||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
import info.nightscout.androidaps.interfaces.ProfileFunction
|
||||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus
|
||||||
import info.nightscout.androidaps.utils.extensions.fromStringKey
|
|
||||||
import info.nightscout.androidaps.utils.HtmlHelper
|
import info.nightscout.androidaps.utils.HtmlHelper
|
||||||
import info.nightscout.androidaps.utils.XdripCalibrations
|
import info.nightscout.androidaps.utils.XdripCalibrations
|
||||||
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
|
@ -80,7 +78,7 @@ class CalibrationDialog : DialogFragmentWithDate() {
|
||||||
if (bg > 0) {
|
if (bg > 0) {
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.overview_calibration), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||||
uel.log(Action.CALIBRATION, d1 = ValueWithUnit(bg, if (units == Constants.MMOL) Units.Mg_Dl else Units.Mmol_L))
|
uel.log(Action.CALIBRATION, ValueWithUnit(bg, if (units == Constants.MMOL) Units.Mmol_L else Units.Mg_Dl))
|
||||||
xdripCalibrations.sendIntent(bg)
|
xdripCalibrations.sendIntent(bg)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import info.nightscout.androidaps.Constants
|
||||||
import info.nightscout.androidaps.MainApp
|
import info.nightscout.androidaps.MainApp
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.data.Profile
|
import info.nightscout.androidaps.data.Profile
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry
|
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||||
import info.nightscout.androidaps.databinding.DialogCarbsBinding
|
import info.nightscout.androidaps.databinding.DialogCarbsBinding
|
||||||
import info.nightscout.androidaps.db.CareportalEvent
|
import info.nightscout.androidaps.db.CareportalEvent
|
||||||
import info.nightscout.androidaps.db.Source
|
import info.nightscout.androidaps.db.Source
|
||||||
|
@ -213,7 +213,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
||||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.carbs), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.carbs), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
|
||||||
when {
|
when {
|
||||||
activitySelected -> {
|
activitySelected -> {
|
||||||
uel.log(UserEntry.Action.TT_ACTIVITY, d1 = activityTT, i1 = activityTTDuration)
|
uel.log(Action.TT_ACTIVITY, ValueWithUnit(activityTT, if (units == Constants.MMOL) Units.Mmol_L else Units.Mg_Dl) , ValueWithUnit(activityTTDuration, Units.M))
|
||||||
val tempTarget = TempTarget()
|
val tempTarget = TempTarget()
|
||||||
.date(System.currentTimeMillis())
|
.date(System.currentTimeMillis())
|
||||||
.duration(activityTTDuration)
|
.duration(activityTTDuration)
|
||||||
|
@ -225,7 +225,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
eatingSoonSelected -> {
|
eatingSoonSelected -> {
|
||||||
uel.log(UserEntry.Action.TT_EATING_SOON, d1 = eatingSoonTT, i1 = eatingSoonTTDuration)
|
uel.log(Action.TT_EATING_SOON, ValueWithUnit(eatingSoonTT, if (units == Constants.MMOL) Units.Mmol_L else Units.Mg_Dl) , ValueWithUnit(eatingSoonTTDuration, Units.M))
|
||||||
val tempTarget = TempTarget()
|
val tempTarget = TempTarget()
|
||||||
.date(System.currentTimeMillis())
|
.date(System.currentTimeMillis())
|
||||||
.duration(eatingSoonTTDuration)
|
.duration(eatingSoonTTDuration)
|
||||||
|
@ -237,7 +237,7 @@ class CarbsDialog : DialogFragmentWithDate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
hypoSelected -> {
|
hypoSelected -> {
|
||||||
uel.log(UserEntry.Action.TT_HYPO, d1 = hypoTT, i1 = hypoTTDuration)
|
uel.log(Action.TT_HYPO, ValueWithUnit(hypoTT, if (units == Constants.MMOL) Units.Mmol_L else Units.Mg_Dl) , ValueWithUnit(hypoTTDuration, Units.M))
|
||||||
val tempTarget = TempTarget()
|
val tempTarget = TempTarget()
|
||||||
.date(System.currentTimeMillis())
|
.date(System.currentTimeMillis())
|
||||||
.duration(hypoTTDuration)
|
.duration(hypoTTDuration)
|
||||||
|
@ -250,10 +250,10 @@ class CarbsDialog : DialogFragmentWithDate() {
|
||||||
}
|
}
|
||||||
if (carbsAfterConstraints > 0) {
|
if (carbsAfterConstraints > 0) {
|
||||||
if (duration == 0) {
|
if (duration == 0) {
|
||||||
uel.log(UserEntry.Action.CARBS, d1 = carbsAfterConstraints.toDouble(), i1 = timeOffset)
|
uel.log(Action.CARBS, ValueWithUnit(carbsAfterConstraints.toDouble(), Units.G), ValueWithUnit(timeOffset, Units.M))
|
||||||
carbsGenerator.createCarb(carbsAfterConstraints, time, CareportalEvent.CARBCORRECTION, notes)
|
carbsGenerator.createCarb(carbsAfterConstraints, time, CareportalEvent.CARBCORRECTION, notes)
|
||||||
} else {
|
} else {
|
||||||
uel.log(UserEntry.Action.CARBS, d1 = carbsAfterConstraints.toDouble(), i1 = timeOffset, i2 = duration)
|
uel.log(Action.CARBS, ValueWithUnit(carbsAfterConstraints.toDouble(), Units.G), ValueWithUnit(timeOffset,Units.M), ValueWithUnit(duration, Units.H))
|
||||||
carbsGenerator.generateCarbs(carbsAfterConstraints, time, duration, notes)
|
carbsGenerator.generateCarbs(carbsAfterConstraints, time, duration, notes)
|
||||||
nsUpload.uploadEvent(CareportalEvent.NOTE, DateUtil.now() - 2000, resourceHelper.gs(R.string.generated_ecarbs_note, carbsAfterConstraints, duration, timeOffset))
|
nsUpload.uploadEvent(CareportalEvent.NOTE, DateUtil.now() - 2000, resourceHelper.gs(R.string.generated_ecarbs_note, carbsAfterConstraints, duration, timeOffset))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package info.nightscout.androidaps.logging
|
package info.nightscout.androidaps.logging
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.Constants
|
||||||
import info.nightscout.androidaps.database.AppRepository
|
import info.nightscout.androidaps.database.AppRepository
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry
|
|
||||||
import info.nightscout.androidaps.database.entities.UserEntry.*
|
import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||||
import info.nightscout.androidaps.database.transactions.UserEntryTransaction
|
import info.nightscout.androidaps.database.transactions.UserEntryTransaction
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
|
@ -20,20 +20,62 @@ class UserEntryLogger @Inject constructor(
|
||||||
|
|
||||||
private val compositeDisposable = CompositeDisposable()
|
private val compositeDisposable = CompositeDisposable()
|
||||||
|
|
||||||
fun log(action: UserEntry.Action, s: String = "", d1: ValueWithUnit = ValueWithUnit(0.0,Units.None), d2: ValueWithUnit = ValueWithUnit(0.0,Units.None), i1: ValueWithUnit = ValueWithUnit(0,Units.None), i2: ValueWithUnit = ValueWithUnit(0,Units.None)) {
|
fun log(action: Action, s: String, vararg listvalues: ValueWithUnit) {
|
||||||
|
val values = mutableListOf<ValueWithUnit>()
|
||||||
|
for (v in listvalues){
|
||||||
|
var vConverted = v
|
||||||
|
// Convertion to always store all values in the same units in database
|
||||||
|
when(v.unit) {
|
||||||
|
Units.Mmol_L -> { vConverted = ValueWithUnit(v.dValue * Constants.MMOLL_TO_MGDL, Units.Mg_Dl)}
|
||||||
|
}
|
||||||
|
values.add(vConverted)
|
||||||
|
}
|
||||||
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||||
action = action,
|
action = action,
|
||||||
s = s,
|
s = s,
|
||||||
d1 = d1,
|
values = values
|
||||||
d2 = d2,
|
|
||||||
i1 = i1,
|
|
||||||
i2 = i2
|
|
||||||
))
|
))
|
||||||
.subscribeOn(aapsSchedulers.io)
|
.subscribeOn(aapsSchedulers.io)
|
||||||
.observeOn(aapsSchedulers.io)
|
.observeOn(aapsSchedulers.io)
|
||||||
.subscribeBy(
|
.subscribeBy(
|
||||||
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") },
|
//onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") },
|
||||||
onComplete = { aapsLogger.debug("USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") }
|
//onComplete = { aapsLogger.debug("USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun log(action: Action, vararg listvalues: ValueWithUnit) {
|
||||||
|
val values = mutableListOf<ValueWithUnit>()
|
||||||
|
for (v in listvalues){
|
||||||
|
var vConverted = v
|
||||||
|
// Convertion to always store all values in the same units in database
|
||||||
|
when(v.unit) {
|
||||||
|
Units.Mmol_L -> { vConverted = ValueWithUnit(v.dValue * Constants.MMOLL_TO_MGDL, Units.Mg_Dl)}
|
||||||
|
}
|
||||||
|
values.add(vConverted)
|
||||||
|
}
|
||||||
|
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||||
|
action = action,
|
||||||
|
s = "",
|
||||||
|
values = values
|
||||||
|
))
|
||||||
|
.subscribeOn(aapsSchedulers.io)
|
||||||
|
.observeOn(aapsSchedulers.io)
|
||||||
|
.subscribeBy(
|
||||||
|
//onError = { aapsLogger.debug("ERRORED USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") },
|
||||||
|
//onComplete = { aapsLogger.debug("USER ENTRY: $action $s ${if (d1.dValue != 0.0) d1 else ""} ${if (d2.dValue != 0.0) d2 else ""} ${if (i1.iValue != 0) i1 else ""} ${if (i2.iValue != 0) i2 else ""}") }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun log(action: Action) {
|
||||||
|
compositeDisposable += repository.runTransaction(UserEntryTransaction(
|
||||||
|
action = action,
|
||||||
|
s = ""
|
||||||
|
))
|
||||||
|
.subscribeOn(aapsSchedulers.io)
|
||||||
|
.observeOn(aapsSchedulers.io)
|
||||||
|
.subscribeBy(
|
||||||
|
onError = { aapsLogger.debug("ERRORED USER ENTRY: $action") },
|
||||||
|
onComplete = { aapsLogger.debug("USER ENTRY: $action") }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -20,8 +20,10 @@ class Converters {
|
||||||
fun fromValueWithUnit(valueWithUnit: UserEntry.ValueWithUnit?): String? {
|
fun fromValueWithUnit(valueWithUnit: UserEntry.ValueWithUnit?): String? {
|
||||||
if (valueWithUnit == null) return null
|
if (valueWithUnit == null) return null
|
||||||
val jsonObject = JSONObject()
|
val jsonObject = JSONObject()
|
||||||
|
jsonObject.put("sValue", valueWithUnit.sValue)
|
||||||
jsonObject.put("dValue", valueWithUnit.dValue)
|
jsonObject.put("dValue", valueWithUnit.dValue)
|
||||||
jsonObject.put("iValue", valueWithUnit.iValue)
|
jsonObject.put("iValue", valueWithUnit.iValue)
|
||||||
|
jsonObject.put("lValue", valueWithUnit.lValue)
|
||||||
jsonObject.put("unit", valueWithUnit.unit.name)
|
jsonObject.put("unit", valueWithUnit.unit.name)
|
||||||
return jsonObject.toString()
|
return jsonObject.toString()
|
||||||
}
|
}
|
||||||
|
@ -30,7 +32,34 @@ class Converters {
|
||||||
fun toValueWithUnit(jsonString: String?): UserEntry.ValueWithUnit? {
|
fun toValueWithUnit(jsonString: String?): UserEntry.ValueWithUnit? {
|
||||||
if (jsonString == null) return null
|
if (jsonString == null) return null
|
||||||
val jsonObject = JSONObject(jsonString)
|
val jsonObject = JSONObject(jsonString)
|
||||||
return UserEntry.ValueWithUnit(jsonObject.getDouble("dValue"), jsonObject.getInt("iValue"),UserEntry.Units.fromString(jsonObject.getString("unit")) )
|
return UserEntry.ValueWithUnit(jsonObject.getString("sValue"), jsonObject.getDouble("dValue"), jsonObject.getInt("iValue"), jsonObject.getLong("lValue"), UserEntry.Units.fromString(jsonObject.getString("unit")) )
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
fun fromMutableListOfValueWithUnit(values: MutableList<UserEntry.ValueWithUnit>?): String? {
|
||||||
|
if (values == null) return null
|
||||||
|
val jsonArray = JSONArray()
|
||||||
|
values.forEach {
|
||||||
|
val jsonObject = JSONObject()
|
||||||
|
jsonObject.put("dValue", it.dValue)
|
||||||
|
jsonObject.put("iValue", it.iValue)
|
||||||
|
jsonObject.put("lValue", it.lValue)
|
||||||
|
jsonObject.put("unit", it.unit.name)
|
||||||
|
jsonArray.put(jsonObject)
|
||||||
|
}
|
||||||
|
return jsonArray.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
fun toMutableListOfValueWithUnit(jsonString: String?): List<Block>? {
|
||||||
|
if (jsonString == null) return null
|
||||||
|
val jsonArray = JSONArray(jsonString)
|
||||||
|
val list = mutableListOf<Block>()
|
||||||
|
for (i in 0 until jsonArray.length()) {
|
||||||
|
val jsonObject = jsonArray.getJSONObject(i)
|
||||||
|
list.add(Block(jsonObject.getLong("duration"), jsonObject.getDouble("amount")))
|
||||||
|
}
|
||||||
|
return list
|
||||||
}
|
}
|
||||||
|
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
|
|
|
@ -17,10 +17,7 @@ data class UserEntry(
|
||||||
override var utcOffset: Long = TimeZone.getDefault().getOffset(timestamp).toLong(),
|
override var utcOffset: Long = TimeZone.getDefault().getOffset(timestamp).toLong(),
|
||||||
var action: Action,
|
var action: Action,
|
||||||
var s: String,
|
var s: String,
|
||||||
var d1: ValueWithUnit,
|
var values: MutableList<ValueWithUnit>
|
||||||
var d2: ValueWithUnit,
|
|
||||||
var i1: ValueWithUnit,
|
|
||||||
var i2: ValueWithUnit
|
|
||||||
) : DBEntry, DBEntryWithTime {
|
) : DBEntry, DBEntryWithTime {
|
||||||
enum class Action () {
|
enum class Action () {
|
||||||
@SerializedName("BOLUS") BOLUS,
|
@SerializedName("BOLUS") BOLUS,
|
||||||
|
@ -123,16 +120,16 @@ data class UserEntry(
|
||||||
fun fromString(source: String?) = UserEntry.Action.values().firstOrNull { it.name == source } ?: UserEntry.Action.UNKNOWN
|
fun fromString(source: String?) = UserEntry.Action.values().firstOrNull { it.name == source } ?: UserEntry.Action.UNKNOWN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data class ValueWithUnit (val dValue: Double, val iValue: Int, val unit: Units) {
|
data class ValueWithUnit (val dValue: Double, val iValue: Int, val lValue: Long, val unit: Units) {
|
||||||
constructor(value:Int, unit:Units) : this(0.0, value, unit)
|
constructor(dvalue:Double, unit:Units) : this(dvalue,0, 0, unit)
|
||||||
constructor(value:Double, unit:Units) : this(value,0, unit)
|
constructor(ivalue:Int, unit:Units) : this(0.0, ivalue, 0, unit)
|
||||||
|
constructor(lvalue:Long, unit:Units) : this(0.0,0, lvalue, unit)
|
||||||
|
|
||||||
}
|
}
|
||||||
enum class Units {
|
enum class Units {
|
||||||
@SerializedName("None") None,
|
@SerializedName("None") None,
|
||||||
@SerializedName("Mg_Dl") Mg_Dl,
|
@SerializedName("Mg_Dl") Mg_Dl,
|
||||||
@SerializedName("Mmol_L") Mmol_L,
|
@SerializedName("Mmol_L") Mmol_L,
|
||||||
|
@SerializedName("Timestamp") Timestamp,
|
||||||
@SerializedName("U") U,
|
@SerializedName("U") U,
|
||||||
@SerializedName("U_H") U_H,
|
@SerializedName("U_H") U_H,
|
||||||
@SerializedName("G") G,
|
@SerializedName("G") G,
|
||||||
|
|
|
@ -5,23 +5,16 @@ import info.nightscout.androidaps.database.entities.UserEntry.*
|
||||||
|
|
||||||
class UserEntryTransaction(
|
class UserEntryTransaction(
|
||||||
val action: Action,
|
val action: Action,
|
||||||
val s: String = "",
|
val s: String,
|
||||||
val d1: ValueWithUnit = ValueWithUnit(0.0, Units.None),
|
val values: MutableList<ValueWithUnit> = mutableListOf<ValueWithUnit>()
|
||||||
val d2: ValueWithUnit = ValueWithUnit(0.0, Units.None),
|
|
||||||
val i1: ValueWithUnit = ValueWithUnit(0, Units.None),
|
|
||||||
val i2: ValueWithUnit = ValueWithUnit(0, Units.None)
|
|
||||||
) : Transaction<Unit>() {
|
) : Transaction<Unit>() {
|
||||||
|
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
|
||||||
database.userEntryDao.insert(UserEntry(
|
database.userEntryDao.insert(UserEntry(
|
||||||
timestamp = System.currentTimeMillis(),
|
timestamp = System.currentTimeMillis(),
|
||||||
action = action,
|
action = action,
|
||||||
s = s,
|
s = s,
|
||||||
d1 = d1,
|
values = values
|
||||||
d2 = d2,
|
|
||||||
i1 = i1,
|
|
||||||
i2 = i2
|
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue