From 6802f64c94624dc9d102a84004853031d77de9c1 Mon Sep 17 00:00:00 2001 From: Avior Date: Mon, 6 Mar 2023 17:32:36 +0100 Subject: [PATCH] fix: Weight unit not being taken into account (#157) --- .../openhealth/ui/browse/BrowseFragment.kt | 24 +++++++++++++++---- .../openhealth/ui/browse/BrowseViewModel.kt | 14 +++++++++++ .../dzeio/openhealth/ui/home/HomeFragment.kt | 22 +++++++---------- .../ui/settings/SettingsFragment.kt | 21 ++++++++++++++-- app/src/main/res/values-fr/strings.xml | 4 ++-- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/preferences.xml | 6 +---- 7 files changed, 65 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt index 9ee2b7e..77faac4 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt @@ -12,6 +12,7 @@ import androidx.navigation.fragment.findNavController import com.dzeio.openhealth.R import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.databinding.FragmentBrowseBinding +import com.dzeio.openhealth.units.Mass import com.dzeio.openhealth.utils.PermissionsUtils import com.google.android.material.card.MaterialCardView import dagger.hilt.android.AndroidEntryPoint @@ -109,10 +110,11 @@ class BrowseFragment : // display the current user's weight viewModel.weight.observe(viewLifecycleOwner) { - binding.weightText.text = String.format( - resources.getString(R.string.weight_current), - String.format(resources.getString(R.string.unit_mass_kilogram_unit), it) - ) + updateWeight() + } + + viewModel.massUnit.observe(viewLifecycleOwner) { + updateWeight() } } @@ -123,4 +125,18 @@ class BrowseFragment : } binding.stepsText.setText(text) } + + private fun updateWeight() { + val weight = viewModel.weight.value + val unit = viewModel.massUnit.value ?: Mass.KILOGRAM + + if (weight == null) { + return + } + + binding.weightText.text = getString( + R.string.weight_current, + getString(unit.unit, unit.fromKilogram(weight)) + ) + } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt index 5335aae..701a770 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseViewModel.kt @@ -7,6 +7,7 @@ import com.dzeio.openhealth.Settings import com.dzeio.openhealth.core.BaseViewModel import com.dzeio.openhealth.data.step.StepRepository import com.dzeio.openhealth.data.weight.WeightRepository +import com.dzeio.openhealth.units.Mass import com.dzeio.openhealth.utils.Configuration import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -20,6 +21,9 @@ class BrowseViewModel @Inject internal constructor( config: Configuration ) : BaseViewModel() { + private val _massUnit = MutableLiveData(Mass.KILOGRAM) + val massUnit: LiveData = _massUnit + private val _steps = MutableLiveData(0) val steps: LiveData = _steps @@ -41,5 +45,15 @@ class BrowseViewModel @Inject internal constructor( _weight.postValue(it.weight) } } + + config.getInt(Settings.MASS_UNIT).apply { + addObserver { + if (it == null) return@addObserver + _massUnit.postValue(Mass.find(it)) + } + if (value != null) { + _massUnit.postValue(Mass.find(value!!)) + } + } } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt index 7c53ef8..db5ab9b 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt @@ -108,6 +108,12 @@ class HomeFragment : BaseFragment(HomeViewMo ChartUtils.materielTheme(this, requireView()) } + // update the graph when the weight unit change + viewModel.massUnit.observe(viewLifecycleOwner) { unit -> + binding.weightGraph.yAxis.onValueFormat = { getString(unit.unit, unit.fromKilogram(it)) } + binding.weightGraph.refresh() + } + if (BuildConfig.DEBUG) { binding.gotoTests.apply { visibility = View.VISIBLE @@ -154,11 +160,6 @@ class HomeFragment : BaseFragment(HomeViewMo viewModel.goalWeight.observe(viewLifecycleOwner) { updateWeightGraph() } - - // update the graph when the weight unit change - viewModel.massUnit.observe(viewLifecycleOwner) { - updateWeightGraph() - } } /** @@ -167,21 +168,14 @@ class HomeFragment : BaseFragment(HomeViewMo private fun updateWeightGraph() { val values = viewModel.weights.value ?: arrayListOf() val goal = viewModel.goalWeight.value - val unit = viewModel.massUnit.value - if (unit == null) { - return - } - - val chart = binding.weightGraph.apply { - yAxis.onValueFormat = { getString(unit.unit, unit.fromKilogram(it)) } - } + val chart = binding.weightGraph val serie = chart.series[0] as LineSerie val entries: ArrayList = values.map { Entry( it.timestamp.toDouble(), - it.weight * unit.modifier + it.weight ) } as ArrayList diff --git a/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt index db90b9f..09eac27 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt @@ -96,7 +96,7 @@ class SettingsFragment : PreferenceFragmentCompat() { } } - val activityPreference = findPreference("tmp.com.dzeio.open-health.activitylevel") + val activityPreference = findPreference("tmp." + Settings.USER_ACTIVITY_LEVEL) activityPreference?.apply { val value = config.getInt(Settings.USER_ACTIVITY_LEVEL) setOnPreferenceClickListener { @@ -111,7 +111,7 @@ class SettingsFragment : PreferenceFragmentCompat() { } } - val biologicalSexPreference = findPreference("tmp.com.dzeio.open-health.biological_sex") + val biologicalSexPreference = findPreference("tmp." + Settings.USER_BIOLOGICAL_SEX) biologicalSexPreference?.apply { val value = config.getInt(Settings.USER_BIOLOGICAL_SEX) setOnPreferenceClickListener { @@ -151,6 +151,23 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + findPreference("tmp." + Settings.MASS_UNIT)?.apply { + entries = Mass.values().map { getString(it.singular) }.toTypedArray() + entryValues = Mass.values().map { it.ordinal.toString() }.toTypedArray() + val unit = config.getInt(Settings.MASS_UNIT) + + setOnPreferenceClickListener { + if (unit.value != null) setValueIndex(unit.value!!) + return@setOnPreferenceClickListener true + } + + setOnPreferenceChangeListener { _, newValue -> + val nv = (newValue as String).toIntOrNull() + unit.value = nv + return@setOnPreferenceChangeListener false + } + } + findPreference("tmp." + Settings.WATER_INTAKE_DAILY_GOAL)?.apply { val value = config.getInt(Settings.WATER_INTAKE_DAILY_GOAL) val unit = config.getInt(Settings.VOLUME_UNIT) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 31bac6c..cb4c538 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -41,7 +41,7 @@ Modifier le but journalier Vous avez décliné une permission, vous ne pouvez pas utiliser cette extension suaf si vous réactivez la permission manuellement Pas - Poid actuel: %1$s%2$s + Poid actuel: %1$s Supprimer Fermer @@ -65,7 +65,7 @@ Export Réussi! Importer/Exporter Jours avant d\'atteindre son but: ~%1$d jours - Date: %1$s\nBMI: %2$.2f\nEau corporelle: %3$.2f\nMuscles: %4$.2f\nMasse maigre: %5$.2f\nMasse grasse: %6$.2f\nMasse osseuse: %7$.2f\nGraisse viscérale: %8$.2f\nMétabolisme basal: %9$d\nDépense énergétique quotidienne totale: %10$d + Date: %1$s\nBMI: %2$.2f\nEau corporelle: %3$.2f%%\nMuscles: %4$.2f%%\nMasse maigre: %5$.2f%%\nMasse grasse: %6$.2f%%\nMasse osseuse: %7$.2f%%\nGraisse viscérale: %8$.2f%%\nMétabolisme basal: %9$d\nDépense énergétique quotidienne totale: %10$d Cloué au lit Sédentaire diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab60d29..93acabd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,7 +78,7 @@ Export successful! Import/Export Days until goal is achieved: ~%1$d days - Date: %1$s\nBMI: %2$.2f\nBody water: %3$.2f\nMuscles: %4$.2f\nLean body mass: %5$.2f\nBody fat: %6$.2f\nBone mass: %7$.2f\nVisceral fat: %8$.2f\nBasal metabolic rate: %9$d\nTotal daily energy expendure: %10$d\n + Date: %1$s\nBMI: %2$.2f\nBody water: %3$.2f%%\nMuscles: %4$.2f%%\nLean body mass: %5$.2f%%\nBody fat: %6$.2f%%\nBone mass: %7$.2f%%\nVisceral fat: %8$.2f%%\nBasal metabolic rate: %9$d\nTotal daily energy expendure: %10$d\n Activity Vitals Heart Rate diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 659ae85..e4f3107 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -3,7 +3,6 @@