123 lines
4.4 KiB
Kotlin
123 lines
4.4 KiB
Kotlin
package it.danieleverducci.lunatracker.entities
|
|
|
|
import android.content.Context
|
|
import it.danieleverducci.lunatracker.R
|
|
import org.json.JSONObject
|
|
import java.util.Date
|
|
|
|
/**
|
|
* Represents a logged event.
|
|
* It encloses, but doesn't parse entirely, a jsonObject. This was done to
|
|
* allow expandability and backwards compatibility (if a field is added in a
|
|
* release, it is simply ignored by previous ones).
|
|
*/
|
|
class LunaEvent {
|
|
|
|
companion object {
|
|
val TYPE_BABY_BOTTLE = "BABY_BOTTLE"
|
|
val TYPE_WEIGHT = "WEIGHT"
|
|
val TYPE_BREASTFEEDING_LEFT_NIPPLE = "BREASTFEEDING_LEFT_NIPPLE"
|
|
val TYPE_BREASTFEEDING_BOTH_NIPPLE = "BREASTFEEDING_BOTH_NIPPLE"
|
|
val TYPE_BREASTFEEDING_RIGHT_NIPPLE = "BREASTFEEDING_RIGHT_NIPPLE"
|
|
val TYPE_DIAPERCHANGE_POO = "DIAPERCHANGE_POO"
|
|
val TYPE_DIAPERCHANGE_PEE = "DIAPERCHANGE_PEE"
|
|
val TYPE_MEDICINE = "MEDICINE"
|
|
val TYPE_ENEMA = "ENEMA"
|
|
val TYPE_NOTE = "NOTE"
|
|
val TYPE_CUSTOM = "CUSTOM"
|
|
val TYPE_COLIC = "COLIC"
|
|
val TYPE_TEMPERATURE = "TEMPERATURE"
|
|
}
|
|
|
|
private val jo: JSONObject
|
|
|
|
var time: Long // In unix time (seconds since 1970)
|
|
get() = jo.getLong("time")
|
|
set(value) {
|
|
jo.put("time", value)
|
|
}
|
|
var type: String
|
|
get(): String = jo.getString("type")
|
|
set(value) {
|
|
jo.put("type", value)
|
|
}
|
|
var quantity: Int
|
|
get() = jo.optInt("quantity")
|
|
set(value) {
|
|
if (value > 0)
|
|
jo.put("quantity", value)
|
|
}
|
|
var notes: String
|
|
get(): String = jo.optString("notes")
|
|
set(value) {
|
|
jo.put("notes", value)
|
|
}
|
|
|
|
constructor(jo: JSONObject) {
|
|
this.jo = jo
|
|
// A minimal LunaEvent should have at least time and type
|
|
if (!jo.has("time") || !jo.has("type"))
|
|
throw IllegalArgumentException("JSONObject is not a LunaEvent")
|
|
}
|
|
|
|
constructor(type: String) {
|
|
this.jo = JSONObject()
|
|
this.time = System.currentTimeMillis() / 1000
|
|
this.type = type
|
|
}
|
|
|
|
constructor(type: String, quantity: Int) {
|
|
this.jo = JSONObject()
|
|
this.time = System.currentTimeMillis() / 1000
|
|
this.type = type
|
|
this.quantity = quantity
|
|
}
|
|
|
|
fun getTypeEmoji(context: Context): String {
|
|
return context.getString(
|
|
when (type) {
|
|
TYPE_BABY_BOTTLE -> R.string.event_bottle_type
|
|
TYPE_WEIGHT -> R.string.event_scale_type
|
|
TYPE_BREASTFEEDING_LEFT_NIPPLE -> R.string.event_breastfeeding_left_type
|
|
TYPE_BREASTFEEDING_BOTH_NIPPLE -> R.string.event_breastfeeding_both_type
|
|
TYPE_BREASTFEEDING_RIGHT_NIPPLE -> R.string.event_breastfeeding_right_type
|
|
TYPE_DIAPERCHANGE_POO -> R.string.event_diaperchange_poo_type
|
|
TYPE_DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_type
|
|
TYPE_MEDICINE -> R.string.event_medicine_type
|
|
TYPE_ENEMA -> R.string.event_enema_type
|
|
TYPE_NOTE -> R.string.event_note_type
|
|
TYPE_TEMPERATURE -> R.string.event_temperature_type
|
|
TYPE_COLIC -> R.string.event_colic_type
|
|
else -> R.string.event_unknown_type
|
|
}
|
|
)
|
|
}
|
|
|
|
fun getTypeDescription(context: Context): String {
|
|
return context.getString(
|
|
when (type) {
|
|
TYPE_BABY_BOTTLE -> R.string.event_bottle_desc
|
|
TYPE_WEIGHT -> R.string.event_scale_desc
|
|
TYPE_BREASTFEEDING_LEFT_NIPPLE -> R.string.event_breastfeeding_left_desc
|
|
TYPE_BREASTFEEDING_BOTH_NIPPLE -> R.string.event_breastfeeding_both_desc
|
|
TYPE_BREASTFEEDING_RIGHT_NIPPLE -> R.string.event_breastfeeding_right_desc
|
|
TYPE_DIAPERCHANGE_POO -> R.string.event_diaperchange_poo_desc
|
|
TYPE_DIAPERCHANGE_PEE -> R.string.event_diaperchange_pee_desc
|
|
TYPE_MEDICINE -> R.string.event_medicine_desc
|
|
TYPE_ENEMA -> R.string.event_enema_desc
|
|
TYPE_NOTE -> R.string.event_note_desc
|
|
TYPE_TEMPERATURE -> R.string.event_temperature_desc
|
|
TYPE_COLIC -> R.string.event_colic_desc
|
|
else -> R.string.event_unknown_desc
|
|
}
|
|
)
|
|
}
|
|
|
|
fun toJson(): JSONObject {
|
|
return jo
|
|
}
|
|
|
|
override fun toString(): String {
|
|
return "${type} qty: $quantity time: ${Date(time * 1000)}"
|
|
}
|
|
} |