forked from penguin86/luna-tracker
		
	Compare commits
	
		
			10 Commits
		
	
	
		
			improvemen
			...
			6af9c09a89
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6af9c09a89 | |||
| af88ec5ace | |||
| eeebaeb7f3 | |||
| 242bfe39ae | |||
| be77c7fb22 | |||
| a7c44df553 | |||
| 928112adb8 | |||
| b90dc92874 | |||
| 36481a1194 | |||
| d4adb9d981 | 
							
								
								
									
										1
									
								
								.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					LunaTracker
 | 
				
			||||||
							
								
								
									
										6
									
								
								.idea/AndroidProjectSystem.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/AndroidProjectSystem.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="AndroidProjectSystem">
 | 
				
			||||||
 | 
					    <option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
							
								
								
									
										6
									
								
								.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="CompilerConfiguration">
 | 
				
			||||||
 | 
					    <bytecodeTargetLevel target="21" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
# 🌜 LunaTracker 🌛
 | 
					# 🌜 LunaTracker 🌛
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/it/packages/it.danieleverducci.lunatracker/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LunaTracker is a newborn baby tracking app.
 | 
					LunaTracker is a newborn baby tracking app.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Parenting can be tough. You get home from the hospital, exhausted, with this little fragile unknown thingy that has no user manual and a single way to let you know something's not ok: crying.
 | 
					Parenting can be tough. You get home from the hospital, exhausted, with this little fragile unknown thingy that has no user manual and a single way to let you know something's not ok: crying.
 | 
				
			||||||
@@ -11,7 +13,8 @@ Dedicated to my daughter Luna.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Thanks for the valuable contributions to:
 | 
					## Thanks for the valuable contributions to:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Chepycou (French translation)
 | 
					- Chepycou (French translation)
 | 
				
			||||||
