From a6c85d754838e04440f9990e32749c3527020d02 Mon Sep 17 00:00:00 2001 From: oliexdev Date: Sun, 20 Sep 2020 16:44:50 +0200 Subject: [PATCH] show goal and difference weight on overview fragment --- .../gui/overview/OverviewFragment.java | 79 +++++++++++++++++++ .../src/main/res/layout/fragment_overview.xml | 45 +++++++++-- 2 files changed, 119 insertions(+), 5 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java index 62bc745d..b099eca3 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java @@ -21,6 +21,10 @@ import android.content.SharedPreferences; import android.graphics.Color; import android.os.Bundle; import android.preference.PreferenceManager; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.style.RelativeSizeSpan; +import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -47,13 +51,17 @@ import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.DateTimeHelpers; import com.health.openscale.gui.measurement.ChartActionBarView; import com.health.openscale.gui.measurement.ChartMeasurementView; import com.health.openscale.gui.measurement.MeasurementEntryFragment; import com.health.openscale.gui.measurement.MeasurementView; +import com.health.openscale.gui.measurement.WeightMeasurementView; import com.health.openscale.gui.utils.ColorUtil; +import java.text.DateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; public class OverviewFragment extends Fragment { @@ -76,6 +84,10 @@ public class OverviewFragment extends Fragment { private ImageView editEntry; private ImageView deleteEntry; + private TextView differenceWeightView; + private TextView initialWeightView; + private TextView goalWeightView; + private ScaleUser currentScaleUser; private ArrayAdapter spinUserAdapter; @@ -92,6 +104,10 @@ public class OverviewFragment extends Fragment { txtTitleUser = overviewView.findViewById(R.id.txtTitleUser); + differenceWeightView = overviewView.findViewById(R.id.differenceWeightView); + initialWeightView = overviewView.findViewById(R.id.initialWeightView); + goalWeightView = overviewView.findViewById(R.id.goalWeightView); + chartView = overviewView.findViewById(R.id.chartView); chartView.setOnChartValueSelectedListener(new onChartSelectedListener()); chartView.setProgressBar(overviewView.findViewById(R.id.progressBar)); @@ -315,6 +331,69 @@ public class OverviewFragment extends Fragment { int visibility = spinUserAdapter.getCount() < 2 ? View.GONE : View.VISIBLE; txtTitleUser.setVisibility(visibility); spinUser.setVisibility(visibility); + + + WeightMeasurementView weightMeasurementView = new WeightMeasurementView(getContext()); + ScaleMeasurement initialWeightMeasurement = OpenScale.getInstance().getLastScaleMeasurement(); + initialWeightMeasurement.setWeight(initialWeightMeasurement.getWeight()); + weightMeasurementView.loadFrom(initialWeightMeasurement, null); + + SpannableStringBuilder initialWeightValue = new SpannableStringBuilder(); + initialWeightValue.append(getResources().getString(R.string.label_weight)); + initialWeightValue.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, initialWeightValue.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + initialWeightValue.append("\n"); + initialWeightValue.append(weightMeasurementView.getValueAsString(true)); + initialWeightValue.append(("\n")); + int start = initialWeightValue.length(); + initialWeightValue.append(DateFormat.getDateInstance(DateFormat.MEDIUM).format(initialWeightMeasurement.getDateTime())); + initialWeightValue.setSpan(new RelativeSizeSpan(0.8f), start, initialWeightValue.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + initialWeightView.setText(initialWeightValue); + + ScaleMeasurement goalWeightMeasurement = new ScaleMeasurement(); + goalWeightMeasurement.setWeight(currentScaleUser.getGoalWeight()); + weightMeasurementView.loadFrom(goalWeightMeasurement, null); + + SpannableStringBuilder goalWeightValue = new SpannableStringBuilder(); + goalWeightValue.append(getResources().getString(R.string.label_goal_weight)); + goalWeightValue.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, goalWeightValue.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + goalWeightValue.append("\n"); + goalWeightValue.append(weightMeasurementView.getValueAsString(true)); + goalWeightValue.append(("\n")); + start = goalWeightValue.length(); + goalWeightValue.append(DateFormat.getDateInstance(DateFormat.MEDIUM).format(currentScaleUser.getGoalDate())); + goalWeightValue.setSpan(new RelativeSizeSpan(0.8f), start, goalWeightValue.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + goalWeightView.setText(goalWeightValue); + + ScaleMeasurement differenceWeightMeasurement = new ScaleMeasurement(); + if (initialWeightMeasurement.getWeight() > goalWeightMeasurement.getWeight()) { + differenceWeightMeasurement.setWeight(initialWeightMeasurement.getWeight() -goalWeightMeasurement.getWeight()); + } else { + differenceWeightMeasurement.setWeight(goalWeightMeasurement.getWeight() - initialWeightMeasurement.getWeight()); + } + weightMeasurementView.loadFrom(differenceWeightMeasurement, null); + + Calendar initialCalendar = Calendar.getInstance(); + initialCalendar.setTime(initialWeightMeasurement.getDateTime()); + Calendar goalCalendar = Calendar.getInstance(); + goalCalendar.setTime(currentScaleUser.getGoalDate()); + int daysBetween = Math.max(0, DateTimeHelpers.daysBetween(initialCalendar, goalCalendar)); + + SpannableStringBuilder differenceWeightValue = new SpannableStringBuilder(); + differenceWeightValue.append(getResources().getString(R.string.label_weight_difference)); + differenceWeightValue.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, differenceWeightValue.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + differenceWeightValue.append("\n"); + differenceWeightValue.append(weightMeasurementView.getValueAsString(true)); + differenceWeightValue.append(("\n")); + start = differenceWeightValue.length(); + differenceWeightValue.append(daysBetween + " " + getString(R.string.label_days_left)); + differenceWeightValue.setSpan(new RelativeSizeSpan(0.8f), start, differenceWeightValue.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + differenceWeightView.setText(differenceWeightValue); } private class onChartSelectedListener implements OnChartValueSelectedListener { diff --git a/android_app/app/src/main/res/layout/fragment_overview.xml b/android_app/app/src/main/res/layout/fragment_overview.xml index 98bcc9c0..c6890c62 100644 --- a/android_app/app/src/main/res/layout/fragment_overview.xml +++ b/android_app/app/src/main/res/layout/fragment_overview.xml @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:layout_marginRight="10dp" android:scaleType="centerInside" - android:tint="#d3d3d3" + app:tint="#d3d3d3" app:srcCompat="@drawable/ic_show" /> @@ -87,7 +87,42 @@ android:id="@+id/chartView" android:layout_width="match_parent" android:layout_height="200dp" - android:layout_gravity="center" /> + android:layout_gravity="center" > + + + + + + + + + + +