From 98f7f3ac8b312eeda706a54135046c74133bc391 Mon Sep 17 00:00:00 2001 From: Avior Date: Thu, 6 Jan 2022 00:41:17 +0100 Subject: [PATCH] Update --- .idea/codeStyles/Project.xml | 5 ++ .idea/misc.xml | 1 + .../openhealth/adapters/ExtensionAdapter.kt | 8 +-- .../dzeio/openhealth/adapters/WaterAdapter.kt | 4 +- .../dzeio/openhealth/extensions/GoogleFit.kt | 13 ++-- .../dzeio/openhealth/ui/home/HomeFragment.kt | 71 +++++++++++++------ .../ui/settings/SettingsFragment.kt | 9 ++- .../openhealth/ui/water/WaterHomeFragment.kt | 20 +++--- .../ui/water/WaterSizeSelectorDialog.kt | 13 ++++ .../ui/water/WaterSizeSelectorViewModel.kt | 6 ++ .../com/dzeio/openhealth/utils/GraphUtils.kt | 44 +++++++----- .../res/layout/dialog_water_size_selector.xml | 7 ++ app/src/main/res/xml/preferences.xml | 10 ++- build.gradle | 6 +- 14 files changed, 151 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt create mode 100644 app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt create mode 100644 app/src/main/res/layout/dialog_water_size_selector.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 7643783..f663132 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,6 +1,11 @@ + + diff --git a/.idea/misc.xml b/.idea/misc.xml index d182631..772cb3e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -27,6 +27,7 @@ + diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/ExtensionAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/ExtensionAdapter.kt index 9b3d94a..6598e2f 100644 --- a/app/src/main/java/com/dzeio/openhealth/adapters/ExtensionAdapter.kt +++ b/app/src/main/java/com/dzeio/openhealth/adapters/ExtensionAdapter.kt @@ -7,10 +7,10 @@ import com.dzeio.openhealth.core.BaseViewHolder import com.dzeio.openhealth.databinding.LayoutExtensionItemBinding import com.dzeio.openhealth.extensions.Extension -class ExtensionAdapter() : BaseAdapter() { +class ExtensionAdapter : BaseAdapter() { - override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> LayoutExtensionItemBinding - get() = LayoutExtensionItemBinding::inflate + override val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> + LayoutExtensionItemBinding = LayoutExtensionItemBinding::inflate var onItemClick: ((weight: Extension) -> Unit)? = null @@ -25,4 +25,4 @@ class ExtensionAdapter() : BaseAdapter() onItemClick?.invoke(item) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt b/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt index 2669c3a..27b3fde 100644 --- a/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt +++ b/app/src/main/java/com/dzeio/openhealth/adapters/WaterAdapter.kt @@ -20,9 +20,9 @@ class WaterAdapter() : BaseAdapter() { position: Int ) { holder.binding.value.text = "${item.value}ml" - holder.binding.datetime.text = "${item.formatTimestamp()} ${item.timestamp}" + holder.binding.datetime.text = item.formatTimestamp() holder.binding.edit.setOnClickListener { onItemClick?.invoke(item) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/dzeio/openhealth/extensions/GoogleFit.kt b/app/src/main/java/com/dzeio/openhealth/extensions/GoogleFit.kt index 8bce6ec..89be221 100644 --- a/app/src/main/java/com/dzeio/openhealth/extensions/GoogleFit.kt +++ b/app/src/main/java/com/dzeio/openhealth/extensions/GoogleFit.kt @@ -129,7 +129,6 @@ class GoogleFit() : Extension() { arrayOf(startTime, endTime) } - private fun startImport(data: Data) { Log.d("GoogleFitImporter", "Importing for ${data.name}") @@ -151,9 +150,9 @@ class GoogleFit() : Extension() { DataReadRequest.Builder() .read(type) .setTimeRange(timeRange[0], timeRange[1], timeUnit) - .build(), data + .build(), + data ) - } private fun runRequest(request: DataReadRequest, data: Data) { @@ -209,7 +208,8 @@ class GoogleFit() : Extension() { Data.WEIGHT -> { weightLiveData.value = ImportState( - States.DONE, weightLiveData.value?.list + States.DONE, + weightLiveData.value?.list ?: ArrayList() ) } @@ -239,7 +239,7 @@ class GoogleFit() : Extension() { return } connectLiveData.value = States.DONE - //signIn(Data.values()[requestCode]) + // signIn(Data.values()[requestCode]) } private lateinit var weightLiveData: MutableLiveData> @@ -258,5 +258,4 @@ class GoogleFit() : Extension() { return weightLiveData } - -} \ No newline at end of file +} 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 c6326e7..62ae0fc 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 @@ -3,6 +3,7 @@ package com.dzeio.openhealth.ui.home import android.animation.ValueAnimator import android.graphics.Bitmap import android.graphics.Canvas +import android.graphics.Color import android.graphics.RectF import android.os.Bundle import android.util.Log @@ -20,6 +21,8 @@ import com.dzeio.openhealth.databinding.FragmentHomeBinding import com.dzeio.openhealth.ui.weight.AddWeightDialog import com.dzeio.openhealth.utils.DrawUtils import com.dzeio.openhealth.utils.GraphUtils +import com.github.mikephil.charting.components.LimitLine +import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.data.Entry import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.data.LineDataSet @@ -50,7 +53,7 @@ class HomeFragment : BaseFragment(HomeViewMo AddWeightDialog().show(requireActivity().supportFragmentManager, null) } - binding.fragmentHomeWaterAdd.setOnClickListener { _ -> + binding.fragmentHomeWaterAdd.setOnClickListener { val water = viewModel.water.value @@ -98,7 +101,6 @@ class HomeFragment : BaseFragment(HomeViewMo viewModel.updateWater(item) } } - } } @@ -115,7 +117,8 @@ class HomeFragment : BaseFragment(HomeViewMo MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorPrimary - ), MaterialColors.getColor( + ), + MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorOnBackground ) @@ -129,11 +132,17 @@ class HomeFragment : BaseFragment(HomeViewMo entries.add(Entry(item.timestamp.toFloat(), item.weight)) } - val dataSet = LineDataSet(entries, "Label") + val dataSet = LineDataSet(entries, "Label").apply { + axisDependency = YAxis.AxisDependency.RIGHT + setDrawCircles(false) + setDrawCircleHole(false) + mode = LineDataSet.Mode.HORIZONTAL_BEZIER + } binding.weightGraph.apply { // Apply new dataset + data = LineData(dataSet) // idk what I did but it works lol @@ -141,9 +150,42 @@ class HomeFragment : BaseFragment(HomeViewMo 0f, entries[entries.size - 1].x / 1000f ) + val goal = PreferenceManager.getDefaultSharedPreferences(requireContext()) + .getString("weight_goal", null)?.toFloatOrNull() + +// legend.apply { +// isEnabled = true +// form = Legend.LegendForm.LINE +// +// if (goal != null) { +// val legendEntry = LegendEntry().apply { +// label = "Weight Goal" +// formColor = Color.RED +// } +// setCustom(arrayOf(legendEntry)) +// } +// } + + setDrawBorders(false) + // BIS... :( // Also it invalidate the view so I don't have to call invalidate moveViewToX(entries[entries.size - 1].x - 1600000000f) + + if (goal != null) { + axisRight.axisMinimum = goal + val limit = LimitLine(goal) + limit.lineColor = Color.RED + val dash = 30f + limit.enableDashedLine(dash, dash, 0f) + limit.lineWidth = 1f + limit.textColor = Color.BLACK + limit.textSize = 12f + + axisRight.addLimitLine(limit) + } else { + isAutoScaleMinMaxEnabled = true + } } } } @@ -167,7 +209,6 @@ class HomeFragment : BaseFragment(HomeViewMo updateWater(0) } } - } private fun updateWater(water: Int) { @@ -193,21 +234,6 @@ class HomeFragment : BaseFragment(HomeViewMo 85f ) -// DrawUtils.drawRect( -// canvas, -// RectF( -// 0f, -// 0f, -// 100f, -// 100f -// ), -// MaterialColors.getColor( -// requireView(), -// com.google.android.material.R.attr.colorOnPrimary -// ), -// 3f -// ) - DrawUtils.drawArc( canvas, 100f, @@ -231,7 +257,8 @@ class HomeFragment : BaseFragment(HomeViewMo MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorPrimary - ), 6f + ), + 6f ) canvas.save() binding.background.setImageBitmap(graph) @@ -239,4 +266,4 @@ class HomeFragment : BaseFragment(HomeViewMo start() } } -} \ No newline at end of file +} 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 e2c44d0..cc7c45a 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 @@ -1,11 +1,18 @@ package com.dzeio.openhealth.ui.settings import android.os.Bundle +import android.text.InputType +import androidx.preference.EditTextPreference import androidx.preference.PreferenceFragmentCompat import com.dzeio.openhealth.R class SettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) + + val weightGoal = findPreference("weight_goal") + weightGoal?.setOnBindEditTextListener { + it.inputType = InputType.TYPE_CLASS_NUMBER + } } -} \ No newline at end of file +} 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 7d78361..2a9d5a0 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 @@ -1,11 +1,13 @@ package com.dzeio.openhealth.ui.water import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.dzeio.openhealth.Application.Companion.TAG import com.dzeio.openhealth.adapters.WaterAdapter import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.databinding.FragmentMainWaterHomeBinding @@ -15,7 +17,9 @@ import com.github.mikephil.charting.data.BarDataSet import com.github.mikephil.charting.data.BarEntry import com.google.android.material.color.MaterialColors import dagger.hilt.android.AndroidEntryPoint -import java.util.* +import java.util.Calendar +import java.util.Date +import java.util.TimeZone @AndroidEntryPoint class WaterHomeFragment : @@ -47,26 +51,26 @@ class WaterHomeFragment : val chart = binding.chart GraphUtils.barChartSetup( - chart, MaterialColors.getColor( + chart, + MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorPrimary - ), MaterialColors.getColor( + ), + MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorOnBackground ) ) + chart.xAxis.valueFormatter = GraphUtils.DateValueFormatter(1000 * 60 * 60 * 24) viewModel.items.observe(viewLifecycleOwner) { list -> adapter.set(list) val dataset = BarDataSet( list.map { - val epoch = Calendar.getInstance(TimeZone.getTimeZone("UTC")) - epoch.time = Date(0) - epoch.add(Calendar.MILLISECOND, it.timestamp.toInt()) return@map BarEntry( - (epoch.timeInMillis / 1000 / 60 / 60).toFloat(), + (it.timestamp / 1000 / 60 / 60 / 24).toFloat(), it.value.toFloat() ) }, @@ -77,4 +81,4 @@ class WaterHomeFragment : chart.invalidate() } } -} \ No newline at end of file +} 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 new file mode 100644 index 0000000..963537e --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorDialog.kt @@ -0,0 +1,13 @@ +package com.dzeio.openhealth.ui.water + +import android.view.LayoutInflater +import com.dzeio.openhealth.core.BaseDialog +import com.dzeio.openhealth.databinding.DialogWaterSizeSelectorBinding + +class WaterSizeSelectorDialog : + BaseDialog( + WaterSizeSelectorViewModel::class.java + ) { + override val bindingInflater: (LayoutInflater) -> DialogWaterSizeSelectorBinding + get() = DialogWaterSizeSelectorBinding::inflate +} 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 new file mode 100644 index 0000000..bd34769 --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/ui/water/WaterSizeSelectorViewModel.kt @@ -0,0 +1,6 @@ +package com.dzeio.openhealth.ui.water + +import com.dzeio.openhealth.core.BaseViewModel + +class WaterSizeSelectorViewModel : BaseViewModel() { +} diff --git a/app/src/main/java/com/dzeio/openhealth/utils/GraphUtils.kt b/app/src/main/java/com/dzeio/openhealth/utils/GraphUtils.kt index 2027296..0ec7278 100644 --- a/app/src/main/java/com/dzeio/openhealth/utils/GraphUtils.kt +++ b/app/src/main/java/com/dzeio/openhealth/utils/GraphUtils.kt @@ -11,12 +11,15 @@ import com.github.mikephil.charting.data.Entry import com.github.mikephil.charting.formatter.ValueFormatter import com.github.mikephil.charting.interfaces.datasets.IBarLineScatterCandleBubbleDataSet import java.text.SimpleDateFormat -import java.util.* +import java.util.Date +import java.util.Locale object GraphUtils { fun lineChartSetup(chart: LineChart, mainColor: Int, textColor: Int) { barLineChartSetup(chart, mainColor, textColor) + + // chart.isAutoScaleMinMaxEnabled = true } fun barChartSetup(chart: BarChart, mainColor: Int, textColor: Int) { @@ -32,47 +35,40 @@ object GraphUtils { chart.apply { // Setup - legend.isEnabled = false + legend.isEnabled = true description = Description().apply { isEnabled = false } xAxis.apply { - valueFormatter = object : ValueFormatter() { - override fun getAxisLabel(value: Float, axis: AxisBase?): String { - return SimpleDateFormat( - "yyyy-MM-dd", - Locale.getDefault() - ).format(Date(value.toLong())) - //return super.getAxisLabel(value, axis) - } - } + valueFormatter = DateValueFormatter() position = XAxis.XAxisPosition.BOTTOM setDrawGridLines(false) setLabelCount(3, true) this.textColor = textColor - //setDrawGridLines(false) - //setDrawZeroLine(false) + // setDrawGridLines(false) + // setDrawZeroLine(false) setDrawAxisLine(false) disableGridDashedLine() invalidateOutline() } axisLeft.apply { + isEnabled = false axisLineColor = mainColor this.textColor = textColor -// setDrawZeroLine(false) + setDrawZeroLine(false) setLabelCount(0, true) setDrawGridLines(false) + setDrawBorders(false) } axisRight.apply { this.textColor = textColor + setLabelCount(4, true) } setNoDataTextColor(textColor) - - isAutoScaleMinMaxEnabled = true legend.isEnabled = false isDragEnabled = true - isScaleYEnabled = false + // isScaleYEnabled = false description = Description().apply { isEnabled = false } isScaleXEnabled = true setPinchZoom(false) @@ -80,4 +76,16 @@ object GraphUtils { setDrawBorders(false) } } -} \ No newline at end of file + + class DateValueFormatter( + private val transformer: Int = 1 + ) : ValueFormatter() { + override fun getAxisLabel(value: Float, axis: AxisBase?): String { + return SimpleDateFormat( + "yyyy-MM-dd", + Locale.getDefault() + ).format(Date(value.toLong() * transformer)) + // return super.getAxisLabel(value, axis) + } + } +} diff --git a/app/src/main/res/layout/dialog_water_size_selector.xml b/app/src/main/res/layout/dialog_water_size_selector.xml new file mode 100644 index 0000000..869e11f --- /dev/null +++ b/app/src/main/res/layout/dialog_water_size_selector.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 6e926b0..0fac1b7 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -16,6 +16,14 @@ android:selectAllOnFocus="true" android:singleLine="true" android:title="Height" /> + + @@ -37,4 +45,4 @@ android:inputType="number" android:title="Daily Water intake" /> - \ No newline at end of file + diff --git a/build.gradle b/build.gradle index d618ac7..820862a 100644 --- a/build.gradle +++ b/build.gradle @@ -10,12 +10,12 @@ buildscript { } plugins { - id 'com.android.application' version '7.1.0-beta05' apply false - id 'com.android.library' version '7.1.0-beta05' apply false + id 'com.android.application' version '7.1.0-rc01' apply false + id 'com.android.library' version '7.1.0-rc01' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false } task clean(type: Delete) { delete rootProject.buildDir delete project.buildDir -} \ No newline at end of file +}