diff --git a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java index efe50920..4453573c 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java +++ b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java @@ -161,9 +161,9 @@ public class OpenScale { } - public ScaleData getScaleData(long id) + public ScaleData[] getTupleScaleData(long id) { - return scaleDB.getDataEntry(id); + return scaleDB.getTupleDataEntry(id); } public int addScaleData(ScaleData scaleData) { diff --git a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleDatabase.java b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleDatabase.java index 904a42d0..abadcb5f 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleDatabase.java +++ b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleDatabase.java @@ -172,25 +172,72 @@ public class ScaleDatabase extends SQLiteOpenHelper { dbWrite.update(TABLE_NAME, values, COLUMN_NAME_ID + "=" + id, null); } - public ScaleData getDataEntry(long id) + public ScaleData[] getTupleDataEntry(long id) { - Cursor cursorScaleDB = dbRead.query( + Cursor cursorScaleDB; + + ScaleData[] tupleScaleData = new ScaleData[3]; + + // selected scale data entry + cursorScaleDB = dbRead.query( TABLE_NAME, // The table to query projection, // The columns to return COLUMN_NAME_ID + "=?", // The columns for the WHERE clause new String[] {Long.toString(id)}, // The values for the WHERE clause null, // don't group the rows null, // don't filter by row groups - null // The sort order + null, // The sort order + "1" // Limit ); - cursorScaleDB.moveToFirst(); + if (cursorScaleDB.getCount() == 1) { + cursorScaleDB.moveToFirst(); + tupleScaleData[1] = readAtCursor(cursorScaleDB); + } else { + tupleScaleData[1] = null; + } - ScaleData scaleData = readAtCursor(cursorScaleDB); + // previous scale entry + cursorScaleDB = dbRead.query( + TABLE_NAME, // The table to query + projection, // The columns to return + COLUMN_NAME_DATE_TIME + "? AND " + COLUMN_NAME_ENABLE + "=1", // The columns for the WHERE clause + new String[] {formatDateTime.format(tupleScaleData[1].getDateTime())}, // The values for the WHERE clause + null, // don't group the rows + null, // don't filter by row groups + COLUMN_NAME_DATE_TIME, // The sort order + "1" // Limit + ); + + if (cursorScaleDB.getCount() == 1) { + cursorScaleDB.moveToFirst(); + tupleScaleData[2] = readAtCursor(cursorScaleDB); + } else { + tupleScaleData[2] = null; + } + + return tupleScaleData; } public void deleteEntry(long id) { 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 069c7681..034d6c98 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 @@ -52,7 +52,6 @@ import java.text.DateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.ListIterator; import lecho.lib.hellocharts.util.ChartUtils; @@ -184,30 +183,21 @@ public class DataEntryActivity extends Activity { OpenScale openScale = OpenScale.getInstance(context); - ScaleData selectedScaleData = openScale.getScaleData(id); + ScaleData[] tupleScaleData = openScale.getTupleScaleData(id); + ScaleData prevScaleData = tupleScaleData[0]; + ScaleData selectedScaleData = tupleScaleData[1]; + + if (prevScaleData == null) { + prevScaleData = new ScaleData(); + } txtDataNr.setText(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(selectedScaleData.getDateTime())); - ArrayList scaleDataList = OpenScale.getInstance(context).getScaleDataList(); - ListIterator scaleDataIterator = scaleDataList.listIterator(); - - ScaleData lastData = new ScaleData(); - - while(scaleDataIterator.hasNext()) { - ScaleData scaleData = scaleDataIterator.next(); - - if (scaleData.getId() == id) { - if (scaleDataIterator.hasNext()) { - lastData = scaleDataIterator.next(); - } - } - } - // show selected scale data for (MeasurementView measuremt : dataEntryMeasurements) { measuremt.setExpand(prefs.getBoolean(String.valueOf(expandButton.getId()), false)); measuremt.updateValue(selectedScaleData); - measuremt.updateDiff(selectedScaleData, lastData); + measuremt.updateDiff(selectedScaleData, prevScaleData); } return; @@ -298,26 +288,14 @@ public class DataEntryActivity extends Activity { } private boolean moveLeft() { - ArrayList scaleDataList = OpenScale.getInstance(getApplicationContext()).getScaleDataList(); + ScaleData[] tupleScaleData = OpenScale.getInstance(getApplicationContext()).getTupleScaleData(id); + ScaleData prevScaleData = tupleScaleData[0]; - ListIterator scaleDataIterator = scaleDataList.listIterator(); - - while(scaleDataIterator.hasNext()) - { - ScaleData scaleData = scaleDataIterator.next(); - - if (scaleData.getId() == id) - { - if (scaleDataIterator.hasNext()) { - saveScaleData(); - getIntent().putExtra("id",scaleDataIterator.next().getId() ); - updateOnView(); - return true; - } else { - return false; - } - - } + if (prevScaleData != null) { + saveScaleData(); + getIntent().putExtra("id", prevScaleData.getId()); + updateOnView(); + return true; } return false; @@ -325,25 +303,14 @@ public class DataEntryActivity extends Activity { private boolean moveRight() { - ArrayList scaleDataList = OpenScale.getInstance(getApplicationContext()).getScaleDataList(); + ScaleData[] tupleScaleData = OpenScale.getInstance(getApplicationContext()).getTupleScaleData(id); + ScaleData nextScaleData = tupleScaleData[2]; - ListIterator scaleDataIterator = scaleDataList.listIterator(scaleDataList.size()); - - while(scaleDataIterator.hasPrevious()) - { - ScaleData scaleData = scaleDataIterator.previous(); - - if (scaleData.getId() == id) - { - if (scaleDataIterator.hasPrevious()) { - saveScaleData(); - getIntent().putExtra("id", scaleDataIterator.previous().getId()); - updateOnView(); - return true; - } else { - return false; - } - } + if (nextScaleData != null) { + saveScaleData(); + getIntent().putExtra("id", nextScaleData.getId()); + updateOnView(); + return true; } return false;