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 aaa6dc88..b1311652 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 @@ -149,7 +149,7 @@ public class OpenScale { } public void addScaleData(int user_id, String date_time, float weight, float fat, - float water, float muscle, String comment) { + float water, float muscle, float waist, float hip, String comment) { ScaleData scaleData = new ScaleData(); try { @@ -159,6 +159,8 @@ public class OpenScale { scaleData.fat = fat; scaleData.water = water; scaleData.muscle = muscle; + scaleData.waist = waist; + scaleData.hip = hip; scaleData.comment = comment; } catch (ParseException e) { Log.e("OpenScale", "Can't parse date time string while adding to the database"); @@ -169,7 +171,7 @@ public class OpenScale { updateScaleData(); } - public void updateScaleData(long id, String date_time, float weight, float fat, float water, float muscle, String comment) { + public void updateScaleData(long id, String date_time, float weight, float fat, float water, float muscle, float waist, float hip, String comment) { ScaleData scaleData = new ScaleData(); try { @@ -178,6 +180,8 @@ public class OpenScale { scaleData.fat = fat; scaleData.water = water; scaleData.muscle = muscle; + scaleData.waist = waist; + scaleData.hip = hip; scaleData.comment = comment; } catch (ParseException e) { Log.e("OpenScale", "Can't parse date time string while adding to the database"); @@ -216,7 +220,9 @@ public class OpenScale { newScaleData.fat = Float.parseFloat(csvField[2]); newScaleData.water = Float.parseFloat(csvField[3]); newScaleData.muscle = Float.parseFloat(csvField[4]); - newScaleData.comment = csvField[5]; + newScaleData.waist = Float.parseFloat(csvField[5]); + newScaleData.hip = Float.parseFloat(csvField[6]); + newScaleData.comment = csvField[7]; newScaleData.user_id = getSelectedScaleUser().id; @@ -249,6 +255,8 @@ public class OpenScale { csvWriter.append(Float.toString(scaleData.fat) + ","); csvWriter.append(Float.toString(scaleData.water) + ","); csvWriter.append(Float.toString(scaleData.muscle) + ","); + csvWriter.append(Float.toString(scaleData.waist) + ","); + csvWriter.append(Float.toString(scaleData.hip) + ","); if (!scaleData.comment.isEmpty()) { csvWriter.append(scaleData.comment); } diff --git a/android_app/app/src/main/java/com/health/openscale/core/ScaleData.java b/android_app/app/src/main/java/com/health/openscale/core/ScaleData.java index 3fe95da6..086f9e68 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/ScaleData.java +++ b/android_app/app/src/main/java/com/health/openscale/core/ScaleData.java @@ -26,6 +26,8 @@ public class ScaleData { public float fat; public float water; public float muscle; + public float waist; + public float hip; public String comment; public ScaleData() @@ -36,13 +38,15 @@ public class ScaleData { weight = -1.0f; fat = -1.0f; water = -1.0f; - muscle = 1.0f; + muscle = -1.0f; + waist = -1.0f; + hip = -1.0f; comment = new String(); } @Override public String toString() { - return "ID : " + id + " USER_ID: " + user_id + " DATE_TIME: " + date_time.toString() + " WEIGHT: " + weight + " FAT: " + fat + " WATER: " + water + " MUSCLE: " + muscle + " COMMENT: " + comment; + return "ID : " + id + " USER_ID: " + user_id + " DATE_TIME: " + date_time.toString() + " WEIGHT: " + weight + " FAT: " + fat + " WATER: " + water + " MUSCLE: " + muscle + " WAIST: " + waist + " HIP: " + hip + " COMMENT: " + comment; } } 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 1ce2e924..c02ba89e 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 @@ -31,7 +31,7 @@ import java.util.Calendar; import java.util.Locale; public class ScaleDatabase extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 2; + private static final int DATABASE_VERSION = 3; private static final String DATABASE_NAME = "openScaleDatabase.db"; private static final String TABLE_NAME = "scaledata"; @@ -42,6 +42,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { private static final String COLUMN_NAME_FAT = "fat"; private static final String COLUMN_NAME_WATER = "water"; private static final String COLUMN_NAME_MUSCLE = "muscle"; + private static final String COLUMN_NAME_WAIST = "waist"; + private static final String COLUMN_NAME_HIP = "hip"; private static final String COLUMN_NAME_COMMENT = "comment"; private static final String SQL_CREATE_ENTRIES = @@ -53,6 +55,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { COLUMN_NAME_FAT + " REAL," + COLUMN_NAME_WATER + " REAL," + COLUMN_NAME_MUSCLE + " REAL," + + COLUMN_NAME_WAIST + " REAL," + + COLUMN_NAME_HIP + " REAL," + COLUMN_NAME_COMMENT + " TEXT" + ")"; @@ -68,6 +72,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { COLUMN_NAME_FAT, COLUMN_NAME_WATER, COLUMN_NAME_MUSCLE, + COLUMN_NAME_WAIST, + COLUMN_NAME_HIP, COLUMN_NAME_COMMENT }; @@ -87,6 +93,11 @@ public class ScaleDatabase extends SQLiteOpenHelper { if (oldVersion == 1 && newVersion == 2) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_COMMENT + " TEXT DEFAULT ''"); } + + if (oldVersion == 2 && newVersion == 3) { + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_WAIST + " REAL DEFAULT 0"); + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_HIP + " REAL DEFAULT 0"); + } } public void clearScaleData(int userId) { @@ -112,6 +123,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_FAT, scaleData.fat); values.put(COLUMN_NAME_WATER, scaleData.water); values.put(COLUMN_NAME_MUSCLE, scaleData.muscle); + values.put(COLUMN_NAME_WAIST, scaleData.waist); + values.put(COLUMN_NAME_HIP, scaleData.hip); values.put(COLUMN_NAME_COMMENT, scaleData.comment); try @@ -137,6 +150,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_FAT, scaleData.fat); values.put(COLUMN_NAME_WATER, scaleData.water); values.put(COLUMN_NAME_MUSCLE, scaleData.muscle); + values.put(COLUMN_NAME_WAIST, scaleData.waist); + values.put(COLUMN_NAME_HIP, scaleData.hip); values.put(COLUMN_NAME_COMMENT, scaleData.comment); db.update(TABLE_NAME, values, COLUMN_NAME_ID + "=" + id, null); @@ -271,6 +286,8 @@ public class ScaleDatabase extends SQLiteOpenHelper { scaleData.fat = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_FAT)); scaleData.water = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_WATER)); scaleData.muscle = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_MUSCLE)); + scaleData.waist = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_WAIST)); + scaleData.hip = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_HIP)); scaleData.comment = cur.getString(cur.getColumnIndexOrThrow(COLUMN_NAME_COMMENT)); scaleData.date_time = formatDateTime.parse(date_time); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java index b2581fb9..ba7683d1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java @@ -54,6 +54,8 @@ public class DataEntryActivity extends Activity { private EditText txtFat; private EditText txtWater; private EditText txtMuscle; + private EditText txtWaist; + private EditText txtHip; private EditText txtDate; private EditText txtTime; private EditText txtComment; @@ -88,7 +90,9 @@ public class DataEntryActivity extends Activity { txtFat = (EditText) findViewById(R.id.txtFat); txtWater = (EditText) findViewById(R.id.txtWater); txtMuscle = (EditText) findViewById(R.id.txtMuscle); - txtDate = (EditText) findViewById(R.id.txtDate); + txtWaist = (EditText) findViewById(R.id.txtWaist); + txtHip = (EditText) findViewById(R.id.txtHip); + txtDate = (EditText) findViewById(R.id.txtDate); txtTime = (EditText) findViewById(R.id.txtTime); txtComment = (EditText) findViewById(R.id.txtComment); @@ -131,6 +135,16 @@ public class DataEntryActivity extends Activity { row.setVisibility(View.GONE); } + if(!prefs.getBoolean("waistEnable", true)) { + TableRow row = (TableRow)findViewById(R.id.tableRowWaist); + row.setVisibility(View.GONE); + } + + if(!prefs.getBoolean("hipEnable", true)) { + TableRow row = (TableRow)findViewById(R.id.tableRowHip); + row.setVisibility(View.GONE); + } + if (getIntent().getExtras().getInt("mode") == EDIT_DATA_REQUEST) { editMode(); } @@ -160,6 +174,8 @@ public class DataEntryActivity extends Activity { txtFat.setText(editScaleData.fat+""); txtWater.setText(editScaleData.water+""); txtMuscle.setText(editScaleData.muscle+""); + txtWaist.setText(editScaleData.waist+""); + txtHip.setText(editScaleData.hip+""); txtComment.setText(editScaleData.comment); txtDate.setText(dateFormat.format(editScaleData.date_time)); @@ -182,10 +198,14 @@ public class DataEntryActivity extends Activity { txtFat.setText(Float.toString(lastScaleData.fat)); txtWater.setText(Float.toString(lastScaleData.water)); txtMuscle.setText(Float.toString(lastScaleData.muscle)); + txtWaist.setText(Float.toString(lastScaleData.waist)); + txtHip.setText(Float.toString(lastScaleData.hip)); } else { txtFat.setText(Float.toString(0.0f)); txtWater.setText(Float.toString(0.0f)); txtMuscle.setText(Float.toString(0.0f)); + txtWaist.setText(Float.toString(0.0f)); + txtHip.setText(Float.toString(0.0f)); } txtDate.setText(dateFormat.format(new Date())); @@ -200,7 +220,7 @@ public class DataEntryActivity extends Activity { { txtWeight.setError(getResources().getString(R.string.error_weight_value_required)); validate = false; - } else if( !(Float.valueOf(txtWeight.getText().toString()) >= 0 && Float.valueOf(txtWeight.getText().toString()) <= 300) ) + } else if(!isInRange(txtWeight.getText().toString(), 300)) { txtWeight.setError(getResources().getString(R.string.error_value_range_0_300)); validate = false; @@ -210,7 +230,7 @@ public class DataEntryActivity extends Activity { { txtFat.setError(getResources().getString(R.string.error_fat_value_required)); validate = false; - } else if(!isInRange(txtFat.getText().toString())) + } else if(!isInRange(txtFat.getText().toString(), 100)) { txtFat.setError(getResources().getString(R.string.error_value_range_0_100)); validate = false; @@ -221,7 +241,7 @@ public class DataEntryActivity extends Activity { { txtWater.setError(getResources().getString(R.string.error_water_value_required)); validate = false; - } else if(!isInRange(txtWater.getText().toString())) + } else if(!isInRange(txtWater.getText().toString(), 100)) { txtWater.setError(getResources().getString(R.string.error_value_range_0_100)); validate = false; @@ -231,23 +251,43 @@ public class DataEntryActivity extends Activity { { txtMuscle.setError(getResources().getString(R.string.error_muscle_value_required)); validate = false; - } else if(!isInRange(txtMuscle.getText().toString())) + } else if(!isInRange(txtMuscle.getText().toString(), 100)) { txtMuscle.setError(getResources().getString(R.string.error_value_range_0_100)); validate = false; } - + + if( txtWaist.getText().toString().length() == 0 ) + { + txtWaist.setError(getResources().getString(R.string.error_waist_value_required)); + validate = false; + } else if(!isInRange(txtWaist.getText().toString(), 300)) + { + txtWaist.setError(getResources().getString(R.string.error_value_range_0_300)); + validate = false; + } + + if( txtHip.getText().toString().length() == 0 ) + { + txtHip.setError(getResources().getString(R.string.error_hip_value_required)); + validate = false; + } else if(!isInRange(txtHip.getText().toString(), 300)) + { + txtHip.setError(getResources().getString(R.string.error_value_range_0_300)); + validate = false; + } + return validate; } - private boolean isInRange(String value) + private boolean isInRange(String value, int maxValue) { if (value.length() == 0) return false; float val = Float.valueOf(value); - if (val >= 0 && val <= 100) + if (val >= 0 && val <= maxValue) return true; return false; @@ -259,6 +299,9 @@ public class DataEntryActivity extends Activity { float fat = Float.valueOf(txtFat.getText().toString()); float water = Float.valueOf(txtWater.getText().toString()); float muscle = Float.valueOf(txtMuscle.getText().toString()); + float waist = Float.valueOf(txtWaist.getText().toString()); + float hip = Float.valueOf(txtHip.getText().toString()); + String comment = txtComment.getText().toString(); String date = txtDate.getText().toString(); @@ -266,7 +309,7 @@ public class DataEntryActivity extends Activity { OpenScale openScale = OpenScale.getInstance(context); - openScale.updateScaleData(id, date + " " + time, weight, fat, water, muscle, comment); + openScale.updateScaleData(id, date + " " + time, weight, fat, water, muscle, waist, hip, comment); } } @@ -360,12 +403,14 @@ public class DataEntryActivity extends Activity { float fat = Float.valueOf(txtFat.getText().toString()); float water = Float.valueOf(txtWater.getText().toString()); float muscle = Float.valueOf(txtMuscle.getText().toString()); + float waist = Float.valueOf(txtWaist.getText().toString()); + float hip = Float.valueOf(txtHip.getText().toString()); String comment = txtComment.getText().toString(); String date = txtDate.getText().toString(); String time = txtTime.getText().toString(); - openScale.addScaleData(selectedUserId, date + " " + time, weight, fat, water, muscle, comment); + openScale.addScaleData(selectedUserId, date + " " + time, weight, fat, water, muscle, waist, hip, comment); finish(); } @@ -376,8 +421,10 @@ public class DataEntryActivity extends Activity { private class onClickListenerOk implements View.OnClickListener { @Override public void onClick(View v) { - saveScaleData(); - finish(); + if (validateInput()) { + saveScaleData(); + finish(); + } } } 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 6f75ab5c..b4fb94b8 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 @@ -142,6 +142,8 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { List valuesFat = new ArrayList(); List valuesWater = new ArrayList(); List valuesMuscle = new ArrayList(); + List valuesWaist = new ArrayList(); + List valuesHip = new ArrayList(); List lines = new ArrayList(); Calendar calDB = Calendar.getInstance(); @@ -154,6 +156,9 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { valuesFat.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.fat)); valuesWater.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.water)); valuesMuscle.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.muscle)); + valuesWaist.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.waist)); + valuesHip.add(new PointValue(calDB.get(Calendar.DAY_OF_MONTH)-1, scaleEntry.hip)); + } @@ -173,6 +178,14 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { setColor(ChartUtils.COLOR_GREEN). setHasLabels(prefs.getBoolean("labelsEnable", true)). setFormatter(new SimpleLineChartValueFormatter(1)); + Line lineWaist = new Line(valuesWaist). + setColor(Color.MAGENTA). + setHasLabels(prefs.getBoolean("labelsEnable", true)). + setFormatter(new SimpleLineChartValueFormatter(1)); + Line lineHip = new Line(valuesHip). + setColor(Color.YELLOW). + setHasLabels(prefs.getBoolean("labelsEnable", true)). + setFormatter(new SimpleLineChartValueFormatter(1)); if(prefs.getBoolean("weightEnable", true)) { @@ -191,6 +204,14 @@ public class GraphFragment extends Fragment implements FragmentUpdateListener { lines.add(lineMuscle); } + if(prefs.getBoolean("waistEnable", true)) { + lines.add(lineWaist); + } + + if(prefs.getBoolean("hipEnable", true)) { + lines.add(lineHip); + } + LineChartData lineData = new LineChartData(lines); lineData.setAxisXBottom(new Axis(axisValues). setHasLines(true). diff --git a/android_app/app/src/main/java/com/health/openscale/gui/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/OverviewFragment.java index 0c6e3c08..272ddced 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/OverviewFragment.java @@ -74,6 +74,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener private TextView txtWaterLast; private TextView txtMuscleLast; private TextView txtFatLast; + private TextView txtWaistLast; + private TextView txtHipLast; private TextView txtGoalWeight; private TextView txtGoalDiff; @@ -87,6 +89,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener private TextView txtLabelFat; private TextView txtLabelMuscle; private TextView txtLabelWater; + private TextView txtLabelWaist; + private TextView txtLabelHip; private TextView txtLabelGoalWeight; private TextView txtLabelGoalDiff; @@ -129,6 +133,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener txtWaterLast = (TextView) overviewView.findViewById(R.id.txtWaterLast); txtMuscleLast = (TextView) overviewView.findViewById(R.id.txtMuscleLast); txtFatLast = (TextView) overviewView.findViewById(R.id.txtFatLast); + txtWaistLast = (TextView) overviewView.findViewById(R.id.txtWaistLast); + txtHipLast = (TextView) overviewView.findViewById(R.id.txtHipLast); txtGoalWeight = (TextView) overviewView.findViewById(R.id.txtGoalWeight); txtGoalDiff = (TextView) overviewView.findViewById(R.id.txtGoalDiff); @@ -142,6 +148,9 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener txtLabelFat = (TextView) overviewView.findViewById(R.id.txtLabelFat); txtLabelMuscle = (TextView) overviewView.findViewById(R.id.txtLabelMuscle); txtLabelWater = (TextView) overviewView.findViewById(R.id.txtLabelWater); + txtLabelWaist = (TextView) overviewView.findViewById(R.id.txtLabelWaist); + txtLabelHip = (TextView) overviewView.findViewById(R.id.txtLabelHip); + txtLabelGoalWeight = (TextView) overviewView.findViewById(R.id.txtLabelGoalWeight); txtLabelGoalDiff = (TextView) overviewView.findViewById(R.id.txtLabelGoalDiff); @@ -186,6 +195,16 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener row.setVisibility(View.GONE); } + if(!prefs.getBoolean("waistEnable", true)) { + TableRow row = (TableRow)overviewView.findViewById(R.id.tableRowWaist); + row.setVisibility(View.GONE); + } + + if(!prefs.getBoolean("hipEnable", true)) { + TableRow row = (TableRow)overviewView.findViewById(R.id.tableRowHip); + row.setVisibility(View.GONE); + } + spinUser.setOnItemSelectedListener(new spinUserSelectionListener()); ArrayList userItems = new ArrayList<>(); @@ -241,6 +260,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener txtFatLast.setText(lastScaleData.fat + " %"); txtWaterLast.setText(lastScaleData.water + " %"); txtMuscleLast.setText(lastScaleData.muscle + " %"); + txtWaistLast.setText(lastScaleData.waist + " cm"); + txtHipLast.setText(lastScaleData.hip + " cm"); } private void updateGoal(ArrayList scaleDataList) { @@ -268,6 +289,9 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener double diffFat = lastScaleData.fat - diffScaleData.fat; double diffMuscle = lastScaleData.muscle - diffScaleData.muscle; double diffWater = lastScaleData.water - diffScaleData.water; + double diffWaist = lastScaleData.waist - diffScaleData.waist; + double diffHip = lastScaleData.hip - diffScaleData.hip; + if (diffWeight > 0.0) txtLabelWeight.setText(Html.fromHtml(getResources().getString(R.string.label_weight) + "
" + String.format("%.1f ", diffWeight) + ScaleUser.UNIT_STRING[currentScaleUser.scale_unit] + "")); @@ -294,6 +318,16 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener txtLabelWater.setText(Html.fromHtml(getResources().getString(R.string.label_water) + "
" + String.format("%.1f", diffWater) + "%")); else txtLabelWater.setText(Html.fromHtml(getResources().getString(R.string.label_water) + "
" + String.format("%.1f", diffWater) + "%")); + + if (diffWaist > 0.0) + txtLabelWaist.setText(Html.fromHtml(getResources().getString(R.string.label_waist) + "
" + String.format("%.1f", diffWaist) + "%")); + else + txtLabelWaist.setText(Html.fromHtml(getResources().getString(R.string.label_waist) + "
" + String.format("%.1f", diffWaist) + "%")); + + if (diffHip > 0.0) + txtLabelHip.setText(Html.fromHtml(getResources().getString(R.string.label_hip) + "
" + String.format("%.1f", diffHip) + "%")); + else + txtLabelHip.setText(Html.fromHtml(getResources().getString(R.string.label_hip) + "
" + String.format("%.1f", diffHip) + "%")); } } @@ -314,6 +348,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener float weekAvgFat = 0; float weekAvgWater = 0; float weekAvgMuscle = 0; + float weekAvgWaist = 0; + float weekAvgHip = 0; int monthSize = 0; float monthAvgWeight = 0; @@ -321,6 +357,9 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener float monthAvgFat = 0; float monthAvgWater = 0; float monthAvgMuscle = 0; + float monthAvgWaist = 0; + float monthAvgHip = 0; + for (ScaleData scaleData : scaleDataList) { @@ -334,6 +373,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener weekAvgFat += scaleData.fat; weekAvgWater += scaleData.water; weekAvgMuscle += scaleData.muscle; + weekAvgWaist += scaleData.waist; + weekAvgHip += scaleData.hip; } if (monthPastDate.before(histDate)) { @@ -344,6 +385,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener monthAvgFat += scaleData.fat; monthAvgWater += scaleData.water; monthAvgMuscle += scaleData.muscle; + monthAvgWaist += scaleData.waist; + monthAvgHip += scaleData.hip; } else { break; } @@ -354,15 +397,65 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener weekAvgFat /= weekSize; weekAvgWater /= weekSize; weekAvgMuscle /= weekSize; + weekAvgWaist /= weekSize; + weekAvgHip /= weekSize; monthAvgWeight /= monthSize; monthAvgBMI /= monthSize; monthAvgFat /= monthSize; monthAvgWater /= monthSize; monthAvgMuscle /= monthSize; + monthAvgWaist /= monthSize; + monthAvgHip /= monthSize; - txtLabelAvgWeek.setText(Html.fromHtml(getResources().getString(R.string.label_last_week) + "
" + String.format("[Ø-"+getResources().getString(R.string.label_weight)+": %.1f" + ScaleUser.UNIT_STRING[currentScaleUser.scale_unit] + "] [Ø-"+getResources().getString(R.string.label_bmi)+": %.1f] [Ø-"+getResources().getString(R.string.label_fat)+": %.1f%%] [Ø-"+getResources().getString(R.string.label_muscle)+": %.1f%%] [Ø-"+getResources().getString(R.string.label_water)+": %.1f%%]", weekAvgWeight, weekAvgBMI, weekAvgFat, weekAvgMuscle, weekAvgWater) + "")); - txtLabelAvgMonth.setText(Html.fromHtml(getResources().getString(R.string.label_last_month) + "
" + String.format("[Ø-"+getResources().getString(R.string.label_weight)+": %.1f" + ScaleUser.UNIT_STRING[currentScaleUser.scale_unit] + "] [Ø-"+getResources().getString(R.string.label_bmi)+": %.1f] [Ø-"+getResources().getString(R.string.label_fat)+": %.1f%%] [Ø-"+getResources().getString(R.string.label_muscle)+": %.1f%%] [Ø-"+getResources().getString(R.string.label_water)+": %.1f%%]", monthAvgWeight, monthAvgBMI, monthAvgFat, monthAvgMuscle, monthAvgWater) + "")); + String info_week = new String(); + String info_month = new String(); + + int lines = 1; + + info_week += String.format("Ø-"+getResources().getString(R.string.label_weight)+": %.1f" + ScaleUser.UNIT_STRING[currentScaleUser.scale_unit] + "
", weekAvgWeight); + info_month += String.format("Ø-"+getResources().getString(R.string.label_weight)+": %.1f" + ScaleUser.UNIT_STRING[currentScaleUser.scale_unit] + "
", monthAvgWeight); + lines++; + + info_week += String.format("Ø-"+getResources().getString(R.string.label_bmi)+": %.1f
", weekAvgBMI); + info_month += String.format("Ø-"+getResources().getString(R.string.label_bmi)+": %.1f
", monthAvgBMI); + lines++; + + if(prefs.getBoolean("fatEnable", true)) { + info_week += String.format("Ø-"+getResources().getString(R.string.label_fat)+": %.1f%%
", weekAvgFat); + info_month += String.format("Ø-"+getResources().getString(R.string.label_fat)+": %.1f%%
", monthAvgFat); + lines++; + } + + if(prefs.getBoolean("muscleEnable", true)) { + info_week += String.format("Ø-"+getResources().getString(R.string.label_muscle)+": %.1f%%
", weekAvgWater); + info_month += String.format("Ø-"+getResources().getString(R.string.label_muscle)+": %.1f%%
", monthAvgWater); + lines++; + } + + if(prefs.getBoolean("waterEnable", true)) { + info_week += String.format("Ø-"+getResources().getString(R.string.label_water)+": %.1f%%
", weekAvgMuscle); + info_month += String.format("Ø-"+getResources().getString(R.string.label_water)+": %.1f%%
", monthAvgMuscle); + lines++; + } + + if(prefs.getBoolean("waistEnable", true)) { + info_week += String.format("Ø-"+getResources().getString(R.string.label_waist)+": %.1f%%
", weekAvgWaist); + info_month += String.format("Ø-"+getResources().getString(R.string.label_waist)+": %.1f%%
", monthAvgWaist); + lines++; + } + + if(prefs.getBoolean("hipEnable", true)) { + info_week += String.format("Ø-"+getResources().getString(R.string.label_hip)+": %.1f%%
", weekAvgHip); + info_month += String.format("Ø-"+getResources().getString(R.string.label_hip)+": %.1f%%
",monthAvgHip); + lines++; + } + + txtLabelAvgWeek.setLines(lines); + txtLabelAvgMonth.setLines(lines); + + txtLabelAvgWeek.setText(Html.fromHtml(getResources().getString(R.string.label_last_week) + "
" + info_week + "")); + txtLabelAvgMonth.setText(Html.fromHtml(getResources().getString(R.string.label_last_month) + "
" + info_month + "")); txtAvgWeek.setText(weekSize + " " + getResources().getString(R.string.label_measures)); txtAvgMonth.setText(monthSize + " " + getResources().getString(R.string.label_measures)); @@ -375,6 +468,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener List valuesFat = new ArrayList(); List valuesWater = new ArrayList(); List valuesMuscle = new ArrayList(); + List valuesWaist = new ArrayList(); + List valuesHip = new ArrayList(); List lines = new ArrayList(); int max_i = 7; @@ -399,6 +494,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener valuesFat.add(new PointValue(i, histData.fat)); valuesWater.add(new PointValue(i, histData.water)); valuesMuscle.add(new PointValue(i, histData.muscle)); + valuesWaist.add(new PointValue(i, histData.waist)); + valuesHip.add(new PointValue(i, histData.hip)); histDate.setTime(histData.date_time); @@ -427,6 +524,14 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener setColor(ChartUtils.COLOR_GREEN). setHasLabels(prefs.getBoolean("labelsEnable", true)). setFormatter(new SimpleLineChartValueFormatter(1)); + Line lineWaist = new Line(valuesWaist). + setColor(Color.MAGENTA). + setHasLabels(prefs.getBoolean("labelsEnable", true)). + setFormatter(new SimpleLineChartValueFormatter(1)); + Line lineHip = new Line(valuesHip). + setColor(Color.YELLOW). + setHasLabels(prefs.getBoolean("labelsEnable", true)). + setFormatter(new SimpleLineChartValueFormatter(1)); activeLines = new ArrayList(); @@ -450,6 +555,14 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener activeLines.add(OverviewFragment.lines.MUSCLE); } + if(prefs.getBoolean("waistEnable", true)) { + lines.add(lineWaist); + } + + if(prefs.getBoolean("hipEnable", true)) { + lines.add(lineHip); + } + LineChartData lineData = new LineChartData(lines); lineData.setAxisXBottom(new Axis(axisValues). setHasLines(true). @@ -462,8 +575,6 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener setTextColor(Color.BLACK) ); - - lineChartLast.setLineChartData(lineData); lineChartLast.setViewportCalculationEnabled(true); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/TableFragment.java index 1426e537..01a99122 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/TableFragment.java @@ -86,6 +86,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { txtWaterTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); TextView txtMuscleTableHeader = (TextView)tableView.findViewById(R.id.txtMuscleTableHeader); txtMuscleTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); + TextView txtWaistTableHeader = (TextView)tableView.findViewById(R.id.txtWaistTableHeader); + txtWaistTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); + TextView txtHipTableHeader = (TextView)tableView.findViewById(R.id.txtHipTableHeader); + txtHipTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); TextView txtCommentTableHeader = (TextView)tableView.findViewById(R.id.txtCommentTableHeader); txtCommentTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); Button btnDeleteAll = (Button)tableView.findViewById(R.id.btnDeleteAll); @@ -109,6 +113,16 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { txtWaterTableHeader.setVisibility(View.GONE); } + if(!prefs.getBoolean("waistEnable", true)) { + TextView txtWaistTableHeader = (TextView)tableView.findViewById(R.id.txtWaistTableHeader); + txtWaistTableHeader.setVisibility(View.GONE); + } + + if(!prefs.getBoolean("hipEnable", true)) { + TextView txtHipTableHeader = (TextView)tableView.findViewById(R.id.txtHipTableHeader); + txtHipTableHeader.setVisibility(View.GONE); + } + return tableView; } @@ -127,7 +141,13 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { if(prefs.getBoolean("muscleEnable", true)) { tableDataView.setColumnStretchable(6, true); } - tableDataView.setColumnStretchable(7, true); + if(prefs.getBoolean("waistEnable", true)) { + tableDataView.setColumnStretchable(7, true); + } + if(prefs.getBoolean("hipEnable", true)) { + tableDataView.setColumnStretchable(8, true); + } + tableDataView.setColumnStretchable(9, true); TableRow headerRow = (TableRow) tableView.findViewById(R.id.tableHeader); tableDataView.removeAllViews(); @@ -187,6 +207,21 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } dataRow.addView(muscleView); + TextView waistView = new TextView(tableView.getContext()); + waistView.setText(Float.toString(scaleData.waist)); + waistView.setPadding(0, 5, 5, 5); + if(!prefs.getBoolean("waistEnable", true)) { + waistView.setVisibility(View.GONE); + } + dataRow.addView(waistView); + + TextView hipView = new TextView(tableView.getContext()); + hipView.setText(Float.toString(scaleData.hip)); + hipView.setPadding(0, 5, 5, 5); + if(!prefs.getBoolean("hipEnable", true)) { + hipView.setVisibility(View.GONE); + } + dataRow.addView(hipView); TextView commentView = new TextView(tableView.getContext()); commentView.setText(scaleData.comment); @@ -216,6 +251,8 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { fatView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); waterView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); muscleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); + waistView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); + hipView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); commentView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); } diff --git a/android_app/app/src/main/res/drawable/bmi.png b/android_app/app/src/main/res/drawable/bmi.png index 484ab7c3..eab7c023 100644 Binary files a/android_app/app/src/main/res/drawable/bmi.png and b/android_app/app/src/main/res/drawable/bmi.png differ diff --git a/android_app/app/src/main/res/drawable/hip.png b/android_app/app/src/main/res/drawable/hip.png new file mode 100644 index 00000000..08bec0af Binary files /dev/null and b/android_app/app/src/main/res/drawable/hip.png differ diff --git a/android_app/app/src/main/res/drawable/waist.png b/android_app/app/src/main/res/drawable/waist.png new file mode 100644 index 00000000..a5b6a05a Binary files /dev/null and b/android_app/app/src/main/res/drawable/waist.png differ diff --git a/android_app/app/src/main/res/layout/activity_dataentry.xml b/android_app/app/src/main/res/layout/activity_dataentry.xml index 560144bc..ffb36a67 100644 --- a/android_app/app/src/main/res/layout/activity_dataentry.xml +++ b/android_app/app/src/main/res/layout/activity_dataentry.xml @@ -193,7 +193,69 @@ - + + + + + + + + + + + + + + + + + + diff --git a/android_app/app/src/main/res/layout/fragment_overview.xml b/android_app/app/src/main/res/layout/fragment_overview.xml index ba024d14..1ec1cb90 100644 --- a/android_app/app/src/main/res/layout/fragment_overview.xml +++ b/android_app/app/src/main/res/layout/fragment_overview.xml @@ -290,6 +290,86 @@ android:layout_marginRight="20dp" /> + + + + + + + + + + + + + + + + + + + + + + Der Wert muss zwischen 0 und 300 liegen
Wassergehalt ist erforderlich Gewicht ist erforderlich + Bauchumfang ist erforderlich + Hüftumfang ist erforderlich Bluetooth Verbindung konnte nicht hergestellt werden Alle Datenbank Einträge wurden gelöscht Datenbank Eintrag wurde gelöscht @@ -22,7 +24,7 @@ Gebe ein optionalen Kommentar ein Gebe dein Gewicht in deiner Einheit an Gebe dein Namen ein - Gebe deine Körpergröße in cm an + Gebe dein Wert in cm an Gebe dein Wert in % an Gebe dein Wert an in ist nicht sichtbar @@ -48,11 +50,7 @@ Löschen Alles löschen Gerätename - Körperfettanteil Notiz auf den Datenpunkten - Muskelanteil - Wassergehalt - Gewicht Exportieren Körperfettanteil Geschlecht @@ -91,4 +89,6 @@ Daten ist ausgeschaltet ist eingeschaltet + Bauchumfang + Hüftumfang \ No newline at end of file diff --git a/android_app/app/src/main/res/values-ja/strings.xml b/android_app/app/src/main/res/values-ja/strings.xml index 7058ac5d..bb8f87a2 100644 --- a/android_app/app/src/main/res/values-ja/strings.xml +++ b/android_app/app/src/main/res/values-ja/strings.xml @@ -41,10 +41,6 @@ 計測 最終の計測 目標期日は - 筋肉率 - 体内の水分 - 体重 - 体脂肪 全てデリート Bluetoothの体重計を探索する 過去30日 @@ -82,7 +78,7 @@ あなたの名前を入力してください あなたの体重をあなたの単位で入力してください 任意でコメントを入力してください - あなたの身長をcmで入力してください + あなたの値をcmで入力してください あなたの値を%で入力してください あなたの値を入力してください あなたは本当にすべてのレコードを削除しますか @@ -91,4 +87,8 @@ データ 無効にします 有効にします + 腰囲が必要です + 胴囲が必要です + 胴囲 + 腰囲 \ No newline at end of file diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 7297ee1d..3b88d1be 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -24,6 +24,8 @@ Body fat percentage Water percentage Muscle percentage + Waist circumference + Hip circumference Comment days @@ -67,12 +69,15 @@ Error user name is required Error body height is required Error goal weight is required + waist circumference is required + hip circumference is required Database entry deleted All database entries deleted Data exported to Data imported from Set filename to + Enter value in cm Enter value in % Enter value in Enter an optional comment @@ -84,7 +89,6 @@ Clear all Bluetooth data Bluetooth data was successful cleared Bluetooth connection not established - Enter your height in cm Enter your name No user exist! Please create a new user in the settings @@ -96,10 +100,6 @@ Device Name Label on data point - Weight - Body fat percentage - Water percentage - Muscle percentage Your weight was Your body fat was diff --git a/android_app/app/src/main/res/xml/preferences.xml b/android_app/app/src/main/res/xml/preferences.xml index ba8f3d2f..aa4189b4 100644 --- a/android_app/app/src/main/res/xml/preferences.xml +++ b/android_app/app/src/main/res/xml/preferences.xml @@ -15,10 +15,12 @@ - - - - + + + + + +