diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml
index d053ba54..c63c7166 100644
--- a/android_app/app/src/main/AndroidManifest.xml
+++ b/android_app/app/src/main/AndroidManifest.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntry.java b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntry.java
index 7656936f..ad613648 100644
--- a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntry.java
+++ b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntry.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.core.alarm;
import android.support.annotation.NonNull;
diff --git a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntryReader.java b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntryReader.java
index 8a0197c7..68ffaff5 100644
--- a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntryReader.java
+++ b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmEntryReader.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.core.alarm;
import android.content.Context;
diff --git a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmHandler.java b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmHandler.java
index 94c78f30..53d61b87 100644
--- a/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmHandler.java
+++ b/android_app/app/src/main/java/com/health/openscale/core/alarm/AlarmHandler.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.core.alarm;
import android.app.AlarmManager;
diff --git a/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationResult.java b/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationResult.java
index 1c85a020..17c93082 100644
--- a/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationResult.java
+++ b/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationResult.java
@@ -24,6 +24,13 @@ public class EvaluationResult {
public float highLimit;
public EVAL_STATE eval_state;
+ public EvaluationResult() {
+ this.value = -1.0f;
+ this.lowLimit = -1.0f;
+ this.highLimit = -1.0f;
+ this.eval_state = EVAL_STATE.UNDEFINED;
+ }
+
public EvaluationResult(float value, float lowLimit, float highLimit, EVAL_STATE eval_state)
{
this.value = value;
diff --git a/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationSheet.java b/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationSheet.java
index 1f66ff1c..e452a88f 100644
--- a/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationSheet.java
+++ b/android_app/app/src/main/java/com/health/openscale/core/evaluation/EvaluationSheet.java
@@ -269,10 +269,6 @@ public class EvaluationSheet {
return evaluateSheet(whr, bodyEvaluateSheet);
}
- public EvaluationResult evaluateHip(float hip) {
- return evaluateSheet(hip, new ArrayList());
- }
-
private EvaluationResult evaluateSheet(float value, List sheet) {
for (int i=0; i < sheet.size(); i++) {
sheetEntry curEntry = sheet.get(i);
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 f5781315..9ebbc7e9 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
@@ -17,8 +17,6 @@ package com.health.openscale.gui.activities;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.DatePickerDialog;
-import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
@@ -27,28 +25,29 @@ import android.preference.PreferenceManager;
import android.view.View;
import android.view.Window;
import android.widget.Button;
-import android.widget.DatePicker;
-import android.widget.EditText;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.Switch;
import android.widget.TableLayout;
import android.widget.TextView;
-import android.widget.TimePicker;
import android.widget.Toast;
import com.health.openscale.R;
import com.health.openscale.core.OpenScale;
import com.health.openscale.core.datatypes.ScaleData;
+import com.health.openscale.gui.views.CommentMeasurementView;
+import com.health.openscale.gui.views.DateMeasurementView;
import com.health.openscale.gui.views.FatMeasurementView;
import com.health.openscale.gui.views.HipMeasurementView;
import com.health.openscale.gui.views.MeasurementView;
import com.health.openscale.gui.views.MuscleMeasurementView;
+import com.health.openscale.gui.views.TimeMeasurementView;
import com.health.openscale.gui.views.WaistMeasurementView;
import com.health.openscale.gui.views.WaterMeasurementView;
import com.health.openscale.gui.views.WeightMeasurementView;
import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.ListIterator;
@@ -66,21 +65,18 @@ public class DataEntryActivity extends Activity {
private FatMeasurementView fatMeasurement;
private WaistMeasurementView waistMeasurement;
private HipMeasurementView hipMeasurement;
-
- private EditText txtDate;
- private EditText txtTime;
- private EditText txtComment;
+ private CommentMeasurementView commentMeasurement;
+ private DateMeasurementView dateMeasurement;
+ private TimeMeasurementView timeMeasurement;
private TextView txtDataNr;
private Button btnAdd;
private Button btnOk;
private Button btnCancel;
- private Button btnDelete;
private Button btnLeft;
private Button btnRight;
-
- private SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
- private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
+ private ImageView imageViewDelete;
+ private Switch switchEditMode;
private long id;
@@ -104,6 +100,9 @@ public class DataEntryActivity extends Activity {
fatMeasurement = new FatMeasurementView(context);
waistMeasurement = new WaistMeasurementView(context);
hipMeasurement = new HipMeasurementView(context);
+ commentMeasurement = new CommentMeasurementView(context);
+ dateMeasurement = new DateMeasurementView(context);
+ timeMeasurement = new TimeMeasurementView(context);
dataEntryMeasurements = new ArrayList<>();
dataEntryMeasurements.add(weightMeasurement);
@@ -112,35 +111,33 @@ public class DataEntryActivity extends Activity {
dataEntryMeasurements.add(fatMeasurement);
dataEntryMeasurements.add(waistMeasurement);
dataEntryMeasurements.add(hipMeasurement);
+ dataEntryMeasurements.add(commentMeasurement);
+ dataEntryMeasurements.add(dateMeasurement);
+ dataEntryMeasurements.add(timeMeasurement);
Collections.reverse(dataEntryMeasurements);
for (MeasurementView measuremt : dataEntryMeasurements) {
tableLayoutDataEntry.addView(measuremt, 0);
- measuremt.setEditMode(true);
}
txtDataNr = (TextView) findViewById(R.id.txtDataNr);
- txtDate = (EditText) findViewById(R.id.txtDate);
- txtTime = (EditText) findViewById(R.id.txtTime);
- txtComment = (EditText) findViewById(R.id.txtComment);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);
- btnDelete = (Button) findViewById(R.id.btnDelete);
btnLeft = (Button) findViewById(R.id.btnLeft);
btnRight = (Button) findViewById(R.id.btnRight);
+ imageViewDelete = (ImageView) findViewById(R.id.imgViewDelete);
+ switchEditMode = (Switch) findViewById(R.id.switchEditMode);
btnAdd.setOnClickListener(new onClickListenerAdd());
btnOk.setOnClickListener(new onClickListenerOk());
btnCancel.setOnClickListener(new onClickListenerCancel());
- btnDelete.setOnClickListener(new onClickListenerDelete());
+ imageViewDelete.setOnClickListener(new onClickListenerDelete());
btnLeft.setOnClickListener(new onClickListenerLeft());
btnRight.setOnClickListener(new onClickListenerRight());
-
- txtDate.setOnFocusChangeListener(new onFocusChangeDate());
- txtTime.setOnFocusChangeListener(new onFocusChangeTime());
+ switchEditMode.setOnCheckedChangeListener(new onCheckedChangeEditMode());
updateOnView();
}
@@ -154,100 +151,110 @@ public class DataEntryActivity extends Activity {
measuremt.updatePreferences(prefs);
}
- if (getIntent().getExtras().getInt("mode") == EDIT_DATA_REQUEST) {
- editMode();
- }
- else
- {
- addMode();
- }
- }
-
- private void editMode()
- {
- btnOk.setVisibility(View.VISIBLE);
- btnAdd.setVisibility(View.GONE);
- btnDelete.setVisibility(View.VISIBLE);
- btnLeft.setVisibility(View.VISIBLE);
- btnRight.setVisibility(View.VISIBLE);
- txtDataNr.setVisibility(View.VISIBLE);
-
id = getIntent().getExtras().getLong("id");
- OpenScale openScale = OpenScale.getInstance(context);
+ if (id > 0) {
+ if (switchEditMode.isChecked()) {
+ setViewMode(MeasurementView.MeasurementViewMode.EDIT);
+ } else {
+ setViewMode(MeasurementView.MeasurementViewMode.VIEW);
+ }
+ OpenScale openScale = OpenScale.getInstance(context);
- ScaleData editScaleData = openScale.getScaleData(id);
+ ScaleData selectedScaleData = openScale.getScaleData(id);
- txtDataNr.setText(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(editScaleData.date_time));
+ txtDataNr.setText(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(selectedScaleData.date_time));
- for (MeasurementView measuremt : dataEntryMeasurements) {
- measuremt.updateValue(editScaleData);
+ ArrayList scaleDataList = OpenScale.getInstance(context).getScaleDataList();
+ ListIterator scaleDataIterator = scaleDataList.listIterator();
+
+ ScaleData lastData = new ScaleData();
+
+ while(scaleDataIterator.hasNext()) {
+ ScaleData scaleData = scaleDataIterator.next();
+
+ if (scaleData.id == id) {
+ if (scaleDataIterator.hasNext()) {
+ lastData = scaleDataIterator.next();
+ }
+ }
+ }
+
+ // show selected scale data
+ for (MeasurementView measuremt : dataEntryMeasurements) {
+ measuremt.updateValue(selectedScaleData);
+ measuremt.updateDiff(selectedScaleData, lastData);
+ }
+
+ return;
}
- txtDate.setText(dateFormat.format(editScaleData.date_time));
- txtTime.setText(timeFormat.format(editScaleData.date_time));
- }
-
- private void addMode()
- {
- btnOk.setVisibility(View.GONE);
- btnAdd.setVisibility(View.VISIBLE);
- btnDelete.setVisibility(View.GONE);
- btnLeft.setVisibility(View.GONE);
- btnRight.setVisibility(View.GONE);
- txtDataNr.setVisibility(View.GONE);
if (!OpenScale.getInstance(this).getScaleDataList().isEmpty())
{
+ setViewMode(MeasurementView.MeasurementViewMode.ADD);
ScaleData lastScaleData = OpenScale.getInstance(this).getScaleDataList().get(0);
// show as default last scale data
for (MeasurementView measuremt : dataEntryMeasurements) {
+ lastScaleData.date_time = new Date();
+ lastScaleData.comment = "";
measuremt.updateValue(lastScaleData);
}
} else {
+ setViewMode(MeasurementView.MeasurementViewMode.ADD);
// show default values
for (MeasurementView measuremt : dataEntryMeasurements) {
measuremt.updateValue(new ScaleData());
}
}
-
- txtDate.setText(dateFormat.format(new Date()));
- txtTime.setText(timeFormat.format(new Date()));
}
- private boolean validateAllInput()
- {
- boolean isValidate = true;
+ private void setViewMode(MeasurementView.MeasurementViewMode viewMode)
+ {
+ switch (viewMode) {
+ case VIEW:
+ case EDIT:
+ btnOk.setVisibility(View.VISIBLE);
+ btnAdd.setVisibility(View.GONE);
+ imageViewDelete.setVisibility(View.VISIBLE);
+ btnLeft.setVisibility(View.VISIBLE);
+ btnRight.setVisibility(View.VISIBLE);
+ txtDataNr.setVisibility(View.VISIBLE);
+ switchEditMode.setVisibility(View.VISIBLE);
+ dateMeasurement.setVisibility(View.VISIBLE);
+ timeMeasurement.setVisibility(View.VISIBLE);
+ break;
+ case ADD:
+ btnOk.setVisibility(View.GONE);
+ btnAdd.setVisibility(View.VISIBLE);
+ imageViewDelete.setVisibility(View.GONE);
+ btnLeft.setVisibility(View.GONE);
+ btnRight.setVisibility(View.GONE);
+ txtDataNr.setVisibility(View.GONE);
+ switchEditMode.setVisibility(View.GONE);
+ dateMeasurement.setVisibility(View.GONE);
+ timeMeasurement.setVisibility(View.GONE);
+ break;
+ }
for (MeasurementView measuremt : dataEntryMeasurements) {
- if (!measuremt.validateInput()) {
- isValidate = false;
- }
+ measuremt.setEditMode(viewMode);
}
-
- return isValidate;
- }
+ }
private void saveScaleData() {
- if (validateAllInput()) {
- String comment = txtComment.getText().toString();
+ OpenScale openScale = OpenScale.getInstance(context);
- String date = txtDate.getText().toString();
- String time = txtTime.getText().toString();
-
- OpenScale openScale = OpenScale.getInstance(context);
-
- openScale.updateScaleData(id,
- date + " " + time,
- weightMeasurement.getValue(),
- fatMeasurement.getValue(),
- waterMeasurement.getValue(),
- muscleMeasurement.getValue(),
- waistMeasurement.getValue(),
- hipMeasurement.getValue(),
- comment);
- }
+ openScale.updateScaleData(id,
+ dateMeasurement.getValueAsString() + " " + timeMeasurement.getValueAsString(),
+ weightMeasurement.getValue(),
+ fatMeasurement.getValue(),
+ waterMeasurement.getValue(),
+ muscleMeasurement.getValue(),
+ waistMeasurement.getValue(),
+ hipMeasurement.getValue(),
+ commentMeasurement.getValueAsString());
}
private boolean moveLeft() {
@@ -302,57 +309,35 @@ public class DataEntryActivity extends Activity {
return false;
}
- private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
- @Override
- public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
- // txtDate.setText(String.format("%02d.%02d.%04d", selectedDay, selectedMonth+1, selectedYear));
- }
- };
-
- private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {
- @Override
- public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
- // txtTime.setText(String.format("%02d:%02d", hourOfDay, minute));
- }
- };
-
private class onClickListenerAdd implements View.OnClickListener {
@Override
public void onClick(View v) {
- if (validateAllInput())
- {
- OpenScale openScale = OpenScale.getInstance(context);
+ OpenScale openScale = OpenScale.getInstance(context);
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- int selectedUserId = prefs.getInt("selectedUserId", -1);
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ int selectedUserId = prefs.getInt("selectedUserId", -1);
- if (selectedUserId == -1) {
- AlertDialog.Builder infoDialog = new AlertDialog.Builder(context);
+ if (selectedUserId == -1) {
+ AlertDialog.Builder infoDialog = new AlertDialog.Builder(context);
- infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user));
+ infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user));
- infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null);
+ infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null);
- infoDialog.show();
- } else {
- String comment = txtComment.getText().toString();
+ infoDialog.show();
+ } else {
+ openScale.addScaleData(selectedUserId,
+ dateMeasurement.getValueAsString() + " " + timeMeasurement.getValueAsString(),
+ weightMeasurement.getValue(),
+ fatMeasurement.getValue(),
+ waterMeasurement.getValue(),
+ muscleMeasurement.getValue(),
+ waistMeasurement.getValue(),
+ hipMeasurement.getValue(),
+ commentMeasurement.getValueAsString());
- String date = txtDate.getText().toString();
- String time = txtTime.getText().toString();
-
- openScale.addScaleData(selectedUserId,
- date + " " + time,
- weightMeasurement.getValue(),
- fatMeasurement.getValue(),
- waterMeasurement.getValue(),
- muscleMeasurement.getValue(),
- waistMeasurement.getValue(),
- hipMeasurement.getValue(),
- comment);
-
- finish();
- }
+ finish();
}
}
}
@@ -360,10 +345,8 @@ public class DataEntryActivity extends Activity {
private class onClickListenerOk implements View.OnClickListener {
@Override
public void onClick(View v) {
- if (validateAllInput()) {
- saveScaleData();
- finish();
- }
+ saveScaleData();
+ finish();
}
}
@@ -431,38 +414,13 @@ public class DataEntryActivity extends Activity {
}
}
- private class onFocusChangeDate implements View.OnFocusChangeListener {
+ private class onCheckedChangeEditMode implements CompoundButton.OnCheckedChangeListener {
@Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (hasFocus) {
- Calendar cal = Calendar.getInstance();
-
- if (getIntent().getExtras().getInt("mode") == EDIT_DATA_REQUEST) {
- OpenScale openScale = OpenScale.getInstance(context);
- ScaleData editScaleData = openScale.getScaleData(id);
- cal.setTime(editScaleData.date_time);
- }
-
- DatePickerDialog datePicker = new DatePickerDialog(context, datePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
- datePicker.show();
- }
- }
- }
-
- private class onFocusChangeTime implements View.OnFocusChangeListener {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (hasFocus) {
- Calendar cal = Calendar.getInstance();
-
- if (getIntent().getExtras().getInt("mode") == EDIT_DATA_REQUEST) {
- OpenScale openScale = OpenScale.getInstance(context);
- ScaleData editScaleData = openScale.getScaleData(id);
- cal.setTime(editScaleData.date_time);
- }
-
- TimePickerDialog timePicker = new TimePickerDialog(context, timePickerListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true);
- timePicker.show();
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ setViewMode(MeasurementView.MeasurementViewMode.EDIT);
+ } else {
+ setViewMode(MeasurementView.MeasurementViewMode.VIEW);
}
}
}
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 ea15e77b..69fc8f95 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
@@ -22,18 +22,17 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
-import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
import android.util.TypedValue;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
@@ -72,31 +71,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
tableView.findViewById(R.id.btnDeleteAll).setOnClickListener(new onClickListenerDeleteAll());
- if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) != Configuration.SCREENLAYOUT_SIZE_XLARGE &&
- (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) != Configuration.SCREENLAYOUT_SIZE_LARGE)
- {
- TextView txtDateTableHeader = (TextView)tableView.findViewById(R.id.txtDateTableHeader);
- txtDateTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11);
- TextView txtTimeTableHeader = (TextView)tableView.findViewById(R.id.txtTimeTableHeader);
- txtTimeTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11);
- TextView txtWeightTableHeader = (TextView)tableView.findViewById(R.id.txtWeightTableHeader);
- txtWeightTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11);
- TextView txtFatTableHeader = (TextView)tableView.findViewById(R.id.txtFatTableHeader);
- txtFatTableHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11);
- TextView txtWaterTableHeader = (TextView)tableView.findViewById(R.id.txtWaterTableHeader);
- 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);
- btnDeleteAll.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11);
- }
-
OpenScale.getInstance(tableView.getContext()).registerFragment(this);
return tableView;
@@ -108,42 +82,42 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext());
if(!prefs.getBoolean("fatEnable", true)) {
- TextView txtFatTableHeader = (TextView)tableView.findViewById(R.id.txtFatTableHeader);
+ ImageView txtFatTableHeader = (ImageView)tableView.findViewById(R.id.txtFatTableHeader);
txtFatTableHeader.setVisibility(View.GONE);
} else {
- TextView txtFatTableHeader = (TextView)tableView.findViewById(R.id.txtFatTableHeader);
+ ImageView txtFatTableHeader = (ImageView)tableView.findViewById(R.id.txtFatTableHeader);
txtFatTableHeader.setVisibility(View.VISIBLE);
}
if(!prefs.getBoolean("muscleEnable", true)) {
- TextView txtMuscleTableHeader = (TextView)tableView.findViewById(R.id.txtMuscleTableHeader);
+ ImageView txtMuscleTableHeader = (ImageView)tableView.findViewById(R.id.txtMuscleTableHeader);
txtMuscleTableHeader.setVisibility(View.GONE);
} else {
- TextView txtMuscleTableHeader = (TextView)tableView.findViewById(R.id.txtMuscleTableHeader);
+ ImageView txtMuscleTableHeader = (ImageView)tableView.findViewById(R.id.txtMuscleTableHeader);
txtMuscleTableHeader.setVisibility(View.VISIBLE);
}
if(!prefs.getBoolean("waterEnable", true)) {
- TextView txtWaterTableHeader = (TextView)tableView.findViewById(R.id.txtWaterTableHeader);
+ ImageView txtWaterTableHeader = (ImageView)tableView.findViewById(R.id.txtWaterTableHeader);
txtWaterTableHeader.setVisibility(View.GONE);
} else {
- TextView txtWaterTableHeader = (TextView)tableView.findViewById(R.id.txtWaterTableHeader);
+ ImageView txtWaterTableHeader = (ImageView)tableView.findViewById(R.id.txtWaterTableHeader);
txtWaterTableHeader.setVisibility(View.VISIBLE);
}
if(!prefs.getBoolean("waistEnable", true)) {
- TextView txtWaistTableHeader = (TextView)tableView.findViewById(R.id.txtWaistTableHeader);
+ ImageView txtWaistTableHeader = (ImageView)tableView.findViewById(R.id.txtWaistTableHeader);
txtWaistTableHeader.setVisibility(View.GONE);
} else {
- TextView txtWaistTableHeader = (TextView)tableView.findViewById(R.id.txtWaistTableHeader);
+ ImageView txtWaistTableHeader = (ImageView)tableView.findViewById(R.id.txtWaistTableHeader);
txtWaistTableHeader.setVisibility(View.VISIBLE);
}
if(!prefs.getBoolean("hipEnable", true)) {
- TextView txtHipTableHeader = (TextView)tableView.findViewById(R.id.txtHipTableHeader);
+ ImageView txtHipTableHeader = (ImageView)tableView.findViewById(R.id.txtHipTableHeader);
txtHipTableHeader.setVisibility(View.GONE);
} else {
- TextView txtHipTableHeader = (TextView)tableView.findViewById(R.id.txtHipTableHeader);
+ ImageView txtHipTableHeader = (ImageView)tableView.findViewById(R.id.txtHipTableHeader);
txtHipTableHeader.setVisibility(View.VISIBLE);
}
@@ -247,17 +221,11 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
commentView.setPadding(0, 5, 5, 5);
dataRow.addView(commentView);
- Button deleteButton = new Button(tableView.getContext());
- deleteButton.setText("X");
- deleteButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
- deleteButton.setTextColor(Color.WHITE);
- deleteButton.setBackgroundResource(R.drawable.flat_selector);
- deleteButton.setGravity(Gravity.CENTER);
- deleteButton.setPadding(0, 0, 0, 0);
- deleteButton.setMinimumHeight(35);
- deleteButton.setHeight(35);
- deleteButton.setOnClickListener(new onClickListenerDelete());
- dataRow.addView(deleteButton);
+ ImageView deleteImageView = new ImageView(tableView.getContext());
+ dataRow.addView(deleteImageView);
+ deleteImageView.setImageDrawable(ContextCompat.getDrawable(tableView.getContext(), R.drawable.delete));
+ deleteImageView.getLayoutParams().height = pxImageDp(20);
+ deleteImageView.setOnClickListener(new onClickListenerDelete());
dataRow.setOnClickListener(new onClickListenerRow());
@@ -279,6 +247,10 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
}
}
+ private int pxImageDp(float dp) {
+ return (int)(dp * getResources().getDisplayMetrics().density + 0.5f);
+ }
+
private class onClickListenerRow implements View.OnClickListener {
@Override
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java
index 9b6c4c28..ad524c44 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/BMIMeasurementView.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
@@ -16,6 +31,11 @@ public class BMIMeasurementView extends MeasurementView {
super(context, context.getResources().getString(R.string.label_bmi), ContextCompat.getDrawable(context, R.drawable.bmi));
}
+ @Override
+ public boolean isEditable() {
+ return false;
+ }
+
@Override
public void updateValue(ScaleData updateData) {
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
@@ -49,11 +69,6 @@ public class BMIMeasurementView extends MeasurementView {
return 50;
}
- @Override
- int getInputType() {
- return 0;
- }
-
@Override
public void updatePreferences(SharedPreferences preferences) {
setVisible(preferences.getBoolean("weightEnable", true));
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
new file mode 100644
index 00000000..78787051
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/CommentMeasurementView.java
@@ -0,0 +1,84 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.views;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.v4.content.ContextCompat;
+import android.text.InputType;
+import android.widget.EditText;
+
+import com.health.openscale.R;
+import com.health.openscale.core.datatypes.ScaleData;
+import com.health.openscale.core.evaluation.EvaluationResult;
+import com.health.openscale.core.evaluation.EvaluationSheet;
+
+public class CommentMeasurementView extends MeasurementView {
+
+ public CommentMeasurementView(Context context) {
+ super(context, context.getResources().getString(R.string.label_comment), ContextCompat.getDrawable(context, R.drawable.comment));
+ }
+
+ @Override
+ public boolean validateInput(EditText view) {
+ return true;
+ }
+
+ protected int getInputType() {
+ return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE | InputType.TYPE_TEXT_FLAG_MULTI_LINE;
+ }
+
+ @Override
+ protected String getHintText() {
+ return getResources().getString(R.string.info_enter_comment);
+ }
+
+ @Override
+ public void updateValue(ScaleData updateData) {
+ setValueOnView(updateData.comment);
+ }
+
+ @Override
+ public void updateDiff(ScaleData updateData, ScaleData lastData) {
+
+ }
+
+ @Override
+ public void updatePreferences(SharedPreferences preferences) {
+
+ }
+
+ @Override
+ public String getUnit() {
+ return null;
+ }
+
+ @Override
+ public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
+ return null;
+ }
+
+ @Override
+ public float getMinValue() {
+ return 0;
+ }
+
+ @Override
+ public float getMaxValue() {
+ return 0;
+ }
+
+}
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
new file mode 100644
index 00000000..68159f2a
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/DateMeasurementView.java
@@ -0,0 +1,91 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.views;
+
+import android.app.AlertDialog;
+import android.app.DatePickerDialog;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.v4.content.ContextCompat;
+import android.widget.DatePicker;
+
+import com.health.openscale.R;
+import com.health.openscale.core.datatypes.ScaleData;
+import com.health.openscale.core.evaluation.EvaluationResult;
+import com.health.openscale.core.evaluation.EvaluationSheet;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+public class DateMeasurementView extends MeasurementView {
+ private SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
+
+ public DateMeasurementView(Context context) {
+ super(context, context.getResources().getString(R.string.label_date), ContextCompat.getDrawable(context, R.drawable.lastmonth));
+ }
+
+ private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
+ @Override
+ public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
+ setValueOnView(String.format("%02d.%02d.%04d", selectedDay, selectedMonth+1, selectedYear));
+ }
+ };
+
+ @Override
+ protected AlertDialog getInputDialog() {
+ Calendar cal = Calendar.getInstance();
+
+ DatePickerDialog datePicker = new DatePickerDialog(getContext(), datePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
+
+ return datePicker;
+ }
+
+ @Override
+ public void updateValue(ScaleData updateData) {
+ setValueOnView(dateFormat.format(updateData.date_time));
+ }
+
+ @Override
+ public void updateDiff(ScaleData updateData, ScaleData lastData) {
+
+ }
+
+ @Override
+ public void updatePreferences(SharedPreferences preferences) {
+
+ }
+
+ @Override
+ public String getUnit() {
+ return null;
+ }
+
+ @Override
+ public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
+ return null;
+ }
+
+ @Override
+ public float getMinValue() {
+ return 0;
+ }
+
+ @Override
+ public float getMaxValue() {
+ return 0;
+ }
+
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java
index 58208ce8..c1033c17 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/FatMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -51,8 +65,4 @@ public class FatMeasurementView extends MeasurementView {
return 40;
}
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java
index 5ebfade4..ddabd96c 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/HipMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -38,7 +52,7 @@ public class HipMeasurementView extends MeasurementView {
@Override
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
- return evalSheet.evaluateHip(value);
+ return null;
}
@Override
@@ -51,8 +65,4 @@ public class HipMeasurementView extends MeasurementView {
return 200;
}
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java
index e56f6d5c..21587b82 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/LinearGaugeView.java
@@ -96,6 +96,9 @@ public class LinearGaugeView extends View {
infoTextPaint.setColor(Color.GRAY);
infoTextPaint.setTextSize(30);
infoTextPaint.setTextAlign(Paint.Align.CENTER);
+
+ firstLimit = -1.0f;
+ secondLimit = -1.0f;
}
@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 d2880b99..ea6bb081 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
@@ -1,12 +1,32 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
+import android.app.AlertDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
+import android.support.v4.content.ContextCompat;
import android.text.Html;
+import android.text.InputType;
import android.util.TypedValue;
import android.view.View;
+import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Space;
@@ -15,15 +35,19 @@ import android.widget.TableRow;
import android.widget.TextView;
import com.health.openscale.R;
-import com.health.openscale.core.evaluation.EvaluationResult;
-import com.health.openscale.core.evaluation.EvaluationSheet;
import com.health.openscale.core.OpenScale;
import com.health.openscale.core.datatypes.ScaleData;
import com.health.openscale.core.datatypes.ScaleUser;
+import com.health.openscale.core.evaluation.EvaluationResult;
+import com.health.openscale.core.evaluation.EvaluationSheet;
import lecho.lib.hellocharts.util.ChartUtils;
+import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.ADD;
+import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.EDIT;
+
public abstract class MeasurementView extends TableLayout {
+ public enum MeasurementViewMode {VIEW, EDIT, ADD};
private static String SYMBOL_UP = "↗";
private static String SYMBOL_DOWN = "↘";
@@ -31,6 +55,7 @@ public abstract class MeasurementView extends TableLayout {
private ImageView iconView;
private TextView nameView;
private TextView valueView;
+ private ImageView editModeView;
private ImageView indicatorView;
private TableRow evaluatorRow;
@@ -38,14 +63,17 @@ public abstract class MeasurementView extends TableLayout {
private String nameText;
- private boolean editMode;
+ private String value;
+
+ private MeasurementViewMode measurementMode;
public MeasurementView(Context context, String text, Drawable icon) {
super(context);
initView(context);
- editMode = false;
+ measurementMode = MeasurementViewMode.VIEW;
nameText = text;
+ value = new String();
nameView.setText(text);
iconView.setImageDrawable(icon);
}
@@ -56,16 +84,17 @@ public abstract class MeasurementView extends TableLayout {
iconView = new ImageView(context);
nameView = new TextView(context);
valueView = new TextView(context);
+ editModeView = new ImageView(context);
indicatorView = new ImageView(context);
evaluatorRow = new TableRow(context);
evaluatorView = new LinearGaugeView(context);
-
measurementRow.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1.0f));
measurementRow.addView(iconView);
measurementRow.addView(nameView);
measurementRow.addView(valueView);
+ measurementRow.addView(editModeView);
measurementRow.addView(indicatorView);
addView(measurementRow);
@@ -83,6 +112,11 @@ public abstract class MeasurementView extends TableLayout {
valueView.setTextColor(Color.BLACK);
valueView.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.01f));
+ editModeView.getLayoutParams().height = pxImageDp(20);
+ editModeView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+ editModeView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.edit));
+ editModeView.setVisibility(View.GONE);
+
indicatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.01f));
indicatorView.setBackgroundColor(Color.GRAY);
@@ -107,38 +141,55 @@ public abstract class MeasurementView extends TableLayout {
public abstract float getMinValue();
public abstract float getMaxValue();
- abstract int getInputType();
-
public float getValue() {
- if (valueView.getText().length() == 0) {
+ if (value.length() == 0) {
return -1;
}
- return Float.valueOf(valueView.getText().toString());
+ return Float.valueOf(value);
}
- public void setEditMode(boolean mode) {
- editMode = mode;
+ public String getValueAsString() {
+ return value;
+ }
- if (editMode) {
- valueView = new EditText(getContext());
- valueView.setInputType(getInputType());
- valueView.setHint(getContext().getResources().getString(R.string.info_enter_value_unit) + " " + getUnit());
- measurementRow.addView(valueView);
- indicatorView.setVisibility(View.GONE);
+ protected boolean isEditable() {
+ return true;
+ }
+
+ public void setEditMode(MeasurementViewMode mode) {
+ measurementMode = mode;
+
+ switch (mode) {
+ case VIEW:
+ indicatorView.setVisibility(View.VISIBLE);
+ editModeView.setVisibility(View.GONE);
+ break;
+ case EDIT:
+ case ADD:
+ if (isEditable()) {
+ editModeView.setVisibility(View.VISIBLE);
+ }
+ indicatorView.setVisibility(View.GONE);
+ evaluatorRow.setVisibility(View.GONE);
+ break;
}
}
- protected boolean isEditModeOn() {
- return editMode;
+ protected MeasurementViewMode getMeasurementMode() {
+ return measurementMode;
}
- protected void setValueOnView(float value) {
- if (isEditModeOn()) {
- valueView.setText(String.valueOf(value));
- } else {
- valueView.setText(String.format("%.2f ", value) + getUnit());
- evaluate(value);
+ protected void setValueOnView(Object objValue) {
+ value = String.valueOf(objValue);
+
+ try{
+ Float floatValue = Float.parseFloat(value);
+ evaluate(floatValue);
+ valueView.setText(String.format("%.2f ", floatValue) + getUnit());
+ } catch (NumberFormatException e) {
+
+ valueView.setText(value);
}
}
@@ -177,19 +228,17 @@ public abstract class MeasurementView extends TableLayout {
return (int)(dp * getResources().getDisplayMetrics().density + 0.5f);
}
- public boolean validateInput() {
- if (measurementRow.getVisibility() == View.VISIBLE) {
- if (valueView.getText().toString().length() == 0) {
- valueView.setError(getResources().getString(R.string.error_value_required));
- return false;
- }
+ protected boolean validateInput(EditText view) {
+ if (view.getText().toString().length() == 0) {
+ view.setError(getResources().getString(R.string.error_value_required));
+ return false;
+ }
- float value = Float.valueOf(valueView.getText().toString());
+ float floatValue = Float.valueOf(view.getText().toString());
- if (!(value >= 0 && value <= getMaxValue())) {
- valueView.setError(getResources().getString(R.string.error_value_range));
- return false;
- }
+ if (!(floatValue >= 0 && floatValue <= getMaxValue())) {
+ view.setError(getResources().getString(R.string.error_value_range));
+ return false;
}
return true;
@@ -199,6 +248,10 @@ public abstract class MeasurementView extends TableLayout {
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser());
EvaluationResult evalResult = evaluateSheet(evalSheet, value);
+ if (evalResult == null) {
+ evalResult = new EvaluationResult();
+ }
+
evaluatorView.setMinMaxValue(getMinValue(), getMaxValue());
evaluatorView.setLimits(evalResult.lowLimit, evalResult.highLimit);
evaluatorView.setValue(value);
@@ -226,10 +279,60 @@ public abstract class MeasurementView extends TableLayout {
return openScale.getSelectedScaleUser();
}
+ protected int getInputType() {
+ return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
+ }
+
+ protected String getHintText() {
+ return getResources().getString(R.string.info_enter_value_unit) + " " + getUnit();
+ }
+
+ protected AlertDialog getInputDialog() {
+ final AlertDialog floatDialog;
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle(nameView.getText());
+ builder.setIcon(iconView.getDrawable());
+
+ final EditText input = new EditText(getContext());
+
+ input.setInputType(getInputType());
+ input.setHint(getHintText());
+ builder.setView(input);
+
+ builder.setPositiveButton(getResources().getString(R.string.label_ok), null);
+ builder.setNegativeButton(getResources().getString(R.string.label_cancel), null);
+
+ floatDialog = builder.create();
+
+ floatDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+
+ @Override
+ public void onShow(DialogInterface dialog) {
+
+ Button b = floatDialog.getButton(AlertDialog.BUTTON_POSITIVE);
+ b.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ if (validateInput(input)) {
+ setValueOnView(input.getText().toString());
+ floatDialog.dismiss();
+ }
+ }
+ });
+ }
+ });
+
+ return floatDialog;
+ }
+
private class onClickListenerEvaluation implements View.OnClickListener {
@Override
public void onClick(View v) {
- if (isEditModeOn()) {
+ if (getMeasurementMode() == EDIT || getMeasurementMode() == ADD) {
+ if (isEditable()) {
+ getInputDialog().show();
+ }
return;
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java
index 7defcd48..89b54cb5 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MuscleMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -51,8 +65,4 @@ public class MuscleMeasurementView extends MeasurementView {
return 80;
}
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
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
new file mode 100644
index 00000000..bc68d2c0
--- /dev/null
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/TimeMeasurementView.java
@@ -0,0 +1,91 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+package com.health.openscale.gui.views;
+
+import android.app.AlertDialog;
+import android.app.TimePickerDialog;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.v4.content.ContextCompat;
+import android.widget.TimePicker;
+
+import com.health.openscale.R;
+import com.health.openscale.core.datatypes.ScaleData;
+import com.health.openscale.core.evaluation.EvaluationResult;
+import com.health.openscale.core.evaluation.EvaluationSheet;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+public class TimeMeasurementView extends MeasurementView {
+ private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
+
+ public TimeMeasurementView(Context context) {
+ super(context, context.getResources().getString(R.string.label_time), ContextCompat.getDrawable(context, R.drawable.daysleft));
+ }
+
+ private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ setValueOnView(String.format("%02d:%02d", hourOfDay, minute));
+ }
+ };
+
+ @Override
+ protected AlertDialog getInputDialog() {
+ Calendar cal = Calendar.getInstance();
+
+ TimePickerDialog timePicker = new TimePickerDialog(getContext(), timePickerListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true);
+
+ return timePicker;
+ }
+
+ @Override
+ public void updateValue(ScaleData updateData) {
+ setValueOnView(timeFormat.format(updateData.date_time));
+ }
+
+ @Override
+ public void updateDiff(ScaleData updateData, ScaleData lastData) {
+
+ }
+
+ @Override
+ public void updatePreferences(SharedPreferences preferences) {
+
+ }
+
+ @Override
+ public String getUnit() {
+ return "";
+ }
+
+ @Override
+ public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
+ return null;
+ }
+
+ @Override
+ public float getMinValue() {
+ return 0;
+ }
+
+ @Override
+ public float getMaxValue() {
+ return 0;
+ }
+
+}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java
index dd8911f2..00b6ce78 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WHRMeasurementView.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
@@ -16,6 +31,11 @@ public class WHRMeasurementView extends MeasurementView {
super(context, context.getResources().getString(R.string.label_whr), ContextCompat.getDrawable(context, R.drawable.whr));
}
+ @Override
+ public boolean isEditable() {
+ return false;
+ }
+
@Override
public void updateValue(ScaleData updateData) {
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
@@ -54,9 +74,4 @@ public class WHRMeasurementView extends MeasurementView {
return 1.5f;
}
- @Override
- int getInputType() {
- return 0;
- }
-
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java
index 5cdb8941..d56c493f 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WHtRMeasurementView.java
@@ -1,3 +1,18 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
@@ -16,6 +31,11 @@ public class WHtRMeasurementView extends MeasurementView {
super(context, context.getResources().getString(R.string.label_whtr), ContextCompat.getDrawable(context, R.drawable.whtr));
}
+ @Override
+ public boolean isEditable() {
+ return false;
+ }
+
@Override
public void updateValue(ScaleData updateData) {
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
@@ -54,8 +74,4 @@ public class WHtRMeasurementView extends MeasurementView {
return 1;
}
- @Override
- int getInputType() {
- return 0;
- }
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java
index 0f9043dd..ab2a0507 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WaistMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -51,8 +65,4 @@ public class WaistMeasurementView extends MeasurementView {
return 200;
}
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java
index 1fbf801e..738fb383 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WaterMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -50,9 +64,4 @@ public class WaterMeasurementView extends MeasurementView {
public float getMaxValue() {
return 80;
}
-
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java
index 5461a81f..5aad9a01 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/views/WeightMeasurementView.java
@@ -1,9 +1,23 @@
+/* Copyright (C) 2014 olie.xdev
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
package com.health.openscale.gui.views;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.content.ContextCompat;
-import android.text.InputType;
import com.health.openscale.R;
import com.health.openscale.core.datatypes.ScaleData;
@@ -20,6 +34,10 @@ public class WeightMeasurementView extends MeasurementView {
@Override
public void updateValue(ScaleData updateData) {
setValueOnView(updateData.weight);
+
+ if (getMeasurementMode() == MeasurementViewMode.ADD) {
+ getInputDialog().show();
+ }
}
@Override
@@ -52,8 +70,4 @@ public class WeightMeasurementView extends MeasurementView {
return 300;
}
- @Override
- int getInputType() {
- return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
- }
}
diff --git a/android_app/app/src/main/res/layout-large/fragment_table.xml b/android_app/app/src/main/res/layout-large/fragment_table.xml
index a0814733..c599e36c 100644
--- a/android_app/app/src/main/res/layout-large/fragment_table.xml
+++ b/android_app/app/src/main/res/layout-large/fragment_table.xml
@@ -2,8 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:padding="10dp"
- tools:context="com.health.openscale.MainActivity$PlaceholderFragment">
+ android:padding="10dp">
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
-
+ android:textStyle="bold" />
+ android:textSize="10sp" />
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 6f99b305..b6b3b743 100644
--- a/android_app/app/src/main/res/layout/activity_dataentry.xml
+++ b/android_app/app/src/main/res/layout/activity_dataentry.xml
@@ -3,198 +3,118 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
- android:padding="5dp" >
+ android:padding="5dp">
+ android:gravity="center"
+ android:orientation="horizontal">
+ android:layout_marginRight="30dp"
+ android:layout_weight="0"
+ android:gravity="center"
+ android:text="date/time"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold" />
+ android:text=">"
+ android:textColor="@android:color/white" />
+
+
+
+
+
+
+
+
-
-
+ android:layout_height="wrap_content">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ android:padding="5dp"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android_app/app/src/main/res/layout/fragment_table.xml b/android_app/app/src/main/res/layout/fragment_table.xml
index 193e3918..88cf3d84 100644
--- a/android_app/app/src/main/res/layout/fragment_table.xml
+++ b/android_app/app/src/main/res/layout/fragment_table.xml
@@ -2,8 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:padding="5dp"
- tools:context="com.health.openscale.MainActivity$PlaceholderFragment">
+ android:padding="5dp">
-
-
-
-
-
-
-
-
-
+ android:textSize="8dp" />
diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml
index 1821dd8d..0e94665c 100644
--- a/android_app/app/src/main/res/values/strings.xml
+++ b/android_app/app/src/main/res/values/strings.xml
@@ -32,6 +32,7 @@
Waist-to-height ratioWaist-hip ratioSmart User assignment
+ Editdaysmeasures