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 e3b3032a..aef27819 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 @@ -159,6 +159,10 @@ public class OpenScale { return scaleDB.getAllDBEntriesOfMonth(year, month); } + public float getMaxValueOfDBEntries(int year, int month) { + return scaleDB.getMaxValueOfDBEntries(year, month); + } + public void startBluetoothServer(String deviceName) { Log.d("OpenScale", "Bluetooth Server started! I am searching for device ..."); diff --git a/android_app/app/src/main/java/com/health/openscale/core/ScaleDatabase.java b/android_app/app/src/main/java/com/health/openscale/core/ScaleDatabase.java index 53ae5052..6904104f 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/ScaleDatabase.java +++ b/android_app/app/src/main/java/com/health/openscale/core/ScaleDatabase.java @@ -146,6 +146,48 @@ public class ScaleDatabase extends SQLiteOpenHelper { return numOfMonth; } + public float getMaxValueOfDBEntries(int year, int month) { + SQLiteDatabase db = getReadableDatabase(); + + Calendar start_cal = Calendar.getInstance(); + Calendar end_cal = Calendar.getInstance(); + + start_cal.set(year, month, 1, 0, 0, 0); + end_cal.set(year, month, 1, 0, 0, 0); + end_cal.add(Calendar.MONTH, 1); + + String[] projection = { + "MAX(" + COLUMN_NAME_WEIGHT + ")", + "MAX(" + COLUMN_NAME_FAT + ")", + "MAX(" + COLUMN_NAME_WATER + ")", + "MAX(" + COLUMN_NAME_MUSCLE + ")" + }; + + Cursor cursorScaleDB = db.query( + TABLE_NAME, // The table to query + projection, // The columns to return + COLUMN_NAME_DATE_TIME + " >= ? AND " + COLUMN_NAME_DATE_TIME + " < ? ", // The columns for the WHERE clause + new String[]{formatDateTime.format(start_cal.getTime()), formatDateTime.format(end_cal.getTime())}, // The values for the WHERE clause + null, // don't group the rows + null, // don't filter by row groups + null // The sort order + ); + + cursorScaleDB.moveToFirst(); + + float maxValue = -1; + + for (int i=0; i<4; i++) + { + if (maxValue < cursorScaleDB.getFloat(i)) + { + maxValue = cursorScaleDB.getFloat(i); + } + } + + return maxValue; + } + public ArrayList getAllDBEntriesOfMonth(int year, int month) { SQLiteDatabase db = getReadableDatabase(); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/GraphFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/GraphFragment.java index bc22f154..fcef9292 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/GraphFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/GraphFragment.java @@ -117,15 +117,16 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { private void generateLineData(Calendar cal) { scaleDBEntries = openScale.getAllDataOfMonth(yearCal.get(Calendar.YEAR), cal.get(Calendar.MONTH)); + float maxValue = openScale.getMaxValueOfDBEntries(yearCal.get(Calendar.YEAR), cal.get(Calendar.MONTH)); SimpleDateFormat day_date = new SimpleDateFormat("dd", Locale.getDefault()); cal.set(Calendar.DAY_OF_MONTH, 1); - int max_days = cal.getActualMaximum(Calendar.DAY_OF_MONTH); + int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); List axisValues = new ArrayList(); - for (int i=0; i