diff --git a/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java b/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java index 96772378..5403be3f 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java +++ b/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java @@ -32,7 +32,7 @@ public class CsvHelper { csvProcessor.writeAll(writer, measurements, true); } - static private String[] getOldStyleHeaders(String sampleLine) { + private static String[] getOldStyleHeaders(String sampleLine) { final String[] fields = sampleLine.split(",", -1); // Return an array with header fields so that all the headers that actually are 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 4d351f57..c4602b6d 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 @@ -135,6 +135,24 @@ public class DataEntryActivity extends Activity { updateOnView(); } + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + + for (MeasurementView measurement : dataEntryMeasurements) { + measurement.restoreState(savedInstanceState); + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + for (MeasurementView measurement : dataEntryMeasurements) { + measurement.saveState(outState); + } + } + private void updateOnView() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 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 3fec7da4..4ea56bcb 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 @@ -88,7 +88,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private Calendar calYears; private Calendar calLastSelected; - private List scaleMeasurementList; + private static String CAL_YEARS_KEY = "calYears"; + private static String CAL_LAST_SELECTED_KEY = "calLastSelected"; + private List pointIndexScaleMeasurementList; public GraphFragment() { @@ -101,10 +103,16 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { { openScale = OpenScale.getInstance(getContext()); - scaleMeasurementList = openScale.getScaleMeasurementList(); - if (!scaleMeasurementList.isEmpty()) { - calYears.setTime(scaleMeasurementList.get(0).getDateTime()); - calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); + if (savedInstanceState == null) { + List scaleMeasurementList = openScale.getScaleMeasurementList(); + if (!scaleMeasurementList.isEmpty()) { + calYears.setTime(scaleMeasurementList.get(0).getDateTime()); + calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); + } + } + else { + calYears.setTimeInMillis(savedInstanceState.getLong(CAL_YEARS_KEY)); + calLastSelected.setTimeInMillis(savedInstanceState.getLong(CAL_LAST_SELECTED_KEY)); } graphView = inflater.inflate(R.layout.fragment_graph, container, false); @@ -179,6 +187,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { public void onClick(View view) { calYears.roll(Calendar.YEAR, false); txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); + + List scaleMeasurementList = + OpenScale.getInstance(getContext()).getScaleDataOfYear(calYears.get(Calendar.YEAR)); + if (!scaleMeasurementList.isEmpty()) { + calLastSelected.setTime(scaleMeasurementList.get(0).getDateTime()); + } updateOnView(null); } }); @@ -188,6 +202,12 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { public void onClick(View view) { calYears.roll(Calendar.YEAR, true); txtYear.setText(Integer.toString(calYears.get(Calendar.YEAR))); + + List scaleMeasurementList = + OpenScale.getInstance(getContext()).getScaleDataOfYear(calYears.get(Calendar.YEAR)); + if (!scaleMeasurementList.isEmpty()) { + calLastSelected.setTime(scaleMeasurementList.get(scaleMeasurementList.size() - 1).getDateTime()); + } updateOnView(null); } }); @@ -197,6 +217,14 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { return graphView; } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putLong(CAL_YEARS_KEY, calYears.getTimeInMillis()); + outState.putLong(CAL_LAST_SELECTED_KEY, calLastSelected.getTimeInMillis()); + } + @Override public void updateOnView(List scaleMeasurementList) { @@ -226,7 +254,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { return false; } - private void generateLineData(int field) + private void generateLineData(int field, List scaleMeasurementList) { SimpleDateFormat day_date = new SimpleDateFormat("D", Locale.getDefault()); @@ -493,7 +521,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { int firstYear = selectedYear; int lastYear = selectedYear; - scaleMeasurementList = openScale.getScaleMeasurementList(); + List scaleMeasurementList = openScale.getScaleMeasurementList(); if (!scaleMeasurementList.isEmpty()) { Calendar cal = Calendar.getInstance(); @@ -522,7 +550,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { generateColumnData(); scaleMeasurementList = openScale.getScaleDataOfMonth(selectedYear, calLastSelected.get(Calendar.MONTH)); - generateLineData(Calendar.DAY_OF_MONTH); + generateLineData(Calendar.DAY_OF_MONTH, scaleMeasurementList); // show only yearly diagram and hide monthly diagram } else { chartTop.setVisibility(View.GONE); @@ -530,7 +558,7 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { scaleMeasurementList = openScale.getScaleDataOfYear(selectedYear); - generateLineData(Calendar.DAY_OF_YEAR); + generateLineData(Calendar.DAY_OF_YEAR, scaleMeasurementList); } } @@ -543,8 +571,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { calLastSelected = cal; - scaleMeasurementList = openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH)); - generateLineData(Calendar.DAY_OF_MONTH); + List scaleMeasurementList = + openScale.getScaleDataOfMonth(calYears.get(Calendar.YEAR), calLastSelected.get(Calendar.MONTH)); + generateLineData(Calendar.DAY_OF_MONTH, scaleMeasurementList); } @Override 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 d022678f..60c618b2 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 @@ -82,6 +82,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private ArrayList measurementsList; private int selectedSubpageNr; + private static String SELECTED_SUBPAGE_NR_KEY = "selectedSubpageNr"; public TableFragment() { @@ -120,13 +121,24 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); + if (savedInstanceState == null) { + selectedSubpageNr = 0; + } + else { + selectedSubpageNr = savedInstanceState.getInt(SELECTED_SUBPAGE_NR_KEY); + } + OpenScale.getInstance(getContext()).registerFragment(this); - selectedSubpageNr = 0; - return tableView; } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(SELECTED_SUBPAGE_NR_KEY, selectedSubpageNr); + } + @Override public void updateOnView(List scaleMeasurementList) { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java index c08e8ecc..57db1226 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java @@ -17,6 +17,7 @@ package com.health.openscale.gui.views; import android.content.Context; import android.content.SharedPreferences; +import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.text.InputType; import android.widget.EditText; @@ -26,6 +27,7 @@ import com.health.openscale.core.datatypes.ScaleMeasurement; public class CommentMeasurementView extends MeasurementView { private String comment; + private static String COMMENT_KEY = "comment"; public CommentMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_comment), ContextCompat.getDrawable(context, R.drawable.ic_comment)); @@ -48,6 +50,16 @@ public class CommentMeasurementView extends MeasurementView { measurement.setComment(comment); } + @Override + public void restoreState(Bundle state) { + setValue(state.getString(COMMENT_KEY), true); + } + + @Override + public void saveState(Bundle state) { + state.putString(COMMENT_KEY, comment); + } + @Override public void updatePreferences(SharedPreferences preferences) { // Empty diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java index a17e7c83..311153b8 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java @@ -19,6 +19,7 @@ import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.Context; import android.content.SharedPreferences; +import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.widget.DatePicker; import android.widget.EditText; @@ -33,6 +34,7 @@ import java.util.Date; public class DateMeasurementView extends MeasurementView { private static DateFormat dateFormat = DateFormat.getDateInstance(); private Date date; + private static String DATE_KEY = "date"; public DateMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_date), ContextCompat.getDrawable(context, R.drawable.ic_lastmonth)); @@ -64,6 +66,16 @@ public class DateMeasurementView extends MeasurementView { measurement.setDateTime(target.getTime()); } + @Override + public void restoreState(Bundle state) { + setValue(new Date(state.getLong(DATE_KEY)), true); + } + + @Override + public void saveState(Bundle state) { + state.putLong(DATE_KEY, date.getTime()); + } + @Override public void updatePreferences(SharedPreferences preferences) { // Empty diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java index 09b96205..48e87930 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/FloatMeasurementView.java @@ -19,6 +19,7 @@ package com.health.openscale.gui.views; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.SpannableStringBuilder; @@ -228,6 +229,16 @@ public abstract class FloatMeasurementView extends MeasurementView { } } + @Override + public void restoreState(Bundle state) { + setValue(state.getFloat(nameText), previousValue, true); + } + + @Override + public void saveState(Bundle state) { + state.putFloat(nameText, value); + } + @Override public String getValueAsString() { if (useAutoValue()) { 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 08839d3d..296e445e 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 @@ -21,6 +21,7 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.util.TypedValue; import android.view.Gravity; @@ -151,6 +152,9 @@ public abstract class MeasurementView extends TableLayout { public abstract void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement); public abstract void saveTo(ScaleMeasurement measurement); + public abstract void restoreState(Bundle state); + public abstract void saveState(Bundle state); + public abstract void updatePreferences(SharedPreferences preferences); public abstract String getValueAsString(); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java index 7a3fa3ba..44cd1763 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java @@ -19,6 +19,7 @@ import android.app.AlertDialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.SharedPreferences; +import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.widget.EditText; import android.widget.TimePicker; @@ -33,6 +34,7 @@ import java.util.Date; public class TimeMeasurementView extends MeasurementView { private DateFormat timeFormat; private Date time; + private static String TIME_KEY = "time"; public TimeMeasurementView(Context context) { super(context, context.getResources().getString(R.string.label_time), ContextCompat.getDrawable(context, R.drawable.ic_daysleft)); @@ -67,6 +69,16 @@ public class TimeMeasurementView extends MeasurementView { measurement.setDateTime(target.getTime()); } + @Override + public void restoreState(Bundle state) { + setValue(new Date(state.getLong(TIME_KEY)), true); + } + + @Override + public void saveState(Bundle state) { + state.putLong(TIME_KEY, time.getTime()); + } + @Override public void updatePreferences(SharedPreferences preferences) { // Empty