diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java index 57b36677..e8c32e93 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/GraphFragment.java @@ -192,6 +192,17 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { prefs.edit().putBoolean("showMonth", true).commit(); } + generateGraphs(); + return true; + case R.id.enableWeek: + if (item.isChecked()) { + item.setChecked(false); + prefs.edit().putBoolean("showWeek", false).commit(); + } else { + item.setChecked(true); + prefs.edit().putBoolean("showWeek", true).commit(); + } + generateGraphs(); return true; default: @@ -206,6 +217,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { MenuItem enableMonth = popup.getMenu().findItem(R.id.enableMonth); enableMonth.setChecked(prefs.getBoolean("showMonth", true)); + MenuItem enableWeek = popup.getMenu().findItem(R.id.enableWeek); + enableWeek.setChecked(prefs.getBoolean("showWeek", false)); + openScale.registerFragment(this); return graphView; @@ -258,7 +272,19 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { */ private boolean addPointValue(Stack pointValues, float value_x, float value_y) { if (prefs.getBoolean("averageData", true) && !pointValues.isEmpty() && pointValues.peek().getX() == value_x) { - pointValues.push(new PointValue(value_x, (pointValues.pop().getY() + value_y) / 2.0f)); + PointValue prevValue = pointValues.pop(); + PointValue newValue = new PointValue(value_x, (prevValue.getY() + value_y) / 2.0f); + + if (prevValue.getLabelAsChars() != null) { + int avgCount = Character.getNumericValue(prevValue.getLabelAsChars()[prevValue.getLabelAsChars().length-3]) * 10 + + Character.getNumericValue(prevValue.getLabelAsChars()[prevValue.getLabelAsChars().length-2]) + 1; + + newValue.setLabel(String.format("Ø %.2f (%02d)", newValue.getY(), avgCount)); + } else { + newValue.setLabel(String.format("Ø %.2f (%02d)", newValue.getY(), 2)); + } + + pointValues.push(newValue); } else { if (value_y != 0.0f) { // don't show zero values pointValues.add(new PointValue(value_x, value_y)); @@ -275,6 +301,11 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { if (field == Calendar.DAY_OF_MONTH) { day_date = new SimpleDateFormat("dd", Locale.getDefault()); + + if (prefs.getBoolean("showWeek", false)) { + field = Calendar.WEEK_OF_MONTH; + day_date = new SimpleDateFormat("W", Locale.getDefault()); + } } else if (field == Calendar.DAY_OF_YEAR) { day_date = new SimpleDateFormat("D", Locale.getDefault()); @@ -282,6 +313,11 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { field = Calendar.MONTH; day_date = new SimpleDateFormat("MMM", Locale.getDefault()); } + + if (prefs.getBoolean("showWeek", false)) { + field = Calendar.WEEK_OF_YEAR; + day_date = new SimpleDateFormat("w", Locale.getDefault()); + } } Calendar calDays = (Calendar)calLastSelected.clone(); diff --git a/android_app/app/src/main/res/menu/graph_menu.xml b/android_app/app/src/main/res/menu/graph_menu.xml index 66c2c659..79812261 100644 --- a/android_app/app/src/main/res/menu/graph_menu.xml +++ b/android_app/app/src/main/res/menu/graph_menu.xml @@ -6,4 +6,8 @@ android:id="@+id/enableMonth" android:title="@string/label_month_view" android:checkable="true"/> + diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 34f44fef..5ba19ab9 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -217,6 +217,7 @@ Save Month view + Week view Permission not granted openScale requires permission to access the coarse location to search for Bluetooth devices