diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index bec01283..afb8759c 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -74,6 +74,7 @@ public class DataEntryActivity extends Activity { private ScaleMeasurement scaleMeasurement; private ScaleMeasurement previousMeasurement; + private ScaleMeasurement nextMeasurement; private boolean isDirty; private Context context; @@ -149,11 +150,11 @@ public class DataEntryActivity extends Activity { if (scaleMeasurement == null || scaleMeasurement.getId() != id) { isDirty = false; + scaleMeasurement = null; + previousMeasurement = null; + nextMeasurement = null; } - scaleMeasurement = null; - previousMeasurement = null; - OpenScale openScale = OpenScale.getInstance(context); boolean doExpand = false; @@ -175,9 +176,15 @@ public class DataEntryActivity extends Activity { } // Show selected scale data - ScaleMeasurement[] tupleScaleData = openScale.getTupleScaleData(id); - previousMeasurement = tupleScaleData[0]; - scaleMeasurement = tupleScaleData[1].clone(); + if (scaleMeasurement == null) { + ScaleMeasurement[] tupleScaleData = openScale.getTupleScaleData(id); + previousMeasurement = tupleScaleData[0]; + scaleMeasurement = tupleScaleData[1].clone(); + nextMeasurement = tupleScaleData[2]; + + btnLeft.setEnabled(previousMeasurement != null); + btnRight.setEnabled(nextMeasurement != null); + } } else { setViewMode(MeasurementView.MeasurementViewMode.ADD); @@ -267,13 +274,9 @@ public class DataEntryActivity extends Activity { } private boolean moveRight() { - ScaleMeasurement[] tupleScaleData = OpenScale.getInstance(getApplicationContext()) - .getTupleScaleData(scaleMeasurement.getId()); - ScaleMeasurement nextScaleMeasurement = tupleScaleData[2]; - - if (nextScaleMeasurement != null) { + if (nextMeasurement != null) { saveScaleData(); - getIntent().putExtra("id", nextScaleMeasurement.getId()); + getIntent().putExtra("id", nextMeasurement.getId()); updateOnView(); return true; } @@ -383,11 +386,12 @@ public class DataEntryActivity extends Activity { void deleteMeasurement() { int delId = scaleMeasurement.getId(); - boolean hasNext = moveLeft(); - OpenScale.getInstance(getApplicationContext()).deleteScaleData(delId); Toast.makeText(context, getResources().getString(R.string.info_data_deleted), Toast.LENGTH_SHORT).show(); + isDirty = false; + final boolean hasNext = moveLeft() || moveRight(); + if (!hasNext) { finish(); } 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 4198cfb3..31f61217 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 @@ -30,6 +30,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; @@ -69,6 +70,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private ColumnChartView chartTop; private Viewport defaultTopViewport; private TextView txtYear; + private Button btnLeftYear; + private Button btnRightYear; private FloatingActionButton diagramWeight; private FloatingActionButton diagramFat; private FloatingActionButton diagramWater; @@ -96,6 +99,14 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + openScale = OpenScale.getInstance(getContext()); + + scaleMeasurementList = openScale.getScaleMeasurementList(); + if (!scaleMeasurementList.isEmpty()) { + calYears.setTime(scaleMeasurementList.get(0).getDateTime()); + calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); + } + graphView = inflater.inflate(R.layout.fragment_graph, container, false); chartBottom = (LineChartView) graphView.findViewById(R.id.chart_bottom); @@ -163,7 +174,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { diagramHip.setVisibility(View.GONE); } - graphView.findViewById(R.id.btnLeftYear).setOnClickListener(new View.OnClickListener() { + btnLeftYear = graphView.findViewById(R.id.btnLeftYear); + btnLeftYear.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { calYears.roll(Calendar.YEAR, false); txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); @@ -171,7 +183,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } }); - graphView.findViewById(R.id.btnRightYear).setOnClickListener(new View.OnClickListener() { + btnRightYear = graphView.findViewById(R.id.btnRightYear); + btnRightYear.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { calYears.roll(Calendar.YEAR, true); txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); @@ -179,7 +192,6 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } }); - openScale = OpenScale.getInstance(getContext()); openScale.registerFragment(this); return graphView; @@ -476,13 +488,31 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { } private void generateGraphs() { + final int selectedYear = calYears.get(Calendar.YEAR); + + int firstYear = selectedYear; + int lastYear = selectedYear; + + scaleMeasurementList = openScale.getScaleMeasurementList(); + if (!scaleMeasurementList.isEmpty()) { + Calendar cal = Calendar.getInstance(); + + cal.setTime(scaleMeasurementList.get(scaleMeasurementList.size() - 1).getDateTime()); + firstYear = cal.get(Calendar.YEAR); + + cal.setTime(scaleMeasurementList.get(0).getDateTime()); + lastYear = cal.get(Calendar.YEAR); + } + btnLeftYear.setEnabled(selectedYear > firstYear); + btnRightYear.setEnabled(selectedYear < lastYear); + // show monthly diagram if (prefs.getBoolean(String.valueOf(enableMonth.getId()), true)) { chartTop.setVisibility(View.VISIBLE); chartBottom.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.7f)); generateColumnData(); - scaleMeasurementList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH)); + scaleMeasurementList = openScale.getScaleDataOfMonth(selectedYear, calLastSelected.get(Calendar.MONTH)); generateLineData(Calendar.DAY_OF_MONTH); // show only yearly diagram and hide monthly diagram @@ -490,7 +520,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { chartTop.setVisibility(View.GONE); chartBottom.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); - scaleMeasurementList = openScale.getScaleDataOfYear(calYears.get(Calendar.YEAR)); + scaleMeasurementList = openScale.getScaleDataOfYear(selectedYear); generateLineData(Calendar.DAY_OF_YEAR); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java index 54800798..81b8509d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java @@ -104,6 +104,8 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen viewMeasurementsListWeek.add(new WaistMeasurementView(statisticsView.getContext())); viewMeasurementsListWeek.add(new HipMeasurementView(statisticsView.getContext())); + final int paddingBottom = 10; + int i=0; for (MeasurementView measurement : viewMeasurementsListWeek) { @@ -111,6 +113,7 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen measurement.updatePreferences(prefs); if (measurement.isVisible()) { + measurement.setPadding(-1, -1, -1, paddingBottom); if ((i % 2) == 0) { tableWeekAveragesLayoutColumnA.addView(measurement); } else { @@ -138,6 +141,7 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen measurement.updatePreferences(prefs); if (measurement.isVisible()) { + measurement.setPadding(-1, -1, -1, paddingBottom); if ((i % 2) == 0) { tableMonthAveragesLayoutColumnA.addView(measurement); } else { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 090a1513..0d702312 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -151,6 +151,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { moveSubpageLeft.getLayoutParams().height = pxImageDp(20); moveSubpageLeft.getLayoutParams().width = pxImageDp(50); moveSubpageLeft.setOnClickListener(new onClickListenerMoveSubpageLeft()); + moveSubpageLeft.setEnabled(selectedSubpageNr > 0); subpageView.addView(moveSubpageLeft); for (int i=0; i 0) { - drawCenteredText(canvas, Float.toString(firstLimit), firstPos, textY, textPaint); + drawCenteredText(canvas, toText(firstLimit), firstPos, textY, textPaint); } - drawCenteredText(canvas, Float.toString(secondLimit), secondPos, textY, textPaint); - drawCenteredText(canvas, Float.toString(maxValue), getWidth(), textY, textPaint); + drawCenteredText(canvas, toText(secondLimit), secondPos, textY, textPaint); + drawCenteredText(canvas, toText(maxValue), getWidth(), textY, textPaint); // Indicator final float indicatorBottom = limitRect.bottom + 10.0f; @@ -201,10 +200,10 @@ public class LinearGaugeView extends View { canvas.drawPath(path, indicatorPaint); // Value text - String valueStr = String.format("%.2f", value); + final String valueStr = String.format(Locale.getDefault(), "%.2f", value); indicatorPaint.getTextBounds(valueStr, 0, valueStr.length(), bounds); drawCenteredText(canvas, valueStr, valuePos, - indicatorBottom + bounds.height() + textOffset, indicatorPaint, bounds); + indicatorBottom + bounds.height() + textOffset, indicatorPaint); } @Override diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index 479b38a0..08839d3d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -111,7 +111,7 @@ public abstract class MeasurementView extends TableLayout { valueView.setTextColor(Color.BLACK); valueView.setGravity(Gravity.RIGHT | Gravity.CENTER); valueView.setPadding(0,0,20,0); - valueView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.29f)); + valueView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.29f)); incDecLayout.setOrientation(VERTICAL); incDecLayout.setVisibility(View.GONE); diff --git a/android_app/app/src/main/res/drawable/flat_selector.xml b/android_app/app/src/main/res/drawable/flat_selector.xml index 6e9fe6c4..224c8210 100644 --- a/android_app/app/src/main/res/drawable/flat_selector.xml +++ b/android_app/app/src/main/res/drawable/flat_selector.xml @@ -1,5 +1,6 @@ + diff --git a/android_app/app/src/main/res/drawable/rect_disabled.xml b/android_app/app/src/main/res/drawable/rect_disabled.xml new file mode 100644 index 00000000..61026260 --- /dev/null +++ b/android_app/app/src/main/res/drawable/rect_disabled.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/android_app/app/src/main/res/drawable/rect_normal.xml b/android_app/app/src/main/res/drawable/rect_normal.xml index c5c3b997..ef63741a 100644 --- a/android_app/app/src/main/res/drawable/rect_normal.xml +++ b/android_app/app/src/main/res/drawable/rect_normal.xml @@ -1,11 +1,10 @@ - + - - - - - + + + + - + diff --git a/android_app/app/src/main/res/drawable/rect_pressed.xml b/android_app/app/src/main/res/drawable/rect_pressed.xml index 2cc15774..9fe914a3 100644 --- a/android_app/app/src/main/res/drawable/rect_pressed.xml +++ b/android_app/app/src/main/res/drawable/rect_pressed.xml @@ -1,6 +1,6 @@ - - + diff --git a/android_app/app/src/main/res/layout/fragment_statistics.xml b/android_app/app/src/main/res/layout/fragment_statistics.xml index 4c584960..ad81db77 100644 --- a/android_app/app/src/main/res/layout/fragment_statistics.xml +++ b/android_app/app/src/main/res/layout/fragment_statistics.xml @@ -178,29 +178,28 @@ + - + android:stretchColumns="1" /> - + android:stretchColumns="1" /> @@ -213,22 +212,22 @@ + - + android:stretchColumns="1" /> - + android:stretchColumns="1" /> diff --git a/android_app/app/src/main/res/values/colors.xml b/android_app/app/src/main/res/values/colors.xml index 243b10a2..98c6296e 100644 --- a/android_app/app/src/main/res/values/colors.xml +++ b/android_app/app/src/main/res/values/colors.xml @@ -1,5 +1,6 @@ - + @android:color/holo_blue_dark @android:color/holo_blue_light - + #ccc +