From 7bbf480a7fd11db21e248b4497b584f64209df1a Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Thu, 11 Jun 2026 21:35:53 +0200 Subject: [PATCH] event: add support for height --- .../lunatracker/MainActivity.kt | 49 +++++++++++++++++++ .../adapters/LunaEventRecyclerAdapter.kt | 19 +++++-- .../lunatracker/entities/LunaEvent.kt | 5 ++ app/src/main/java/utils/NumericUtils.kt | 8 +++ .../main/res/layout/dialog_edit_height.xml | 39 +++++++++++++++ app/src/main/res/values/strings.xml | 6 +++ 6 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/layout/dialog_edit_height.xml diff --git a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt index fa3b5e8..e6aff4b 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt @@ -344,6 +344,53 @@ class MainActivity : AppCompatActivity() { alertDialog.show() } + fun addHeightEvent(event: LunaEvent) { + setToPreviousQuantity(event) + askHeightValue(event, true) { saveEvent(event) } + } + + fun askHeightValue(event: LunaEvent, showTime: Boolean, onPositive: () -> Unit) { + // Show number picker dialog + val d = AlertDialog.Builder(this) + val dialogView = layoutInflater.inflate(R.layout.dialog_edit_height, null) + d.setTitle(event.getDialogTitle(this)) + d.setMessage(event.getDialogMessage(this)) + d.setView(dialogView) + + val heightET = dialogView.findViewById(R.id.dialog_number_edittext) + heightET.setText(event.quantity.toString()) + + val unitTV = dialogView.findViewById(R.id.dialog_number_unit) + unitTV.text = NumericUtils(this).measurement_unit_height_base + + val dateTV = dialogView.findViewById(R.id.dialog_date_picker) + val pickedTime = dateTimePicker(event.time, dateTV) + + if (!showTime) { + dateTV.visibility = View.GONE + } + + d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> + val height = heightET.text.toString().toIntOrNull() + if (height != null) { + event.time = pickedTime.time.time / 1000 + event.quantity = height + onPositive() + } else { + Toast.makeText(this, R.string.toast_integer_error, Toast.LENGTH_SHORT).show() + } + + dialogInterface.dismiss() + } + + d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> + dialogInterface.dismiss() + } + + val alertDialog = d.create() + alertDialog.show() + } + fun addTemperatureEvent(event: LunaEvent) { setToPreviousQuantity(event) askTemperatureValue(event, true) { saveEvent(event) } @@ -868,6 +915,7 @@ class MainActivity : AppCompatActivity() { when (event.type) { LunaEvent.Type.BABY_BOTTLE -> askBabyBottleContent(event, false, updateValues) LunaEvent.Type.WEIGHT -> askWeightValue(event, false, updateValues) + LunaEvent.Type.HEIGHT -> askHeightValue(event, false, updateValues) LunaEvent.Type.DIAPERCHANGE_POO, LunaEvent.Type.DIAPERCHANGE_PEE, LunaEvent.Type.PUKE -> askAmountValue(event, false, updateValues) @@ -1289,6 +1337,7 @@ class MainActivity : AppCompatActivity() { when (type) { LunaEvent.Type.BABY_BOTTLE -> addBabyBottleEvent(event) LunaEvent.Type.WEIGHT -> addWeightEvent(event) + LunaEvent.Type.HEIGHT -> addHeightEvent(event) LunaEvent.Type.BREASTFEEDING_LEFT_NIPPLE -> addPlainEvent(event) LunaEvent.Type.BREASTFEEDING_BOTH_NIPPLE -> addPlainEvent(event) LunaEvent.Type.BREASTFEEDING_RIGHT_NIPPLE -> addPlainEvent(event) diff --git a/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt b/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt index bc926e0..4338eb2 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/adapters/LunaEventRecyclerAdapter.kt @@ -63,7 +63,7 @@ class LunaEventRecyclerAdapter: RecyclerView.Adapter 0) "+" else "" @@ -74,6 +74,19 @@ class LunaEventRecyclerAdapter: RecyclerView.Adapter 0) "+" else "" + quantityText += "\n($sign$differenceInHeight)" + if (differenceInHeight < 0) { + holder.quantity.setTextColor(ContextCompat.getColor(context, R.color.danger)) + } + } + } + holder.quantity.text = quantityText // Listeners @@ -88,12 +101,12 @@ class LunaEventRecyclerAdapter: RecyclerView.Adapter { DIAPERCHANGE_PEE, SLEEP, WEIGHT, + HEIGHT, MEDICINE, ENEMA, NOTE, @@ -145,6 +146,7 @@ class LunaEvent: Comparable { when (type) { Type.BABY_BOTTLE -> R.string.event_bottle_type Type.WEIGHT -> R.string.event_weight_type + Type.HEIGHT -> R.string.event_height_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 @@ -174,6 +176,7 @@ class LunaEvent: Comparable { Type.DIAPERCHANGE_PEE, Type.PUKE -> R.string.log_amount_dialog_description Type.WEIGHT -> R.string.log_weight_dialog_description + Type.HEIGHT -> R.string.log_height_dialog_description Type.SLEEP -> R.string.log_duration_dialog_description else -> R.string.log_unknown_dialog_description } @@ -185,6 +188,7 @@ class LunaEvent: Comparable { when (type) { Type.BABY_BOTTLE -> R.string.event_bottle_desc Type.WEIGHT -> R.string.event_weight_desc + Type.HEIGHT -> R.string.event_height_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 @@ -210,6 +214,7 @@ class LunaEvent: Comparable { when (type) { Type.BABY_BOTTLE -> R.string.event_type_item_bottle Type.WEIGHT -> R.string.event_type_item_weight + Type.HEIGHT -> R.string.event_type_item_height Type.BREASTFEEDING_LEFT_NIPPLE -> R.string.event_type_item_breastfeeding_left Type.BREASTFEEDING_BOTH_NIPPLE -> R.string.event_type_item_breastfeeding_both Type.BREASTFEEDING_RIGHT_NIPPLE -> R.string.event_type_item_breastfeeding_right diff --git a/app/src/main/java/utils/NumericUtils.kt b/app/src/main/java/utils/NumericUtils.kt index 6faadc5..3be0ca6 100644 --- a/app/src/main/java/utils/NumericUtils.kt +++ b/app/src/main/java/utils/NumericUtils.kt @@ -14,6 +14,7 @@ class NumericUtils (val context: Context) { val measurement_unit_liquid_base: String val measurement_unit_weight_base: String val measurement_unit_weight_tiny: String + val measurement_unit_height_base: String val measurement_unit_temperature_base: String private fun isMetricSystem(): Boolean { @@ -52,6 +53,12 @@ class NumericUtils (val context: Context) { else R.string.measurement_unit_weight_tiny_imperial ) + this.measurement_unit_height_base = context.getString( + if (isMetricSystem()) + R.string.measurement_unit_height_base_metric + else + R.string.measurement_unit_height_base_imperial + ) this.measurement_unit_temperature_base = context.getString( if (isMetricSystem()) R.string.measurement_unit_temperature_base_metric @@ -88,6 +95,7 @@ class NumericUtils (val context: Context) { when (type) { LunaEvent.Type.BABY_BOTTLE -> measurement_unit_liquid_base LunaEvent.Type.WEIGHT -> measurement_unit_weight_base + LunaEvent.Type.HEIGHT -> measurement_unit_height_base LunaEvent.Type.MEDICINE -> measurement_unit_weight_tiny LunaEvent.Type.TEMPERATURE -> measurement_unit_temperature_base else -> "" diff --git a/app/src/main/res/layout/dialog_edit_height.xml b/app/src/main/res/layout/dialog_edit_height.xml new file mode 100644 index 0000000..84c4b32 --- /dev/null +++ b/app/src/main/res/layout/dialog_edit_height.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2bb2fa..7d49fdb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ 🍼 🥣 ⚖️ + 📏 🤱⬅️ 🤱↔️ 🤱➡️️ @@ -26,6 +27,7 @@ 🍼 Bottle 🥣 Food ⚖️ Weight + 📏 Height 🤱⬅️ Nursing 🤱↔️ Nursing 🤱➡️️ Nursing @@ -45,6 +47,7 @@ Milk Bottle Food Weight + Height Nursing (left) Nursing (both) Nursing (right) @@ -130,14 +133,17 @@ Select the temperature: Insert the weight: + Insert the height: Set duration: ml g mg + cm fl oz. oz gr + in °F °C