From bcf80044972b8719f9183fa1f24f5bfba30ef697 Mon Sep 17 00:00:00 2001 From: Avior Date: Thu, 16 Feb 2023 00:58:00 +0100 Subject: [PATCH] feat: Project cleanup (#146) --- app/build.gradle.kts | 8 +-- .../res/drawable/baseline_chevron_left_24.xml | 5 -- .../drawable/baseline_chevron_right_24.xml | 5 -- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../java/com/dzeio/openhealth/Settings.kt | 3 + .../dzeio/openhealth/adapters/FoodAdapter.kt | 45 ------------- .../dzeio/openhealth/adapters/StepsAdapter.kt | 46 ------------- .../dzeio/openhealth/adapters/WaterAdapter.kt | 40 ----------- .../openhealth/adapters/WeightAdapter.kt | 40 ----------- .../com/dzeio/openhealth/data/food/Food.kt | 20 +++--- .../dzeio/openhealth/ui/food/FoodDialog.kt | 18 ++--- .../openhealth/ui/food/FoodDialogViewModel.kt | 5 -- .../openhealth/ui/food/FoodHomeFragment.kt | 62 +++++++++++++++-- .../openhealth/ui/food/SearchFoodDialog.kt | 38 ++++++++--- .../openhealth/ui/steps/StepsHomeFragment.kt | 35 ++++++++-- .../openhealth/ui/water/WaterHomeFragment.kt | 40 ++++++++--- .../ui/water/WaterSizeSelectorDialog.kt | 51 +++++++------- .../ui/water/WaterSizeSelectorViewModel.kt | 23 ++----- .../ui/weight/ListWeightFragment.kt | 34 ++++++---- .../dzeio/openhealth/utils/Configuration.kt | 13 ++-- .../main/res/drawable/ic_baseline_edit_24.xml | 10 --- ...ogo_background.xml => logo_background.xml} | 0 app/src/main/res/drawable/logo_shealth.png | Bin 19850 -> 0 bytes .../main/res/layout/dialog_edit_weight.xml | 6 +- .../main/res/layout/dialog_food_product.xml | 1 + .../res/layout/dialog_food_search_product.xml | 39 ----------- .../res/layout/dialog_water_size_selector.xml | 13 ++++ .../main/res/layout/fragment_food_home.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 16 ++--- .../main/res/layout/fragment_list_weight.xml | 37 ++++------ .../res/layout/fragment_main_water_home.xml | 3 +- .../main/res/layout/fragment_steps_home.xml | 3 +- app/src/main/res/layout/item_food.xml | 59 ---------------- app/src/main/res/layout/item_list.xml | 2 +- .../main/res/layout/layout_extension_item.xml | 63 ------------------ app/src/main/res/layout/layout_item_list.xml | 49 -------------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../main/res/navigation/mobile_navigation.xml | 2 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values/strings.xml | 4 +- build.gradle.kts | 4 +- 41 files changed, 285 insertions(+), 567 deletions(-) delete mode 100644 app/src/debug/res/drawable/baseline_chevron_left_24.xml delete mode 100644 app/src/debug/res/drawable/baseline_chevron_right_24.xml delete mode 100644 app/src/main/java/com/dzeio/openhealth/adapters/FoodAdapter.kt delete mode 100644 app/src/main/java/com/dzeio/openhealth/adapters/StepsAdapter.kt delete mode 100644 app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt delete mode 100644 app/src/main/java/com/dzeio/openhealth/adapters/WeightAdapter.kt delete mode 100644 app/src/main/res/drawable/ic_baseline_edit_24.xml rename app/src/main/res/drawable/{vector_logo_background.xml => logo_background.xml} (100%) delete mode 100644 app/src/main/res/drawable/logo_shealth.png delete mode 100644 app/src/main/res/layout/dialog_food_search_product.xml delete mode 100644 app/src/main/res/layout/item_food.xml delete mode 100644 app/src/main/res/layout/layout_extension_item.xml delete mode 100644 app/src/main/res/layout/layout_item_list.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a058775..b89ea60 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,14 +145,14 @@ android { } } - // Compile using JAVA 8 + // Compile using JAVA 11 compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = JavaVersion.VERSION_11.toString() } // Enable View Binding and Data Binding diff --git a/app/src/debug/res/drawable/baseline_chevron_left_24.xml b/app/src/debug/res/drawable/baseline_chevron_left_24.xml deleted file mode 100644 index 25a728b..0000000 --- a/app/src/debug/res/drawable/baseline_chevron_left_24.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/debug/res/drawable/baseline_chevron_right_24.xml b/app/src/debug/res/drawable/baseline_chevron_right_24.xml deleted file mode 100644 index e7cf886..0000000 --- a/app/src/debug/res/drawable/baseline_chevron_right_24.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml index 695aeaf..7e3d221 100644 --- a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/java/com/dzeio/openhealth/Settings.kt b/app/src/main/java/com/dzeio/openhealth/Settings.kt index 25aecbc..afde599 100644 --- a/app/src/main/java/com/dzeio/openhealth/Settings.kt +++ b/app/src/main/java/com/dzeio/openhealth/Settings.kt @@ -34,4 +34,7 @@ object Settings { * Goal number of steps each days */ const val STEPS_GOAL = "com.dzeio.open-health.steps.goal-daily" + + const val WATER_INTAKE_SIZE = "com.dzeio.open-health.water.size" + const val WATER_INTAKE_SIZE_DEFAULT = 250 } diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/FoodAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/FoodAdapter.kt deleted file mode 100644 index f2689d2..0000000 --- a/app/src/main/java/com/dzeio/openhealth/adapters/FoodAdapter.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.dzeio.openhealth.adapters - -import android.view.LayoutInflater -import android.view.ViewGroup -import com.dzeio.openhealth.R -import com.dzeio.openhealth.core.BaseAdapter -import com.dzeio.openhealth.core.BaseViewHolder -import com.dzeio.openhealth.data.food.Food -import com.dzeio.openhealth.databinding.ItemFoodBinding -import com.dzeio.openhealth.utils.NetworkUtils -import kotlin.math.roundToInt - -class FoodAdapter : BaseAdapter() { - - override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> ItemFoodBinding - get() = ItemFoodBinding::inflate - - var onItemClick: ((weight: Food) -> Unit)? = null - - override fun onBindData( - holder: BaseViewHolder, - item: Food, - position: Int - ) { - // Download remote picture - if (item.image != null) { - NetworkUtils.getImageInBackground(holder.binding.productImage, item.image!!) - } - - // set the food name - holder.binding.foodName.text = item.name + " ${item.id}" - - // set the food description - holder.binding.foodDescription.text = holder.itemView.context.getString( - R.string.food_description, - item.quantity.roundToInt().toString() + item.serving.replace(Regex("\\d+"), ""), - (item.energy / 100 * item.quantity) - ) - - // set the callback - holder.binding.edit.setOnClickListener { - onItemClick?.invoke(item) - } - } -} diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/StepsAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/StepsAdapter.kt deleted file mode 100644 index 71625fc..0000000 --- a/app/src/main/java/com/dzeio/openhealth/adapters/StepsAdapter.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.dzeio.openhealth.adapters - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import com.dzeio.openhealth.R -import com.dzeio.openhealth.core.BaseAdapter -import com.dzeio.openhealth.core.BaseViewHolder -import com.dzeio.openhealth.data.step.Step -import com.dzeio.openhealth.databinding.LayoutItemListBinding - -class StepsAdapter() : BaseAdapter() { - - override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> LayoutItemListBinding - get() = LayoutItemListBinding::inflate - - var onItemClick: ((weight: Step) -> Unit)? = null - - var isDay = false - - override fun onBindData( - holder: BaseViewHolder, - item: Step, - position: Int - ) { - // set the number of steps taken - holder.binding.value.text = holder.itemView.context.getString( - R.string.steps_count, - item.value - ) - - // set the datetime - holder.binding.datetime.text = item.formatTimestamp(!isDay) - - if (isDay) { - holder.binding.iconRight.visibility = View.GONE - } else { - holder.binding.iconRight.setImageResource(R.drawable.ic_zoom_out_map) - } - - // set the callback - holder.binding.edit.setOnClickListener { - onItemClick?.invoke(item) - } - } -} diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt deleted file mode 100644 index ff869e1..0000000 --- a/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.dzeio.openhealth.adapters - -import android.view.LayoutInflater -import android.view.ViewGroup -import com.dzeio.openhealth.core.BaseAdapter -import com.dzeio.openhealth.core.BaseViewHolder -import com.dzeio.openhealth.data.water.Water -import com.dzeio.openhealth.databinding.LayoutItemListBinding -import com.dzeio.openhealth.units.Units - -class WaterAdapter : BaseAdapter() { - - /** - * The unit the adapter will be using - */ - var unit: Units.Volume = Units.Volume.MILLILITER - - override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> LayoutItemListBinding - get() = LayoutItemListBinding::inflate - - var onItemClick: ((weight: Water) -> Unit)? = null - - override fun onBindData( - holder: BaseViewHolder, - item: Water, - position: Int - ) { - // set the wate intake text - holder.binding.value.text = - holder.itemView.context.getString(unit.unit, unit.formatToString(item.value)) - - // set the datetime - holder.binding.datetime.text = item.formatTimestamp() - - // set the callback - holder.binding.edit.setOnClickListener { - onItemClick?.invoke(item) - } - } -} diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/WeightAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/WeightAdapter.kt deleted file mode 100644 index 49fefa7..0000000 --- a/app/src/main/java/com/dzeio/openhealth/adapters/WeightAdapter.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.dzeio.openhealth.adapters - -import android.view.LayoutInflater -import android.view.ViewGroup -import com.dzeio.openhealth.core.BaseAdapter -import com.dzeio.openhealth.core.BaseViewHolder -import com.dzeio.openhealth.data.weight.Weight -import com.dzeio.openhealth.databinding.LayoutItemListBinding -import com.dzeio.openhealth.units.Units - -class WeightAdapter : BaseAdapter() { - - /** - * The unit the adapter will be using - */ - var unit: Units.Mass = Units.Mass.KILOGRAM - - override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> LayoutItemListBinding - get() = LayoutItemListBinding::inflate - - var onItemClick: ((weight: Weight) -> Unit)? = null - - override fun onBindData( - holder: BaseViewHolder, - item: Weight, - position: Int - ) { - // set the weight text - holder.binding.value.text = - holder.itemView.context.getString(unit.unit, unit.formatToString(item.weight)) - - // set the datetime - holder.binding.datetime.text = item.formatTimestamp() - - // set the callback - holder.binding.edit.setOnClickListener { - onItemClick?.invoke(item) - } - } -} diff --git a/app/src/main/java/com/dzeio/openhealth/data/food/Food.kt b/app/src/main/java/com/dzeio/openhealth/data/food/Food.kt index c91cba2..05da7d2 100644 --- a/app/src/main/java/com/dzeio/openhealth/data/food/Food.kt +++ b/app/src/main/java/com/dzeio/openhealth/data/food/Food.kt @@ -75,17 +75,21 @@ data class Food( } // try to know how much was eaten by the user if not said - var eaten = quantity ?: food.servingQuantity ?: food.productQuantity ?: 0f + var eaten = quantity ?: food.productQuantity ?: food.servingQuantity ?: 0f if (eaten == 0f) { - if (food.servingQuantity != null && food.servingQuantity != 0f) { - eaten = food.servingQuantity!! - } else if (food.productQuantity != null && food.productQuantity != 0f) { + if (food.productQuantity != null && food.productQuantity != 0f) { eaten = food.productQuantity!! + } else if (food.servingQuantity != null && food.servingQuantity != 0f) { + eaten = food.servingQuantity!! } else if (food.servingSize != null || food.quantity != null) { - eaten = (food.servingSize ?: food.quantity)!!.trim().replace( - Regex(" +\\w+$"), - "" - ).toInt().toFloat() + eaten = try { + (food.quantity ?: food.servingSize)!!.trim().replace( + Regex(" +\\w+"), + "" + ).toInt().toFloat() + } catch (e: NumberFormatException) { + 0f + } } } Log.d("Food", "$food") diff --git a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt index 4f33981..c5a6efd 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialog.kt @@ -10,6 +10,7 @@ import com.dzeio.openhealth.databinding.DialogFoodProductBinding import com.dzeio.openhealth.utils.NetworkUtils import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint +import kotlin.math.roundToInt /** * Dialog that display to the user a spcific product and it's consumption @@ -66,6 +67,7 @@ class FoodDialog : ) } binding.quantity.setText(it.quantity.toString()) + dialog?.setTitle(it.name) } binding.quantity.addTextChangedListener { @@ -77,17 +79,17 @@ class FoodDialog : quantity = newQuantity viewModel.items.value?.let { val transformer = newQuantity ?: it.quantity - val energy = it.energy / 100 * transformer - binding.energyTxt.text = "${energy.toInt()} / 2594kcal" + val energy = it.energy * transformer / 100 + binding.energyTxt.text = "${energy.roundToInt()} / 2594kcal" binding.energyBar.progress = (100 * energy / 2594).toInt() - val proteins = it.proteins / 100 * transformer - binding.proteinsTxt.text = "${proteins.toInt()} / 130g" + val proteins = it.proteins * transformer / 100 + binding.proteinsTxt.text = "${proteins.roundToInt()} / 130g" binding.proteinsBar.progress = (100 * proteins / 130).toInt() - val carbohydrates = it.carbohydrates / 100 * transformer - binding.carbsTxt.text = "${carbohydrates.toInt()} / 324g" + val carbohydrates = it.carbohydrates * transformer / 100 + binding.carbsTxt.text = "${carbohydrates.roundToInt()} / 324g" binding.carbsBar.progress = (100 * carbohydrates / 324).toInt() - val fat = it.fat / 100 * transformer - binding.fatTxt.text = "${fat.toInt()} / 87g" + val fat = it.fat * transformer / 100 + binding.fatTxt.text = "${fat.roundToInt()} / 87g" binding.fatBar.progress = (100 * fat / 87).toInt() } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialogViewModel.kt b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialogViewModel.kt index 59b9f27..4a3c0d0 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialogViewModel.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodDialogViewModel.kt @@ -41,11 +41,6 @@ class FoodDialogViewModel @Inject internal constructor( return } - val transformer = quantity / it.quantity - it.energy = it.energy * transformer - it.proteins = it.proteins * transformer - it.carbohydrates = it.carbohydrates * transformer - it.fat = it.fat * transformer it.quantity = quantity viewModelScope.launch { diff --git a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodHomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodHomeFragment.kt index 38110c1..fdc6bde 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/food/FoodHomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/food/FoodHomeFragment.kt @@ -1,5 +1,6 @@ package com.dzeio.openhealth.ui.food +import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.Menu @@ -10,12 +11,15 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.dzeio.openhealth.Application import com.dzeio.openhealth.R -import com.dzeio.openhealth.adapters.FoodAdapter +import com.dzeio.openhealth.adapters.ItemAdapter import com.dzeio.openhealth.core.BaseFragment +import com.dzeio.openhealth.data.food.Food import com.dzeio.openhealth.databinding.FragmentFoodHomeBinding import com.dzeio.openhealth.ui.steps.FoodHomeViewModel +import com.google.android.material.color.MaterialColors import dagger.hilt.android.AndroidEntryPoint import java.util.Calendar +import kotlin.math.roundToInt @AndroidEntryPoint class FoodHomeFragment : @@ -41,11 +45,11 @@ class FoodHomeFragment : val manager = LinearLayoutManager(requireContext()) recycler.layoutManager = manager - val adapter = FoodAdapter() + val adapter = ItemAdapter() adapter.onItemClick = { findNavController().navigate( FoodHomeFragmentDirections.actionFoodHomeFragmentToNavDialogFoodProduct( - it.id, + it.value.id, false ) ) @@ -53,7 +57,24 @@ class FoodHomeFragment : recycler.adapter = adapter viewModel.items.observe(viewLifecycleOwner) { - adapter.set(it) + adapter.set( + it!!.map { food -> + ItemAdapter.Item( + food, + food.name, + getString( + R.string.food_description, + food.quantity.roundToInt().toString() + food.serving.replace( + Regex("\\d+"), + "" + ), + (food.energy / 100 * food.quantity) + ), + food.image, + R.drawable.ic_outline_edit_24 + ) + } + ) var energy = 0f var proteins = 0f @@ -65,14 +86,47 @@ class FoodHomeFragment : carbohydrates += food.carbohydrates / 100 * food.quantity fat += food.fat / 100 * food.quantity } + binding.energyTxt.text = "${energy.toInt()} / 2594kcal" binding.energyBar.progress = (100 * energy / 2594).toInt() + if (binding.energyBar.progress >= 100) { + binding.energyBar.progressTintList = ColorStateList.valueOf( + MaterialColors.getColor( + view, + com.google.android.material.R.attr.colorError + ) + ) + } binding.proteinsTxt.text = "${proteins.toInt()} / 130g" binding.proteinsBar.progress = (100 * proteins / 130).toInt() + if (binding.proteinsBar.progress >= 100) { + binding.proteinsBar.progressTintList = ColorStateList.valueOf( + MaterialColors.getColor( + view, + com.google.android.material.R.attr.colorError + ) + ) + } binding.carbsTxt.text = "${carbohydrates.toInt()} / 324g" binding.carbsBar.progress = (100 * carbohydrates / 324).toInt() + if (binding.carbsBar.progress >= 100) { + binding.carbsBar.progressTintList = ColorStateList.valueOf( + MaterialColors.getColor( + view, + com.google.android.material.R.attr.colorError + ) + ) + } binding.fatTxt.text = "${fat.toInt()} / 87g" binding.fatBar.progress = (100 * fat / 87).toInt() + if (binding.fatBar.progress >= 100) { + binding.fatBar.progressTintList = ColorStateList.valueOf( + MaterialColors.getColor( + view, + com.google.android.material.R.attr.colorError + ) + ) + } } binding.next.setOnClickListener { diff --git a/app/src/main/java/com/dzeio/openhealth/ui/food/SearchFoodDialog.kt b/app/src/main/java/com/dzeio/openhealth/ui/food/SearchFoodDialog.kt index 0b6d0fe..d9d2ae7 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/food/SearchFoodDialog.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/food/SearchFoodDialog.kt @@ -7,22 +7,24 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.dzeio.openhealth.R -import com.dzeio.openhealth.adapters.FoodAdapter +import com.dzeio.openhealth.adapters.ItemAdapter import com.dzeio.openhealth.core.BaseDialog -import com.dzeio.openhealth.databinding.DialogFoodSearchProductBinding +import com.dzeio.openhealth.data.food.Food +import com.dzeio.openhealth.databinding.DialogSearchBinding import com.dzeio.openhealth.utils.NetworkResult import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch +import kotlin.math.roundToInt @AndroidEntryPoint class SearchFoodDialog : - BaseDialog( + BaseDialog( SearchFoodDialogViewModel::class.java ) { - override val bindingInflater: (LayoutInflater) -> DialogFoodSearchProductBinding = - DialogFoodSearchProductBinding::inflate + override val bindingInflater: (LayoutInflater) -> DialogSearchBinding = + DialogSearchBinding::inflate override fun onBuilderInit(builder: MaterialAlertDialogBuilder) { super.onBuilderInit(builder) @@ -43,7 +45,7 @@ class SearchFoodDialog : dialog.setOnShowListener { val btn = dialog.getButton(AlertDialog.BUTTON_NEUTRAL) btn.setOnClickListener { - viewModel.search(binding.input.text.toString()) + viewModel.search(binding.search.text.toString()) binding.loading.visibility = View.VISIBLE } } @@ -57,10 +59,10 @@ class SearchFoodDialog : val manager = LinearLayoutManager(requireContext()) recycler.layoutManager = manager - val adapter = FoodAdapter() + val adapter = ItemAdapter() adapter.onItemClick = { lifecycleScope.launch { - val id = viewModel.addProduct(it) + val id = viewModel.addProduct(it.value) findNavController().navigate( SearchFoodDialogDirections.actionNavDialogFoodSearchToNavDialogFoodProduct( id, @@ -72,7 +74,25 @@ class SearchFoodDialog : recycler.adapter = adapter viewModel.items.observe(this) { - adapter.set(it.data ?: arrayListOf()) + if (it.data != null) { + adapter.set( + it.data!!.map { food -> + ItemAdapter.Item( + food, + food.name, + getString( + R.string.food_description, + food.quantity.roundToInt().toString() + food.serving.replace( + Regex("\\d+"), + "" + ), + (food.energy / 100 * food.quantity) + ), + food.image + ) + } + ) + } if (it.status == NetworkResult.NetworkStatus.FINISHED) { binding.loading.visibility = View.GONE } else if (it.status == NetworkResult.NetworkStatus.ERRORED) { diff --git a/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt index 05a7b77..181ac53 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt @@ -12,7 +12,8 @@ import com.dzeio.charts.Entry import com.dzeio.charts.axis.Line import com.dzeio.charts.series.BarSerie import com.dzeio.openhealth.Application -import com.dzeio.openhealth.adapters.StepsAdapter +import com.dzeio.openhealth.R +import com.dzeio.openhealth.adapters.ItemAdapter import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.data.step.Step import com.dzeio.openhealth.databinding.FragmentStepsHomeBinding @@ -50,16 +51,14 @@ class StepsHomeFragment : val manager = LinearLayoutManager(requireContext()) recycler.layoutManager = manager - val adapter = StepsAdapter().apply { - this.isDay = isDay - } + val adapter = ItemAdapter() if (!isDay) { adapter.onItemClick = { findNavController().navigate( StepsHomeFragmentDirections.actionNavStepsHomeSelf().apply { - day = it.timestamp - title = "Steps from " + it.formatTimestamp(true) + day = it.value.timestamp + title = "Steps from " + it.value.formatTimestamp(true) } ) } @@ -137,7 +136,18 @@ class StepsHomeFragment : } } if (isDay) { - adapter.set(filtered) + adapter.set( + filtered.map { + ItemAdapter.Item( + it, + getString( + R.string.steps_count, + it.value + ), + it.formatTimestamp(false) + ) + } + ) serie.entries = filtered.map { Entry( it.timestamp.toDouble(), @@ -172,6 +182,17 @@ class StepsHomeFragment : adapter.set( entries.map { Step(value = it.value.y.toInt(), timestamp = it.key) } .sortedByDescending { it.timestamp } + .map { + ItemAdapter.Item( + it, + getString( + R.string.steps_count, + it.value + ), + it.formatTimestamp(true), + icon = R.drawable.ic_zoom_out_map + ) + } ) serie.entries = ArrayList(entries.values) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterHomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterHomeFragment.kt index 9c74cc1..c22b002 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterHomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterHomeFragment.kt @@ -8,9 +8,12 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.dzeio.charts.Entry import com.dzeio.charts.series.BarSerie -import com.dzeio.openhealth.adapters.WaterAdapter +import com.dzeio.openhealth.R +import com.dzeio.openhealth.adapters.ItemAdapter import com.dzeio.openhealth.core.BaseFragment +import com.dzeio.openhealth.data.water.Water import com.dzeio.openhealth.databinding.FragmentMainWaterHomeBinding +import com.dzeio.openhealth.units.Units import com.dzeio.openhealth.utils.ChartUtils import dagger.hilt.android.AndroidEntryPoint import java.text.SimpleDateFormat @@ -34,15 +37,16 @@ class WaterHomeFragment : val manager = LinearLayoutManager(requireContext()) recycler.layoutManager = manager - val adapter = WaterAdapter() - adapter.onItemClick = { - findNavController().navigate( - WaterHomeFragmentDirections.actionNavWaterHomeToNavWaterEdit( - it.id + val adapter = ItemAdapter().apply { + onItemClick = { + findNavController().navigate( + WaterHomeFragmentDirections.actionNavWaterHomeToNavWaterEdit( + it.value.id + ) ) - ) + } + recycler.adapter = this } - recycler.adapter = adapter val chart = binding.chart @@ -58,6 +62,7 @@ class WaterHomeFragment : xAxis.apply { dataWidth = 604800000.0 textPaint.textSize = 32f + scrollEnabled = true onValueFormat = onValueFormat@{ return@onValueFormat SimpleDateFormat( "yyyy-MM-dd", @@ -74,7 +79,20 @@ class WaterHomeFragment : } viewModel.items.observe(viewLifecycleOwner) { list -> - adapter.set(list) + val unit = Units.Volume.MILLILITER + adapter.set( + list.map { + ItemAdapter.Item( + it, + getString( + unit.unit, + unit.formatToString(it.value) + ), + it.formatTimestamp(), + icon = R.drawable.ic_outline_edit_24 + ) + } + ) if (list.isEmpty()) { return@observe @@ -88,7 +106,9 @@ class WaterHomeFragment : } serie.entries = dataset as ArrayList - chart.xAxis.x = dataset[0].x + chart.xAxis.x = chart.xAxis.getXMin() + chart.xAxis.x = + chart.xAxis.getXMax() - chart.xAxis.dataWidth!! + chart.xAxis.dataWidth!! / 7 chart.refresh() } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt index b49f762..ba13487 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt @@ -1,12 +1,12 @@ package com.dzeio.openhealth.ui.water import android.view.LayoutInflater +import android.view.View +import androidx.core.widget.doOnTextChanged import com.dzeio.openhealth.R +import com.dzeio.openhealth.Settings import com.dzeio.openhealth.core.BaseDialog import com.dzeio.openhealth.databinding.DialogWaterSizeSelectorBinding -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.textfield.TextInputEditText -import com.google.android.material.textfield.TextInputLayout import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -30,50 +30,47 @@ class WaterSizeSelectorDialog : } viewModel.cupSize.observe(this) { + var real = it ?: Settings.WATER_INTAKE_SIZE_DEFAULT binding.customSize.text = String.format( getString(R.string.custom_amount), - "${it}ml" + "${real}ml" ) + if (binding.inputParent.visibility == View.GONE) { + binding.input.setText(real.toString()) + } } binding.size100ml.setOnClickListener { + setTextFieldStatus() viewModel.setCupSize(100) } binding.size250ml.setOnClickListener { + setTextFieldStatus() viewModel.setCupSize(250) } binding.size500ml.setOnClickListener { + setTextFieldStatus() viewModel.setCupSize(500) } binding.size1000ml.setOnClickListener { + setTextFieldStatus() viewModel.setCupSize(1000) } binding.customSize.setOnClickListener { - val editTextLayout = TextInputLayout(requireContext()) + setTextFieldStatus(true) + } - val editText = TextInputEditText(requireContext()) - editText.setText(viewModel.cupSize.value.toString()) - - editTextLayout.addView(editText) - - MaterialAlertDialogBuilder(requireContext()) - .setView(editTextLayout) - .setTitle("Custom Cup Size") - .setOnCancelListener { - it.dismiss() - } - .setNegativeButton(R.string.cancel) { dialog, _ -> - dialog.dismiss() - } - .setPositiveButton( - R.string.validate - ) { dialog, _ -> - viewModel.setCupSize(editText.text.toString().toInt()) - dismiss() - dialog.dismiss() - } - .show() + binding.input.doOnTextChanged { text, start, before, count -> + val newSize = text.toString().toIntOrNull() + if (newSize != null) { + viewModel.setCupSize(newSize) + } } } + + private fun setTextFieldStatus(displayed: Boolean = false) { + binding.inputParent.visibility = if (displayed) View.VISIBLE else View.GONE + binding.customSize.visibility = if (displayed) View.GONE else View.VISIBLE + } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt index 6e3c9b0..bcd20aa 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt @@ -1,32 +1,19 @@ package com.dzeio.openhealth.ui.water -import android.content.SharedPreferences -import androidx.lifecycle.MutableLiveData +import com.dzeio.openhealth.Settings import com.dzeio.openhealth.core.BaseViewModel +import com.dzeio.openhealth.utils.Configuration import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class WaterSizeSelectorViewModel @Inject constructor( - private val settings: SharedPreferences + private val settings: Configuration ) : BaseViewModel() { - private val _cupSize = MutableLiveData(0) - - val cupSize = _cupSize - - init { - val cup = settings.getInt("water_cup_size", -1) - if (cup != -1) { - _cupSize.value = cup - } - } + val cupSize = settings.getInt(Settings.WATER_INTAKE_SIZE).toLiveData() fun setCupSize(value: Int) { - settings.edit() - .putInt("water_cup_size", value) - .apply() - - _cupSize.value = value + settings.getInt(Settings.WATER_INTAKE_SIZE).value = value } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/weight/ListWeightFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/weight/ListWeightFragment.kt index dbeeed9..5c6bf08 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/weight/ListWeightFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/weight/ListWeightFragment.kt @@ -21,10 +21,11 @@ import com.dzeio.charts.axis.Line import com.dzeio.charts.series.LineSerie import com.dzeio.openhealth.BuildConfig import com.dzeio.openhealth.R -import com.dzeio.openhealth.adapters.WeightAdapter +import com.dzeio.openhealth.adapters.ItemAdapter import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.data.weight.Weight import com.dzeio.openhealth.databinding.FragmentListWeightBinding +import com.dzeio.openhealth.units.Units import com.dzeio.openhealth.utils.PermissionsManager import com.google.android.material.color.MaterialColors import dagger.hilt.android.AndroidEntryPoint @@ -113,11 +114,11 @@ class ListWeightFragment : ) } - val adapter = WeightAdapter().apply { + val adapter = ItemAdapter().apply { onItemClick = { findNavController().navigate( ListWeightFragmentDirections.actionNavListWeightToNavEditWeight( - it.id + it.value.id ) ) } @@ -129,16 +130,23 @@ class ListWeightFragment : this.adapter = adapter } - viewModel.massUnit.observe(viewLifecycleOwner) { - adapter.unit = it - } - - viewModel.weights.observe(viewLifecycleOwner) { - if (it != null) { - val itt = it.toMutableList() - itt.sortWith { o1, o2 -> if (o1.timestamp > o2.timestamp) -1 else 1 } - adapter.set(itt) - updateGraph(it) + viewModel.weights.observe(viewLifecycleOwner) { list -> + if (list != null) { + val unit = viewModel.massUnit.value ?: Units.Mass.KILOGRAM + adapter.set( + list.map { + ItemAdapter.Item( + it, + getString( + unit.unit, + unit.formatToString(it.weight) + ), + it.formatTimestamp(), + icon = R.drawable.ic_outline_edit_24 + ) + }.reversed() + ) + updateGraph(list) } } diff --git a/app/src/main/java/com/dzeio/openhealth/utils/Configuration.kt b/app/src/main/java/com/dzeio/openhealth/utils/Configuration.kt index 1b2abce..29676d5 100644 --- a/app/src/main/java/com/dzeio/openhealth/utils/Configuration.kt +++ b/app/src/main/java/com/dzeio/openhealth/utils/Configuration.kt @@ -54,10 +54,10 @@ class Configuration( return cache[key] as BooleanField } - fun getInt(key: String): IntField { + fun getInt(key: String, defaultValue: Int? = null): IntField { if (cache[key] == null) { // Log.d(TAG, "$key is not cache, creating new instance") - cache[key] = IntField(key) + cache[key] = IntField(key, defaultValue) } else { // Log.d(TAG, "$key in cache") } @@ -141,10 +141,15 @@ class Configuration( inner class IntField( private val key: String, - private val defaultValue: Int = -1 + private val defaultValue: Int? = null ) : Field(defaultValue) { override fun exists(): Boolean = prefs.contains(key) - override fun internalGet(): Int = prefs.getInt(key, defaultValue) + override fun internalGet(): Int? { + if (exists()) { + return prefs.getInt(key, 0) + } + return defaultValue + } override fun internalSet(value: Int?) = prefs.edit { if (value == null) remove(key) else putInt(key, value) } } diff --git a/app/src/main/res/drawable/ic_baseline_edit_24.xml b/app/src/main/res/drawable/ic_baseline_edit_24.xml deleted file mode 100644 index 2844baf..0000000 --- a/app/src/main/res/drawable/ic_baseline_edit_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_logo_background.xml b/app/src/main/res/drawable/logo_background.xml similarity index 100% rename from app/src/main/res/drawable/vector_logo_background.xml rename to app/src/main/res/drawable/logo_background.xml diff --git a/app/src/main/res/drawable/logo_shealth.png b/app/src/main/res/drawable/logo_shealth.png deleted file mode 100644 index 2d85c18c8ea03b1032179259c2621c501feae4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19850 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 Bmn8rI diff --git a/app/src/main/res/layout/dialog_edit_weight.xml b/app/src/main/res/layout/dialog_edit_weight.xml index 67c52b6..175febb 100644 --- a/app/src/main/res/layout/dialog_edit_weight.xml +++ b/app/src/main/res/layout/dialog_edit_weight.xml @@ -18,7 +18,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/dialog_food_product.xml b/app/src/main/res/layout/dialog_food_product.xml index d68b57c..744f8ce 100644 --- a/app/src/main/res/layout/dialog_food_product.xml +++ b/app/src/main/res/layout/dialog_food_product.xml @@ -10,6 +10,7 @@ diff --git a/app/src/main/res/layout/dialog_food_search_product.xml b/app/src/main/res/layout/dialog_food_search_product.xml deleted file mode 100644 index 4895165..0000000 --- a/app/src/main/res/layout/dialog_food_search_product.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_water_size_selector.xml b/app/src/main/res/layout/dialog_water_size_selector.xml index a2a38a1..81d1e76 100644 --- a/app/src/main/res/layout/dialog_water_size_selector.xml +++ b/app/src/main/res/layout/dialog_water_size_selector.xml @@ -87,11 +87,24 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" + android:visibility="visible" android:text="@string/custom_amount" style="@style/Widget.Material3.Button.TextButton" tools:text="Custom amount: 1234ml" /> + + + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 709783f..d4173c3 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" + android:padding="16dp" tools:context=".ui.home.HomeFragment">