Daniel Neubauer (German translation)
 | 
					- Daniel Neubauer (German translation)
 | 
				
			||||||
 | 
					- Moritz Warning (Various bugfixes and new features)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ android {
 | 
				
			|||||||
        applicationId = "it.danieleverducci.lunatracker"
 | 
					        applicationId = "it.danieleverducci.lunatracker"
 | 
				
			||||||
        minSdk = 21
 | 
					        minSdk = 21
 | 
				
			||||||
        targetSdk = 34
 | 
					        targetSdk = 34
 | 
				
			||||||
        versionCode = 4
 | 
					        versionCode = 5
 | 
				
			||||||
        versionName = "0.6"
 | 
					        versionName = "0.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
 | 
					        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -260,6 +260,26 @@ class MainActivity : AppCompatActivity() {
 | 
				
			|||||||
        alertDialog.show()
 | 
					        alertDialog.show()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fun askPukeValue() {
 | 
				
			||||||
 | 
					        val d = AlertDialog.Builder(this)
 | 
				
			||||||
 | 
					        val dialogView = layoutInflater.inflate(R.layout.puke_dialog, null)
 | 
				
			||||||
 | 
					        d.setTitle(R.string.log_puke_dialog_title)
 | 
				
			||||||
 | 
					        d.setMessage(R.string.log_puke_dialog_description)
 | 
				
			||||||
 | 
					        d.setView(dialogView)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val spinner = dialogView.findViewById<Spinner>(R.id.dialog_puke_value)
 | 
				
			||||||
 | 
					        spinner.adapter = ArrayAdapter.createFromResource(this, R.array.AmountLabels, android.R.layout.simple_spinner_dropdown_item)
 | 
				
			||||||
 | 
					        spinner.setSelection(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        d.setPositiveButton(android.R.string.ok) { dialogInterface, i ->
 | 
				
			||||||
 | 
					            val pos = spinner.selectedItemPosition
 | 
				
			||||||
 | 
					            logEvent(LunaEvent(LunaEvent.TYPE_PUKE, pos))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() }
 | 
				
			||||||
 | 
					        val alertDialog = d.create()
 | 
				
			||||||
 | 
					        alertDialog.show()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun askNotes(lunaEvent: LunaEvent) {
 | 
					    fun askNotes(lunaEvent: LunaEvent) {
 | 
				
			||||||
        val d = AlertDialog.Builder(this)
 | 
					        val d = AlertDialog.Builder(this)
 | 
				
			||||||
        val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
 | 
					        val dialogView = layoutInflater.inflate(R.layout.dialog_notes, null)
 | 
				
			||||||
@@ -787,6 +807,10 @@ class MainActivity : AppCompatActivity() {
 | 
				
			|||||||
                askTemperatureValue()
 | 
					                askTemperatureValue()
 | 
				
			||||||
                dismiss()
 | 
					                dismiss()
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					            contentView.findViewById<View>(R.id.button_puke).setOnClickListener({
 | 
				
			||||||
 | 
					                askPukeValue()
 | 
				
			||||||
 | 
					                dismiss()
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
            contentView.findViewById<View>(R.id.button_colic).setOnClickListener({
 | 
					            contentView.findViewById<View>(R.id.button_colic).setOnClickListener({
 | 
				
			||||||
                logEvent(
 | 
					                logEvent(
 | 
				
			||||||
                    LunaEvent(LunaEvent.TYPE_COLIC)
 | 
					                    LunaEvent(LunaEvent.TYPE_COLIC)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@ class LunaEvent: Comparable<LunaEvent> {
 | 
				
			|||||||
        const val TYPE_COLIC = "COLIC"
 | 
					        const val TYPE_COLIC = "COLIC"
 | 
				
			||||||
        const val TYPE_TEMPERATURE = "TEMPERATURE"
 | 
					        const val TYPE_TEMPERATURE = "TEMPERATURE"
 | 
				
			||||||
        const val TYPE_FOOD = "FOOD"
 | 
					        const val TYPE_FOOD = "FOOD"
 | 
				
			||||||
 | 
					        const val TYPE_PUKE = "PUKE"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private val jo: JSONObject
 | 
					    private val jo: JSONObject
 | 
				
			||||||
@@ -90,6 +91,7 @@ class LunaEvent: Comparable<LunaEvent> {
 | 
				
			|||||||
                TYPE_TEMPERATURE -> R.string.event_temperature_type
 | 
					                TYPE_TEMPERATURE -> R.string.event_temperature_type
 | 
				
			||||||
                TYPE_COLIC -> R.string.event_colic_type
 | 
					                TYPE_COLIC -> R.string.event_colic_type
 | 
				
			||||||
                TYPE_FOOD -> R.string.event_food_type
 | 
					                TYPE_FOOD -> R.string.event_food_type
 | 
				
			||||||
 | 
					                TYPE_PUKE -> R.string.event_puke_type
 | 
				
			||||||
                else -> R.string.event_unknown_type
 | 
					                else -> R.string.event_unknown_type
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -111,6 +113,7 @@ class LunaEvent: Comparable<LunaEvent> {
 | 
				
			|||||||
                TYPE_TEMPERATURE -> R.string.event_temperature_desc
 | 
					                TYPE_TEMPERATURE -> R.string.event_temperature_desc
 | 
				
			||||||
                TYPE_COLIC -> R.string.event_colic_desc
 | 
					                TYPE_COLIC -> R.string.event_colic_desc
 | 
				
			||||||
                TYPE_FOOD -> R.string.event_food_desc
 | 
					                TYPE_FOOD -> R.string.event_food_desc
 | 
				
			||||||
 | 
					                TYPE_PUKE -> R.string.event_puke_desc
 | 
				
			||||||
                else -> R.string.event_unknown_desc
 | 
					                else -> R.string.event_unknown_desc
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,9 +13,9 @@ import java.io.FilenameFilter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class FileLogbookRepository: LogbookRepository {
 | 
					class FileLogbookRepository: LogbookRepository {
 | 
				
			||||||
    companion object {
 | 
					    companion object {
 | 
				
			||||||
        val TAG = "FileLogbookRepository"
 | 
					        const val TAG = "FileLogbookRepository"
 | 
				
			||||||
        val FILE_NAME_START = "data"
 | 
					        const val FILE_NAME_START = "data"
 | 
				
			||||||
        val FILE_NAME_END = ".json"
 | 
					        const val FILE_NAME_END = ".json"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun loadLogbook(context: Context, name: String, listener: LogbookLoadedListener) {
 | 
					    override fun loadLogbook(context: Context, name: String, listener: LogbookLoadedListener) {
 | 
				
			||||||
@@ -32,7 +32,7 @@ class FileLogbookRepository: LogbookRepository {
 | 
				
			|||||||
    fun loadLogbook(context: Context, name: String): Logbook {
 | 
					    fun loadLogbook(context: Context, name: String): Logbook {
 | 
				
			||||||
        val logbook = Logbook(name)
 | 
					        val logbook = Logbook(name)
 | 
				
			||||||
        val fileName = getFileName(name)
 | 
					        val fileName = getFileName(name)
 | 
				
			||||||
        val file = File(context.getFilesDir(), fileName)
 | 
					        val file = File(context.filesDir, fileName)
 | 
				
			||||||
        val json = FileInputStream(file).bufferedReader().use { it.readText() }
 | 
					        val json = FileInputStream(file).bufferedReader().use { it.readText() }
 | 
				
			||||||
        val ja = JSONArray(json)
 | 
					        val ja = JSONArray(json)
 | 
				
			||||||
        for (i in 0 until ja.length()) {
 | 
					        for (i in 0 until ja.length()) {
 | 
				
			||||||
@@ -58,7 +58,7 @@ class FileLogbookRepository: LogbookRepository {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fun saveLogbook(context: Context, logbook: Logbook) {
 | 
					    fun saveLogbook(context: Context, logbook: Logbook) {
 | 
				
			||||||
        val fileName = getFileName(logbook.name)
 | 
					        val fileName = getFileName(logbook.name)
 | 
				
			||||||
        val file = File(context.getFilesDir(), fileName)
 | 
					        val file = File(context.filesDir, fileName)
 | 
				
			||||||
        val ja = JSONArray()
 | 
					        val ja = JSONArray()
 | 
				
			||||||
        for (l in logbook.logs) {
 | 
					        for (l in logbook.logs) {
 | 
				
			||||||
            ja.put(l.toJson())
 | 
					            ja.put(l.toJson())
 | 
				
			||||||
@@ -82,7 +82,7 @@ class FileLogbookRepository: LogbookRepository {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun listLogbooks(context: Context): ArrayList<String> {
 | 
					    private fun listLogbooks(context: Context): ArrayList<String> {
 | 
				
			||||||
        val logbooksFileNames = context.getFilesDir().list(object: FilenameFilter {
 | 
					        val logbooksFileNames = context.filesDir.list(object: FilenameFilter {
 | 
				
			||||||
            override fun accept(dir: File?, name: String?): Boolean {
 | 
					            override fun accept(dir: File?, name: String?): Boolean {
 | 
				
			||||||
                if (name == null)
 | 
					                if (name == null)
 | 
				
			||||||
                    return false
 | 
					                    return false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ package utils
 | 
				
			|||||||
import android.content.Context
 | 
					import android.content.Context
 | 
				
			||||||
import android.icu.util.LocaleData
 | 
					import android.icu.util.LocaleData
 | 
				
			||||||
import android.icu.util.ULocale
 | 
					import android.icu.util.ULocale
 | 
				
			||||||
 | 
					import android.os.Build
 | 
				
			||||||
import it.danieleverducci.lunatracker.R
 | 
					import it.danieleverducci.lunatracker.R
 | 
				
			||||||
import it.danieleverducci.lunatracker.entities.LunaEvent
 | 
					import it.danieleverducci.lunatracker.entities.LunaEvent
 | 
				
			||||||
import java.text.NumberFormat
 | 
					import java.text.NumberFormat
 | 
				
			||||||
@@ -14,29 +15,45 @@ class NumericUtils (val context: Context) {
 | 
				
			|||||||
    val measurement_unit_weight_tiny: String
 | 
					    val measurement_unit_weight_tiny: String
 | 
				
			||||||
    val measurement_unit_temperature_base: String
 | 
					    val measurement_unit_temperature_base: String
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun isMetricSystem(): Boolean {
 | 
				
			||||||
 | 
					       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
 | 
				
			||||||
 | 
					            val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
 | 
				
			||||||
 | 
					            return (measurementSystem == LocaleData.MeasurementSystem.SI)
 | 
				
			||||||
 | 
					       } else {
 | 
				
			||||||
 | 
					            val locale = context.resources.configuration.locale
 | 
				
			||||||
 | 
					            return when (locale.country) {
 | 
				
			||||||
 | 
					                // https://en.wikipedia.org/wiki/United_States_customary_units
 | 
				
			||||||
 | 
					                // https://en.wikipedia.org/wiki/Imperial_units
 | 
				
			||||||
 | 
					                "US" -> false // US IMPERIAL
 | 
				
			||||||
 | 
					                // UK, Myanmar, Liberia,
 | 
				
			||||||
 | 
					                "GB", "MM", "LR" -> false // IMPERIAL
 | 
				
			||||||
 | 
					                else -> true // METRIC
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					       }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init {
 | 
					    init {
 | 
				
			||||||
        this.numberFormat = NumberFormat.getInstance()
 | 
					        this.numberFormat = NumberFormat.getInstance()
 | 
				
			||||||
        val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
 | 
					 | 
				
			||||||
        this.measurement_unit_liquid_base = context.getString(
 | 
					        this.measurement_unit_liquid_base = context.getString(
 | 
				
			||||||
            if (measurementSystem == LocaleData. MeasurementSystem.SI)
 | 
					            if (isMetricSystem())
 | 
				
			||||||
                R.string.measurement_unit_liquid_base_metric
 | 
					                R.string.measurement_unit_liquid_base_metric
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                R.string.measurement_unit_liquid_base_imperial
 | 
					                R.string.measurement_unit_liquid_base_imperial
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        this.measurement_unit_weight_base = context.getString(
 | 
					        this.measurement_unit_weight_base = context.getString(
 | 
				
			||||||
            if (measurementSystem == LocaleData. MeasurementSystem.SI)
 | 
					            if (isMetricSystem())
 | 
				
			||||||
                R.string.measurement_unit_weight_base_metric
 | 
					                R.string.measurement_unit_weight_base_metric
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                R.string.measurement_unit_weight_base_imperial
 | 
					                R.string.measurement_unit_weight_base_imperial
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        this.measurement_unit_weight_tiny = context.getString(
 | 
					        this.measurement_unit_weight_tiny = context.getString(
 | 
				
			||||||
            if (measurementSystem == LocaleData. MeasurementSystem.SI)
 | 
					            if (isMetricSystem())
 | 
				
			||||||
                R.string.measurement_unit_weight_tiny_metric
 | 
					                R.string.measurement_unit_weight_tiny_metric
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                R.string.measurement_unit_weight_tiny_imperial
 | 
					                R.string.measurement_unit_weight_tiny_imperial
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        this.measurement_unit_temperature_base = context.getString(
 | 
					        this.measurement_unit_temperature_base = context.getString(
 | 
				
			||||||
            if (measurementSystem == LocaleData. MeasurementSystem.SI)
 | 
					            if (isMetricSystem())
 | 
				
			||||||
                R.string.measurement_unit_temperature_base_metric
 | 
					                R.string.measurement_unit_temperature_base_metric
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                R.string.measurement_unit_temperature_base_imperial
 | 
					                R.string.measurement_unit_temperature_base_imperial
 | 
				
			||||||
@@ -45,11 +62,15 @@ class NumericUtils (val context: Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fun formatEventQuantity(item: LunaEvent): String {
 | 
					    fun formatEventQuantity(item: LunaEvent): String {
 | 
				
			||||||
        val formatted = StringBuilder()
 | 
					        val formatted = StringBuilder()
 | 
				
			||||||
        if ((item.quantity ?: 0) > 0) {
 | 
					        if (item.quantity > 0) {
 | 
				
			||||||
            if (item.type == LunaEvent.TYPE_TEMPERATURE)
 | 
					            formatted.append(when (item.type) {
 | 
				
			||||||
                formatted.append((item.quantity / 10.0f).toString())
 | 
					                LunaEvent.TYPE_TEMPERATURE ->
 | 
				
			||||||
            else
 | 
					                    (item.quantity / 10.0f).toString()
 | 
				
			||||||
                formatted.append(item.quantity)
 | 
					                LunaEvent.TYPE_PUKE ->
 | 
				
			||||||
 | 
					                    context.resources.getStringArray(R.array.AmountLabels)[item.quantity]
 | 
				
			||||||
 | 
					                else ->
 | 
				
			||||||
 | 
					                    item.quantity
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            formatted.append(" ")
 | 
					            formatted.append(" ")
 | 
				
			||||||
            formatted.append(
 | 
					            formatted.append(
 | 
				
			||||||
@@ -70,10 +91,9 @@ class NumericUtils (val context: Context) {
 | 
				
			|||||||
     * @return min, max, normal
 | 
					     * @return min, max, normal
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    fun getValidEventQuantityRange(lunaEventType: String): Triple<Int, Int, Int>? {
 | 
					    fun getValidEventQuantityRange(lunaEventType: String): Triple<Int, Int, Int>? {
 | 
				
			||||||
        val measurementSystem = LocaleData.getMeasurementSystem(ULocale.getDefault())
 | 
					 | 
				
			||||||
        return when (lunaEventType) {
 | 
					        return when (lunaEventType) {
 | 
				
			||||||
            LunaEvent.TYPE_TEMPERATURE -> {
 | 
					            LunaEvent.TYPE_TEMPERATURE -> {
 | 
				
			||||||
                if (measurementSystem == LocaleData. MeasurementSystem.SI)
 | 
					                if (isMetricSystem())
 | 
				
			||||||
                    Triple(
 | 
					                    Triple(
 | 
				
			||||||
                        context.resources.getInteger(R.integer.human_body_temp_min_metric),
 | 
					                        context.resources.getInteger(R.integer.human_body_temp_min_metric),
 | 
				
			||||||
                        context.resources.getInteger(R.integer.human_body_temp_max_metric),
 | 
					                        context.resources.getInteger(R.integer.human_body_temp_max_metric),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    android:layout_width="match_parent"
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
    android:layout_height="match_parent"
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
    android:padding="20dp"
 | 
					    android:padding="10dp"
 | 
				
			||||||
    android:background="@color/transparent">
 | 
					    android:background="@color/transparent">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <LinearLayout
 | 
					    <LinearLayout
 | 
				
			||||||
@@ -14,27 +14,17 @@
 | 
				
			|||||||
                android:id="@+id/button_medicine"
 | 
					                android:id="@+id/button_medicine"
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:padding="20dp"
 | 
					                android:padding="10dp"
 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
                android:text="@string/overflow_event_medicine"/>
 | 
					                android:text="@string/overflow_event_medicine"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <TextView
 | 
					 | 
				
			||||||
                android:id="@+id/button_enema"
 | 
					 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					 | 
				
			||||||
                android:layout_marginTop="10dp"
 | 
					 | 
				
			||||||
                android:padding="20dp"
 | 
					 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					 | 
				
			||||||
                android:text="@string/overflow_event_enema"/>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <TextView
 | 
					            <TextView
 | 
				
			||||||
                android:id="@+id/button_note"
 | 
					                android:id="@+id/button_note"
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:layout_marginTop="10dp"
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
                android:padding="20dp"
 | 
					                android:padding="10dp"
 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
                android:text="@string/overflow_event_note"/>
 | 
					                android:text="@string/overflow_event_note"/>
 | 
				
			||||||
@@ -44,17 +34,27 @@
 | 
				
			|||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:layout_marginTop="10dp"
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
                android:padding="20dp"
 | 
					                android:padding="10dp"
 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
                android:text="@string/overflow_event_temperature"/>
 | 
					                android:text="@string/overflow_event_temperature"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <TextView
 | 
				
			||||||
 | 
					                android:id="@+id/button_puke"
 | 
				
			||||||
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
 | 
					                android:padding="10dp"
 | 
				
			||||||
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
 | 
					                android:text="@string/overflow_event_puke"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <TextView
 | 
					            <TextView
 | 
				
			||||||
                android:id="@+id/button_colic"
 | 
					                android:id="@+id/button_colic"
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:layout_marginTop="10dp"
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
                android:padding="20dp"
 | 
					                android:padding="10dp"
 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
                android:text="@string/overflow_event_colic"/>
 | 
					                android:text="@string/overflow_event_colic"/>
 | 
				
			||||||
@@ -64,11 +64,21 @@
 | 
				
			|||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:layout_marginTop="10dp"
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
                android:padding="20dp"
 | 
					                android:padding="10dp"
 | 
				
			||||||
                android:background="@drawable/dropdown_list_item_background"
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
                style="@style/OverflowMenuText"
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
                android:text="@string/overflow_event_scale"/>
 | 
					                android:text="@string/overflow_event_scale"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <TextView
 | 
				
			||||||
 | 
					                android:id="@+id/button_enema"
 | 
				
			||||||
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
 | 
					                android:layout_marginTop="10dp"
 | 
				
			||||||
 | 
					                android:padding="10dp"
 | 
				
			||||||
 | 
					                android:background="@drawable/dropdown_list_item_background"
 | 
				
			||||||
 | 
					                style="@style/OverflowMenuText"
 | 
				
			||||||
 | 
					                android:text="@string/overflow_event_enema"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </LinearLayout>
 | 
					    </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</ScrollView>
 | 
					</ScrollView>
 | 
				
			||||||
							
								
								
									
										17
									
								
								app/src/main/res/layout/puke_dialog.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/src/main/res/layout/puke_dialog.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<LinearLayout
 | 
				
			||||||
 | 
					    xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
 | 
					    android:layout_gravity="center"
 | 
				
			||||||
 | 
					    android:gravity="center"
 | 
				
			||||||
 | 
					    android:orientation="vertical">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Spinner
 | 
				
			||||||
 | 
					        android:id="@+id/dialog_puke_value"
 | 
				
			||||||
 | 
					        android:layout_width="250dp"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:paddingHorizontal="16dp"
 | 
				
			||||||
 | 
					        android:paddingVertical="8dp"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</LinearLayout>
 | 
				
			||||||
							
								
								
									
										8
									
								
								app/src/main/res/values/arrays.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								app/src/main/res/values/arrays.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<resources>
 | 
				
			||||||
 | 
					    <string-array name="AmountLabels">
 | 
				
			||||||
 | 
					        <item>@string/amount_low</item>
 | 
				
			||||||
 | 
					        <item>@string/amount_normal</item>
 | 
				
			||||||
 | 
					        <item>@string/amount_high</item>
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
 | 
					</resources>
 | 
				
			||||||
@@ -12,6 +12,9 @@
 | 
				
			|||||||
    <string name="log_temperature_dialog_title">Temperature</string>
 | 
					    <string name="log_temperature_dialog_title">Temperature</string>
 | 
				
			||||||
    <string name="log_temperature_dialog_description">Insert the temperature</string>
 | 
					    <string name="log_temperature_dialog_description">Insert the temperature</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="log_puke_dialog_title">Puke</string>
 | 
				
			||||||
 | 
					    <string name="log_puke_dialog_description">Select the amount</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string name="event_bottle_type" translatable="false">🍼</string>
 | 
					    <string name="event_bottle_type" translatable="false">🍼</string>
 | 
				
			||||||
    <string name="event_food_type" translatable="false">🥣</string>
 | 
					    <string name="event_food_type" translatable="false">🥣</string>
 | 
				
			||||||
    <string name="event_scale_type" translatable="false">⚖️</string>
 | 
					    <string name="event_scale_type" translatable="false">⚖️</string>
 | 
				
			||||||
@@ -25,6 +28,7 @@
 | 
				
			|||||||
    <string name="event_note_type" translatable="false">📝</string>
 | 
					    <string name="event_note_type" translatable="false">📝</string>
 | 
				
			||||||
    <string name="event_temperature_type" translatable="false">🌡️</string>
 | 
					    <string name="event_temperature_type" translatable="false">🌡️</string>
 | 
				
			||||||
    <string name="event_colic_type" translatable="false">💨</string>
 | 
					    <string name="event_colic_type" translatable="false">💨</string>
 | 
				
			||||||
 | 
					    <string name="event_puke_type" translatable="false">🤮</string>
 | 
				
			||||||
    <string name="event_unknown_type" translatable="false">\?</string>
 | 
					    <string name="event_unknown_type" translatable="false">\?</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string name="event_bottle_desc">Baby bottle</string>
 | 
					    <string name="event_bottle_desc">Baby bottle</string>
 | 
				
			||||||
@@ -40,6 +44,7 @@
 | 
				
			|||||||
    <string name="event_note_desc">Note</string>
 | 
					    <string name="event_note_desc">Note</string>
 | 
				
			||||||
    <string name="event_temperature_desc">Temperature</string>
 | 
					    <string name="event_temperature_desc">Temperature</string>
 | 
				
			||||||
    <string name="event_colic_desc">Gaseous colic</string>
 | 
					    <string name="event_colic_desc">Gaseous colic</string>
 | 
				
			||||||
 | 
					    <string name="event_puke_desc">Puke</string>
 | 
				
			||||||
    <string name="event_unknown_desc"></string>
 | 
					    <string name="event_unknown_desc"></string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string name="overflow_event_scale">⚖️ Weight</string>
 | 
					    <string name="overflow_event_scale">⚖️ Weight</string>
 | 
				
			||||||
@@ -48,6 +53,7 @@
 | 
				
			|||||||
    <string name="overflow_event_note">📝 Note</string>
 | 
					    <string name="overflow_event_note">📝 Note</string>
 | 
				
			||||||
    <string name="overflow_event_temperature">🌡️ Temperature</string>
 | 
					    <string name="overflow_event_temperature">🌡️ Temperature</string>
 | 
				
			||||||
    <string name="overflow_event_colic">💨 Gaseous colic</string>
 | 
					    <string name="overflow_event_colic">💨 Gaseous colic</string>
 | 
				
			||||||
 | 
					    <string name="overflow_event_puke">🤮 Puke</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string name="toast_event_added">Event logged</string>
 | 
					    <string name="toast_event_added">Event logged</string>
 | 
				
			||||||
    <string name="toast_logbook_saved">Logbook saved</string>
 | 
					    <string name="toast_logbook_saved">Logbook saved</string>
 | 
				
			||||||
@@ -66,6 +72,10 @@
 | 
				
			|||||||
    <string name="year_ago">year</string>
 | 
					    <string name="year_ago">year</string>
 | 
				
			||||||
    <string name="years_ago">years</string>
 | 
					    <string name="years_ago">years</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="amount_low">Low</string>
 | 
				
			||||||
 | 
					    <string name="amount_normal">Normal</string>
 | 
				
			||||||
 | 
					    <string name="amount_high">High</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string name="no_connection">No connection</string>
 | 
					    <string name="no_connection">No connection</string>
 | 
				
			||||||
    <string name="no_connection_explain">Unable to reach WebDAV service</string>
 | 
					    <string name="no_connection_explain">Unable to reach WebDAV service</string>
 | 
				
			||||||
    <string name="no_connection_go_to_settings">Settings</string>
 | 
					    <string name="no_connection_go_to_settings">Settings</string>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ This app is meant to log all the relevant events (diaper change, breastfeeding,
 | 
				
			|||||||
Dedicated to my daughter Luna.
 | 
					Dedicated to my daughter Luna.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A HUGE thanks to all our contributors. See https://git.ichibi.eu/penguin86/luna-tracker/src/branch/master/README.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NOTE: The content on this app is for informational or educational purposes only and does not substitute professional medical advice or consultations with healthcare professionals.
 | 
					NOTE: The content on this app is for informational or educational purposes only and does not substitute professional medical advice or consultations with healthcare professionals.
 | 
				
			||||||
Feature graphic ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
					Feature graphic ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,8 @@ Elle permet de synchroniser les données entre différents appareils (en utilisa
 | 
				
			|||||||
Dédié à ma fille Luna.
 | 
					Dédié à ma fille Luna.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Un grand merci à tous nos contributeurs. Voir https://git.ichibi.eu/penguin86/luna-tracker/src/branch/master/README.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REMARQUE : le contenu de cette application est fourni à titre informatif ou éducatif uniquement et ne remplace pas les conseils médicaux professionnels ou les consultations avec des professionnels de la santé.
 | 
					REMARQUE : le contenu de cette application est fourni à titre informatif ou éducatif uniquement et ne remplace pas les conseils médicaux professionnels ou les consultations avec des professionnels de la santé.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Crédit image ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
					Crédit image ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
				
			||||||
@@ -6,6 +6,7 @@ Quest'app è pensata per memorizzare tutti gli eventi del bambino (cambio di pan
 | 
				
			|||||||
Dedicato a mia figlia Luna.
 | 
					Dedicato a mia figlia Luna.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Un grandissimo ringraziamento a tutti i contributors! Vedi https://git.ichibi.eu/penguin86/luna-tracker/src/branch/master/README.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NOTA: il contenuto di quest'app ha solo scopo informativo o didattico e non sostituisce il consulto medico professionale o le consulenze con operatori sanitari.
 | 
					NOTA: il contenuto di quest'app ha solo scopo informativo o didattico e non sostituisce il consulto medico professionale o le consulenze con operatori sanitari.
 | 
				
			||||||
Feature graphic ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
					Feature graphic ("Baby and baby milk bottle. Baby feeding."): © Vyacheslav Argenberg / http://www.vascoplanet.com/, CC BY 4.0 <https://creativecommons.org/licenses/by/4.0>, via Wikimedia Commons
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
[versions]
 | 
					[versions]
 | 
				
			||||||
agp = "8.7.2"
 | 
					agp = "8.13.0"
 | 
				
			||||||
kotlin = "2.0.0"
 | 
					kotlin = "2.0.0"
 | 
				
			||||||
coreKtx = "1.10.1"
 | 
					coreKtx = "1.10.1"
 | 
				
			||||||
junit = "4.13.2"
 | 
					junit = "4.13.2"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
#Sat Nov 02 10:58:51 CET 2024
 | 
					#Sat Nov 02 10:58:51 CET 2024
 | 
				
			||||||
distributionBase=GRADLE_USER_HOME
 | 
					distributionBase=GRADLE_USER_HOME
 | 
				
			||||||
distributionPath=wrapper/dists
 | 
					distributionPath=wrapper/dists
 | 
				
			||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
 | 
					distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
 | 
				
			||||||
zipStoreBase=GRADLE_USER_HOME
 | 
					zipStoreBase=GRADLE_USER_HOME
 | 
				
			||||||
zipStorePath=wrapper/dists
 | 
					zipStorePath=wrapper/dists
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user