From a635e46180d258c5f6ad5ef05c517fd4a5e0f8ae Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sun, 14 Sep 2025 12:50:12 +0200 Subject: [PATCH 01/17] layout_marginLeft is deprecated --- app/src/main/res/layout/activity_settings.xml | 16 ++++++++-------- app/src/main/res/layout/row_luna_event.xml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 0aace63..425dff6 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -39,7 +39,7 @@ @@ -66,7 +66,7 @@ android:id="@+id/settings_data_webdav_url" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="30dp" + android:layout_marginStart="30dp" android:hint="@string/settings_storage_dav_url_hint" android:inputType="textUri" android:background="@drawable/textview_background"/> @@ -75,7 +75,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:layout_marginLeft="30dp" + android:layout_marginStart="30dp" android:textStyle="bold" android:text="@string/settings_storage_dav_user"/> @@ -83,7 +83,7 @@ android:id="@+id/settings_data_webdav_user" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="30dp" + android:layout_marginStart="30dp" android:inputType="textEmailAddress" android:background="@drawable/textview_background"/> @@ -91,7 +91,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:layout_marginLeft="30dp" + android:layout_marginStart="30dp" android:textStyle="bold" android:text="@string/settings_storage_dav_pass"/> @@ -99,7 +99,7 @@ android:id="@+id/settings_data_webdav_pass" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="30dp" + android:layout_marginStart="30dp" android:inputType="textPassword" android:background="@drawable/textview_background"/> diff --git a/app/src/main/res/layout/row_luna_event.xml b/app/src/main/res/layout/row_luna_event.xml index e656076..2ef9d27 100644 --- a/app/src/main/res/layout/row_luna_event.xml +++ b/app/src/main/res/layout/row_luna_event.xml @@ -11,7 +11,7 @@ android:id="@+id/type" android:layout_width="90dp" android:layout_height="wrap_content" - android:paddingLeft="10dp" + android:paddingStart="10dp" android:textSize="28sp" android:lines="1" android:maxLines="1" -- 2.39.5 From 25f7b1fc00abe02e4391313a3bff54848d4b0e1e Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sun, 14 Sep 2025 13:16:58 +0200 Subject: [PATCH 02/17] add password toggle view icon --- app/src/main/res/layout/activity_settings.xml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 425dff6..8da3519 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -95,13 +95,19 @@ android:textStyle="bold" android:text="@string/settings_storage_dav_pass"/> - + app:passwordToggleEnabled="true"> + + + Date: Sun, 14 Sep 2025 16:12:55 +0200 Subject: [PATCH 03/17] values: escape apostrophe characters --- app/src/main/res/values-fr/strings.xml | 28 +++++++++++++------------- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b2e11c0..efcf1b1 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -37,7 +37,7 @@ Entrée ajoutée Journal ajouté - Impossible d'enregistrer cette entrée + Impossible d\'enregistrer cette entrée Valeur invalide. Renseignez un nombre. maintenant @@ -53,18 +53,18 @@ Paramètres Choisir le lieu de stockage des données - Sur l'appareil' - La solution la plus respectueuse de la vie privée : les données ne quittent pas l'appareil + Sur l\'appareil\' + La solution la plus respectueuse de la vie privée : les données ne quittent pas l\'appareil Sur un serveur WebDAV - Vous pouvez utiliser n'importe quel service WebDAV (par exemple Nextcloud, Owncloud, Dropbox, Box...) pour sauvegarder les données. De cette façon, vous pouvez les synchroniser entre plusieurs appareils (Ex : celui de papa, celui de maman, celui de grand-mère...). Vous aurez besoin de l'adresse WebDAV, que vous trouverez dans la documentation de votre fournisseur (par exemple, pour Nextcloud web, vous la trouverez dans les paramètres de l'application Fichiers). + Vous pouvez utiliser n\'importe quel service WebDAV (par exemple Nextcloud, Owncloud, Dropbox, Box...) pour sauvegarder les données. De cette façon, vous pouvez les synchroniser entre plusieurs appareils (Ex : celui de papa, celui de maman, celui de grand-mère...). Vous aurez besoin de l\'adresse WebDAV, que vous trouverez dans la documentation de votre fournisseur (par exemple, pour Nextcloud web, vous la trouverez dans les paramètres de l\'application Fichiers). URL WebDAV https:// - Nom d'utilisateur + Nom d\'utilisateur Mot de passe - Impossible d'accéder au serveur: - Nom d'utilisateur ou mot de passe incorrect pour le service WebDAV - Impossible d'accéder au serveur WebDAV - Une erreur est survenue en essayant d'accéder au serveur WebDAV: + Impossible d\'accéder au serveur: + Nom d\'utilisateur ou mot de passe incorrect pour le service WebDAV + Impossible d\'accéder au serveur WebDAV + Une erreur est survenue en essayant d\'accéder au serveur WebDAV: Impossible de sauvegarder un fichier sur le serveur WebDAV: Connexion réussie avec le serveur WebDAV Il y a un fichier sur le serveur WebDAV, toutefois il est corronpu ou illisible. Merci de le supprimer et réessayer @@ -72,8 +72,8 @@ Une erreur est survenue en téléversant le journal local %1$s sur %2$s Votre journal grossit ! - Le fichier de votre journal a beaucoup grossi. Nous recommandons de supprimer les entrées les plus vieilles pour éviter des crashs de l'application. - Le fichier de votre journal a beaucoup grossi. Nous recommandons de supprimer les entrées les plus vieilles pour éviter des crashs de l'application. Si vous voulez garder un historique, vous pouvez sauvegarder le fichier "lunatracker_logbook.json" ou le renommer pour créer un nouveau journal. + Le fichier de votre journal a beaucoup grossi. Nous recommandons de supprimer les entrées les plus vieilles pour éviter des crashs de l\'application. + Le fichier de votre journal a beaucoup grossi. Nous recommandons de supprimer les entrées les plus vieilles pour éviter des crashs de l\'application. Si vous voulez garder un historique, vous pouvez sauvegarder le fichier "lunatracker_logbook.json" ou le renommer pour créer un nouveau journal. Supprimer les vieilles entrées maintenant Me rappeller plus tard @@ -82,15 +82,15 @@ Quantité (ou vide) Notes ... - Détails de l'entrée + Détails de l\'entrée OK Supprimer Ajouter un journal 👶 Nom du journal - Renseignez un nom pour identifier ce journal. Ce nom apparaîtra en haut de l'écran et, si vous utilisez WebDAV, il figurera également dans le nom du fichier enreigstré. - Bienvenue ! Pour utiliser cette application, vous devez créer au moins un carnet de bord. Vous voudrez probablement l'appeler avec le nom de votre enfant. + Renseignez un nom pour identifier ce journal. Ce nom apparaîtra en haut de l\'écran et, si vous utilisez WebDAV, il figurera également dans le nom du fichier enreigstré. + Bienvenue ! Pour utiliser cette application, vous devez créer au moins un carnet de bord. Vous voudrez probablement l\'appeler avec le nom de votre enfant. 👶 Mon premier carnet de bord Journal ajouté: diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7f3d7b..31ae0d8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,7 +71,7 @@ On device Most privacy-friendly solution: data doesn\'t leave your device On a WebDAV server - You can use any WebDAV service (i.e. Nextcloud, Owncloud, Dropbox, Box…) to save the data. In this way, you can syncronize it between more devices, i.e., the dad\'s, the mom\'s, the grandma\'s… You will need the WebDAV url, you can find it in your provider\'s documentation (i.e. in Nextcloud web is in the Files app settings) + You can use any WebDAV service (i.e. Nextcloud, Owncloud, Dropbox, Box…) to save the data. In this way, you can syncronize it between more devices, i.e., the dad\'s, the mom\'s, the grandma\'s… You will need the WebDAV URL, you can find it in your provider\'s documentation (i.e. in Nextcloud web is in the Files app settings) WebDAV URL https:// Username -- 2.39.5 From 5c247f59482ac78ba3f55c9f5582e487f0b293ef Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sun, 14 Sep 2025 16:21:49 +0200 Subject: [PATCH 04/17] replace dp with sp As suggested by android-studio. --- app/src/main/res/layout/activity_main.xml | 26 +++++++++---------- .../main/res/layout/number_edit_dialog.xml | 2 +- .../main/res/layout/number_picker_dialog.xml | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 125caf0..0409368 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,7 +30,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/title" - android:textSize="26dp" + android:textSize="26sp" android:gravity="center"/> @@ -104,7 +104,7 @@ android:layout_margin="10dp" android:background="@drawable/button_background" android:gravity="center_horizontal" - android:textSize="50dp" + android:textSize="50sp" android:text="@string/event_bottle_type"/> @@ -132,7 +132,7 @@ android:layout_weight="1" android:background="@drawable/button_background" android:gravity="center_horizontal" - android:textSize="30dp" + android:textSize="30sp" android:text="🤱⬅️"/> @@ -171,7 +171,7 @@ android:layout_weight="2" android:background="@drawable/button_background" android:gravity="center_horizontal" - android:textSize="30dp" + android:textSize="30sp" android:text="🚼 💩"/> @@ -264,7 +264,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" - android:drawableLeft="@drawable/ic_sync" + android:drawableStart="@drawable/ic_sync" android:drawableTint="@color/white" android:drawablePadding="10dp" android:text="@string/no_connection_retry" @@ -275,7 +275,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" - android:drawableLeft="@drawable/ic_settings" + android:drawableStart="@drawable/ic_settings" android:drawableTint="@color/white" android:drawablePadding="10dp" android:text="@string/no_connection_go_to_settings" diff --git a/app/src/main/res/layout/number_edit_dialog.xml b/app/src/main/res/layout/number_edit_dialog.xml index b36f24d..0c1d211 100644 --- a/app/src/main/res/layout/number_edit_dialog.xml +++ b/app/src/main/res/layout/number_edit_dialog.xml @@ -17,6 +17,6 @@ diff --git a/app/src/main/res/layout/number_picker_dialog.xml b/app/src/main/res/layout/number_picker_dialog.xml index c9d9128..ce2aa8b 100644 --- a/app/src/main/res/layout/number_picker_dialog.xml +++ b/app/src/main/res/layout/number_picker_dialog.xml @@ -14,6 +14,6 @@ -- 2.39.5 From f1f73b65f7ad7aaaee2796a0547f9c80cc2d17df Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sun, 14 Sep 2025 16:25:35 +0200 Subject: [PATCH 05/17] add setting to disable breastfeeding buttons Some women do not breastfeed. Hide the buttons in order to have more space for log messages. --- .../lunatracker/MainActivity.kt | 6 ++ .../lunatracker/SettingsActivity.kt | 9 +++ .../repository/LocalSettingsRepository.kt | 10 +++ app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/layout/activity_settings.xml | 79 ++++++++++++------- app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 7 files changed, 82 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt index 1cb89dc..665412f 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/MainActivity.kt @@ -168,6 +168,12 @@ class MainActivity : AppCompatActivity() { logbookRepo = FileLogbookRepository() } + val noBreastfeeding = settingsRepository.loadNoBreastfeeding() + findViewById(R.id.layout_nipples).visibility = when (noBreastfeeding) { + true -> View.GONE + false -> View.VISIBLE + } + // Update list dates recyclerView.adapter?.notifyDataSetChanged() diff --git a/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt b/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt index 13d2440..a0731f9 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/SettingsActivity.kt @@ -7,6 +7,7 @@ import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.google.android.material.progressindicator.LinearProgressIndicator +import com.google.android.material.switchmaterial.SwitchMaterial import com.thegrizzlylabs.sardineandroid.impl.SardineException import it.danieleverducci.lunatracker.repository.FileLogbookRepository import it.danieleverducci.lunatracker.repository.LocalSettingsRepository @@ -24,6 +25,7 @@ open class SettingsActivity : AppCompatActivity() { protected lateinit var textViewWebDAVUser: TextView protected lateinit var textViewWebDAVPass: TextView protected lateinit var progressIndicator: LinearProgressIndicator + protected lateinit var switchNoBreastfeeding: SwitchMaterial override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -35,6 +37,8 @@ open class SettingsActivity : AppCompatActivity() { textViewWebDAVUser = findViewById(R.id.settings_data_webdav_user) textViewWebDAVPass = findViewById(R.id.settings_data_webdav_pass) progressIndicator = findViewById(R.id.progress_indicator) + switchNoBreastfeeding = findViewById(R.id.switch_no_breastfeeding) + findViewById(R.id.settings_save).setOnClickListener({ validateAndSave() }) @@ -49,11 +53,15 @@ open class SettingsActivity : AppCompatActivity() { fun loadSettings() { val dataRepo = settingsRepository.loadDataRepository() val webDavCredentials = settingsRepository.loadWebdavCredentials() + val noBreastfeeding = settingsRepository.loadNoBreastfeeding() when (dataRepo) { LocalSettingsRepository.DATA_REPO.LOCAL_FILE -> radioDataLocal.isChecked = true LocalSettingsRepository.DATA_REPO.WEBDAV -> radioDataWebDAV.isChecked = true } + + switchNoBreastfeeding.isChecked = noBreastfeeding + if (webDavCredentials != null) { textViewWebDAVUrl.setText(webDavCredentials[0]) textViewWebDAVUser.setText(webDavCredentials[1]) @@ -149,6 +157,7 @@ open class SettingsActivity : AppCompatActivity() { if (radioDataWebDAV.isChecked) LocalSettingsRepository.DATA_REPO.WEBDAV else LocalSettingsRepository.DATA_REPO.LOCAL_FILE ) + settingsRepository.saveNoBreastfeeding(switchNoBreastfeeding.isChecked) settingsRepository.saveWebdavCredentials( textViewWebDAVUrl.text.toString(), textViewWebDAVUser.text.toString(), 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 b48608c..ede0b93 100644 --- a/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt +++ b/app/src/main/java/it/danieleverducci/lunatracker/repository/LocalSettingsRepository.kt @@ -3,6 +3,7 @@ package it.danieleverducci.lunatracker.repository import android.content.Context import android.content.Context.MODE_PRIVATE import android.content.SharedPreferences +import androidx.core.content.edit class LocalSettingsRepository(val context: Context) { companion object { @@ -12,6 +13,7 @@ class LocalSettingsRepository(val context: Context) { val SHARED_PREFS_DAV_URL = "webdav_url" val SHARED_PREFS_DAV_USER = "webdav_user" val SHARED_PREFS_DAV_PASS = "webdav_password" + val SHARED_PREFS_NO_BREASTFEEDING = "no_breastfeeding" } enum class DATA_REPO {LOCAL_FILE, WEBDAV} val sharedPreferences: SharedPreferences @@ -28,6 +30,14 @@ class LocalSettingsRepository(val context: Context) { return sharedPreferences.getInt(SHARED_PREFS_BB_CONTENT, 1) } + fun saveNoBreastfeeding(content: Boolean) { + sharedPreferences.edit().putBoolean(SHARED_PREFS_NO_BREASTFEEDING, content).apply() + } + + fun loadNoBreastfeeding(): Boolean { + return sharedPreferences.getBoolean(SHARED_PREFS_NO_BREASTFEEDING, false) + } + fun saveDataRepository(repo: DATA_REPO) { val spe = sharedPreferences.edit() spe.putString( diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0409368..992052f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -122,7 +122,8 @@ + android:layout_height="wrap_content" + android:id="@+id/layout_nipples"> - - - -