diff --git a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt index a117c1d..e33b48b 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt @@ -13,6 +13,7 @@ import android.view.ViewGroup import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.EditText +import android.widget.LinearLayout import android.widget.NumberPicker import android.widget.PopupWindow import android.widget.Spinner @@ -57,6 +58,7 @@ class MainActivity : AppCompatActivity() { lateinit var buttonsContainer: ViewGroup lateinit var recyclerView: RecyclerView lateinit var handler: Handler + var signature = "" var savingEvent = false val updateListRunnable: Runnable = Runnable { if (logbook != null && !pauseLogbookUpdate) @@ -168,6 +170,8 @@ class MainActivity : AppCompatActivity() { logbookRepo = FileLogbookRepository() } + signature = settingsRepository.loadSignature() + val noBreastfeeding = settingsRepository.loadNoBreastfeeding() findViewById(R.id.layout_nipples).visibility = when (noBreastfeeding) { true -> View.GONE @@ -207,7 +211,7 @@ class MainActivity : AppCompatActivity() { numberPicker.wrapSelectorWheel = false numberPicker.value = localSettings.loadBabyBottleContent() d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> - logEvent(LunaEvent(LunaEvent.TYPE_BABY_BOTTLE, numberPicker.value * 10)) + logEvent(LunaEvent(LunaEvent.TYPE_BABY_BOTTLE, signature, numberPicker.value * 10)) localSettings.saveBabyBottleContent(numberPicker.value) } d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() } @@ -226,7 +230,7 @@ class MainActivity : AppCompatActivity() { d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> val weight = weightET.text.toString().toIntOrNull() if (weight != null) - logEvent(LunaEvent(LunaEvent.TYPE_WEIGHT, weight)) + logEvent(LunaEvent(LunaEvent.TYPE_WEIGHT, signature, weight)) else Toast.makeText(this, R.string.toast_integer_error, Toast.LENGTH_SHORT).show() } @@ -252,7 +256,7 @@ class MainActivity : AppCompatActivity() { tempSlider.addOnChangeListener({s, v, b -> tempTextView.text = v.toString()}) d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> val temperature = (tempSlider.value * 10).toInt() // In tenth of a grade - logEvent(LunaEvent(LunaEvent.TYPE_TEMPERATURE, temperature)) + logEvent(LunaEvent(LunaEvent.TYPE_TEMPERATURE, signature, temperature)) } d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() } val alertDialog = d.create() @@ -272,7 +276,7 @@ class MainActivity : AppCompatActivity() { d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> val pos = spinner.selectedItemPosition - logEvent(LunaEvent(LunaEvent.TYPE_PUKE, pos)) + logEvent(LunaEvent(LunaEvent.TYPE_PUKE, signature, pos)) } d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() } val alertDialog = d.create() @@ -406,6 +410,14 @@ class MainActivity : AppCompatActivity() { pauseLogbookUpdate = false }) + // show optional signature + dialogView.findViewById(R.id.dialog_event_detail_type_signature).text = event.signature + dialogView.findViewById(R.id.dialog_event_signature_layout).visibility = if (event.signature.isNotEmpty()) { + View.VISIBLE + } else { + View.GONE + } + // create next/previous links to events of the same type val previousTextView = dialogView.findViewById(R.id.dialog_event_previous) diff --git a/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt index 7d03b4e..8006986 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt @@ -2,6 +2,7 @@ package it.danieleverducci.lunatracker import android.os.Bundle import android.view.View +import android.widget.EditText import android.widget.RadioButton import android.widget.TextView import android.widget.Toast @@ -24,6 +25,7 @@ open class SettingsActivity : AppCompatActivity() { protected lateinit var textViewWebDAVPass: TextView protected lateinit var progressIndicator: LinearProgressIndicator protected lateinit var switchNoBreastfeeding: SwitchMaterial + protected lateinit var textViewSignature: EditText override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -36,6 +38,7 @@ open class SettingsActivity : AppCompatActivity() { textViewWebDAVPass = findViewById(R.id.settings_data_webdav_pass) progressIndicator = findViewById(R.id.progress_indicator) switchNoBreastfeeding = findViewById(R.id.switch_no_breastfeeding) + textViewSignature = findViewById(R.id.settings_signature) findViewById(R.id.settings_save).setOnClickListener({ validateAndSave() @@ -52,12 +55,14 @@ open class SettingsActivity : AppCompatActivity() { val dataRepo = settingsRepository.loadDataRepository() val webDavCredentials = settingsRepository.loadWebdavCredentials() val noBreastfeeding = settingsRepository.loadNoBreastfeeding() + val signature = settingsRepository.loadSignature() when (dataRepo) { LocalSettingsRepository.DATA_REPO.LOCAL_FILE -> radioDataLocal.isChecked = true LocalSettingsRepository.DATA_REPO.WEBDAV -> radioDataWebDAV.isChecked = true } + textViewSignature.setText(signature) switchNoBreastfeeding.isChecked = noBreastfeeding if (webDavCredentials != null) { @@ -156,6 +161,7 @@ open class SettingsActivity : AppCompatActivity() { else LocalSettingsRepository.DATA_REPO.LOCAL_FILE ) settingsRepository.saveNoBreastfeeding(switchNoBreastfeeding.isChecked) + settingsRepository.saveSignature(textViewSignature.text.toString()) settingsRepository.saveWebdavCredentials( textViewWebDAVUrl.text.toString(), textViewWebDAVUser.text.toString(), diff --git a/app/src/main/java/it/danieleverducci/lunatracker/entities/LunaEvent.kt b/app/src/main/java/it/danieleverducci/lunatracker/entities/LunaEvent.kt index f00f64a..f740ad0 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/entities/LunaEvent.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/entities/LunaEvent.kt @@ -55,6 +55,12 @@ class LunaEvent: Comparable { set(value) { jo.put("notes", value) } + var signature: String + get(): String = jo.optString("signature") + set(value) { + if (value.isNotEmpty()) + jo.put("signature", value) + } constructor(jo: JSONObject) { this.jo = jo @@ -69,10 +75,11 @@ class LunaEvent: Comparable { this.type = type } - constructor(type: String, quantity: Int) { + constructor(type: String, signature: String, quantity: Int) { this.jo = JSONObject() this.time = System.currentTimeMillis() / 1000 this.type = type + this.signature = signature this.quantity = quantity } diff --git a/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt b/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt index 577d8f5..1462820 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt @@ -14,6 +14,7 @@ class LocalSettingsRepository(val context: Context) { const val SHARED_PREFS_DAV_USER = "webdav_user" const val SHARED_PREFS_DAV_PASS = "webdav_password" const val SHARED_PREFS_NO_BREASTFEEDING = "no_breastfeeding" + const val SHARED_PREFS_SIGNATURE = "signature" } enum class DATA_REPO {LOCAL_FILE, WEBDAV} val sharedPreferences: SharedPreferences @@ -30,6 +31,14 @@ class LocalSettingsRepository(val context: Context) { return sharedPreferences.getInt(SHARED_PREFS_BB_CONTENT, 1) } + fun saveSignature(content: String) { + sharedPreferences.edit { putString(SHARED_PREFS_SIGNATURE, content) } + } + + fun loadSignature(): String { + return sharedPreferences.getString(SHARED_PREFS_SIGNATURE, "") ?: "" + } + fun saveNoBreastfeeding(content: Boolean) { sharedPreferences.edit { putBoolean(SHARED_PREFS_NO_BREASTFEEDING, content) } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index a4cfb2d..4e84cbb 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -119,6 +119,28 @@ android:visibility="invisible"/> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f478f91..23a45fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -85,6 +85,8 @@ Retry Settings + Signature + Attach a signature to each event your create and for others to see. Useful if multiple people add events. Choose where to save data On device Most privacy-friendly solution: data doesn\'t leave your device @@ -136,6 +138,7 @@ Delete Quantity Notes + Created By Add logbook 👶 Logbook name