1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-23 16:53:04 +02:00

add drop down list for user names

fix small export/import bug if comment field is empty
This commit is contained in:
OliE
2015-08-08 16:10:14 +02:00
parent e8bbe08392
commit b68e75786b
10 changed files with 135 additions and 64 deletions

View File

@@ -33,7 +33,6 @@ import java.io.OutputStreamWriter;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
public class OpenScale { public class OpenScale {
@@ -107,12 +106,6 @@ public class OpenScale {
if (selectedUserId == -1) { if (selectedUserId == -1) {
ScaleUser scaleUser = new ScaleUser(); ScaleUser scaleUser = new ScaleUser();
scaleUser.id = -1;
scaleUser.user_name = "anonymous";
scaleUser.birthday = new Date();
scaleUser.scale_unit = 1;
scaleUser.body_height = 1;
return scaleUser; return scaleUser;
} }
@@ -209,7 +202,7 @@ public class OpenScale {
try { try {
while (line != null) { while (line != null) {
String csvField[] = line.split(","); String csvField[] = line.split(",", -1);
ScaleData newScaleData = new ScaleData(); ScaleData newScaleData = new ScaleData();
@@ -251,7 +244,10 @@ public class OpenScale {
csvWriter.append(Float.toString(scaleData.fat) + ","); csvWriter.append(Float.toString(scaleData.fat) + ",");
csvWriter.append(Float.toString(scaleData.water) + ","); csvWriter.append(Float.toString(scaleData.water) + ",");
csvWriter.append(Float.toString(scaleData.muscle) + ","); csvWriter.append(Float.toString(scaleData.muscle) + ",");
csvWriter.append(scaleData.comment); if (!scaleData.comment.isEmpty()) {
csvWriter.append(scaleData.comment);
}
csvWriter.append("\n"); csvWriter.append("\n");
} }

View File

@@ -27,7 +27,19 @@ public class ScaleData {
public float water; public float water;
public float muscle; public float muscle;
public String comment; public String comment;
public ScaleData()
{
id = -1;
user_id = -1;
date_time = new Date();
weight = -1.0f;
fat = -1.0f;
water = -1.0f;
muscle = 1.0f;
comment = new String();
}
@Override @Override
public String toString() public String toString()
{ {

View File

@@ -30,6 +30,17 @@ public class ScaleUser {
public double goal_weight; public double goal_weight;
public Date goal_date; public Date goal_date;
public ScaleUser() {
id = -1;
user_name = new String();
birthday = new Date();
body_height = -1;
scale_unit = -1;
gender = -1;
goal_weight = -1;
goal_date = new Date();
}
public boolean isMale() public boolean isMale()
{ {
if (gender == 0) if (gender == 0)

View File

@@ -16,6 +16,7 @@
package com.health.openscale.gui; package com.health.openscale.gui;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
@@ -28,6 +29,9 @@ import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@@ -94,6 +98,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
private PieChartView pieChartLast; private PieChartView pieChartLast;
private LineChartView lineChartLast; private LineChartView lineChartLast;
private Spinner spinUser;
private enum lines {WEIGHT, FAT, WATER, MUSCLE} private enum lines {WEIGHT, FAT, WATER, MUSCLE}
private ArrayList<lines> activeLines; private ArrayList<lines> activeLines;
@@ -104,11 +110,15 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
private List<ScaleData> scaleDataLastDays; private List<ScaleData> scaleDataLastDays;
private Context context;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{ {
overviewView = inflater.inflate(R.layout.fragment_overview, container, false); overviewView = inflater.inflate(R.layout.fragment_overview, container, false);
context = overviewView.getContext();
txtTitleUser = (TextView) overviewView.findViewById(R.id.txtTitleUser); txtTitleUser = (TextView) overviewView.findViewById(R.id.txtTitleUser);
txtTitleLastMeasurement = (TextView) overviewView.findViewById(R.id.txtTitleLastMeasurment); txtTitleLastMeasurement = (TextView) overviewView.findViewById(R.id.txtTitleLastMeasurment);
txtTitleGoal = (TextView) overviewView.findViewById(R.id.txtTitleGoal); txtTitleGoal = (TextView) overviewView.findViewById(R.id.txtTitleGoal);
@@ -143,6 +153,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
pieChartLast = (PieChartView) overviewView.findViewById(R.id.pieChartLast); pieChartLast = (PieChartView) overviewView.findViewById(R.id.pieChartLast);
lineChartLast = (LineChartView) overviewView.findViewById(R.id.lineChartLast); lineChartLast = (LineChartView) overviewView.findViewById(R.id.lineChartLast);
spinUser = (Spinner) overviewView.findViewById(R.id.spinUser);
lineChartLast.setOnValueTouchListener(new LineChartTouchListener()); lineChartLast.setOnValueTouchListener(new LineChartTouchListener());
pieChartLast.setOnValueTouchListener(new PieChartLastTouchListener()); pieChartLast.setOnValueTouchListener(new PieChartLastTouchListener());
@@ -155,6 +167,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
}); });
prefs = PreferenceManager.getDefaultSharedPreferences(overviewView.getContext()); prefs = PreferenceManager.getDefaultSharedPreferences(overviewView.getContext());
currentScaleUser = OpenScale.getInstance(overviewView.getContext()).getSelectedScaleUser();
updateOnView(OpenScale.getInstance(overviewView.getContext()).getScaleDataList()); updateOnView(OpenScale.getInstance(overviewView.getContext()).getScaleDataList());
@@ -173,14 +186,36 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
row.setVisibility(View.GONE); row.setVisibility(View.GONE);
} }
return overviewView; spinUser.setOnItemSelectedListener(new spinUserSelectionListener());
ArrayList<String> userItems = new ArrayList<>();
ArrayList<ScaleUser> scaleUserList = OpenScale.getInstance(overviewView.getContext()).getScaleUserList();
int posUser = 0;
int pos = 0;
for (ScaleUser scaleUser : scaleUserList) {
userItems.add(scaleUser.user_name);
if (scaleUser.id == currentScaleUser.id) {
posUser = pos;
}
pos++;
}
ArrayAdapter<String> spinAdapter = new ArrayAdapter<>(overviewView.getContext(), R.layout.support_simple_spinner_dropdown_item, userItems);
spinUser.setAdapter(spinAdapter);
spinUser.setSelection(posUser);
return overviewView;
} }
@Override @Override
public void updateOnView(ArrayList<ScaleData> scaleDataList) public void updateOnView(ArrayList<ScaleData> scaleDataList)
{ {
currentScaleUser = OpenScale.getInstance(overviewView.getContext()).getSelectedScaleUser();
if (scaleDataList.isEmpty()) { if (scaleDataList.isEmpty()) {
lastScaleData = null; lastScaleData = null;
return; return;
@@ -188,7 +223,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
lastScaleData = scaleDataList.get(0); lastScaleData = scaleDataList.get(0);
txtTitleUser.setText(getResources().getString(R.string.label_title_user).toUpperCase() + " " + currentScaleUser.user_name); txtTitleUser.setText(getResources().getString(R.string.label_title_user).toUpperCase());
txtTitleLastMeasurement.setText(getResources().getString(R.string.label_title_last_measurement).toUpperCase()); txtTitleLastMeasurement.setText(getResources().getString(R.string.label_title_last_measurement).toUpperCase());
txtTitleGoal.setText(getResources().getString(R.string.label_title_goal).toUpperCase()); txtTitleGoal.setText(getResources().getString(R.string.label_title_goal).toUpperCase());
txtTitleStatistics.setText(getResources().getString(R.string.label_title_statistics).toUpperCase()); txtTitleStatistics.setText(getResources().getString(R.string.label_title_statistics).toUpperCase());
@@ -225,7 +260,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
txtLabelGoalDiff.setText(Html.fromHtml(getResources().getString(R.string.label_weight_difference) + " <br> <font color='grey'><small>BMI " + String.format("%.1f", currentScaleUser.getBMI(lastScaleData.weight) - currentScaleUser.getBMI(currentScaleUser.goal_weight)) + " </small></font>")); txtLabelGoalDiff.setText(Html.fromHtml(getResources().getString(R.string.label_weight_difference) + " <br> <font color='grey'><small>BMI " + String.format("%.1f", currentScaleUser.getBMI(lastScaleData.weight) - currentScaleUser.getBMI(currentScaleUser.goal_weight)) + " </small></font>"));
txtLabelDayLeft.setText(Html.fromHtml(getResources().getString(R.string.label_days_left) + " <br> <font color='grey'><small>" + getResources().getString(R.string.label_goal_date_is) + " " + DateFormat.getDateInstance(DateFormat.LONG).format(currentScaleUser.goal_date) + " </small></font>")); // currentScaleUser.goal_date txtLabelDayLeft.setText(Html.fromHtml(getResources().getString(R.string.label_days_left) + " <br> <font color='grey'><small>" + getResources().getString(R.string.label_goal_date_is) + " " + DateFormat.getDateInstance(DateFormat.LONG).format(currentScaleUser.goal_date) + " </small></font>")); // currentScaleUser.goal_date
if (scaleDataList.size() > 2) { if (scaleDataList.size() >= 2) {
ScaleData diffScaleData = scaleDataList.get(1); ScaleData diffScaleData = scaleDataList.get(1);
double diffWeight = lastScaleData.weight - diffScaleData.weight; double diffWeight = lastScaleData.weight - diffScaleData.weight;
@@ -570,4 +605,26 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener
} }
} }
private class spinUserSelectionListener implements AdapterView.OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (parent.getChildCount() > 0) {
((TextView) parent.getChildAt(0)).setTextColor(Color.GRAY);
ArrayList<ScaleUser> scaleUserList = OpenScale.getInstance(overviewView.getContext()).getScaleUserList();
ScaleUser scaleUser = scaleUserList.get(position);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putInt("selectedUserId", scaleUser.id).commit();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
} }

View File

@@ -77,8 +77,6 @@ public class UserSettingsActivity extends Activity {
txtBirthday = (EditText) findViewById(R.id.txtBirthday); txtBirthday = (EditText) findViewById(R.id.txtBirthday);
txtGoalDate = (EditText) findViewById(R.id.txtGoalDate); txtGoalDate = (EditText) findViewById(R.id.txtGoalDate);
btnBirthdaySet = (Button) findViewById(R.id.btnDateSet);
btnGoalDateSet = (Button) findViewById(R.id.btnGoalDateSet);
btnDelete = (Button) findViewById(R.id.btnDelete); btnDelete = (Button) findViewById(R.id.btnDelete);
btnOk = (Button)findViewById(R.id.btnOk); btnOk = (Button)findViewById(R.id.btnOk);
btnCancel = (Button)findViewById(R.id.btnCancel); btnCancel = (Button)findViewById(R.id.btnCancel);
@@ -86,13 +84,34 @@ public class UserSettingsActivity extends Activity {
btnOk.setOnClickListener(new onClickListenerOk()); btnOk.setOnClickListener(new onClickListenerOk());
btnCancel.setOnClickListener(new onClickListenerCancel()); btnCancel.setOnClickListener(new onClickListenerCancel());
btnDelete.setOnClickListener(new onClickListenerDelete()); btnDelete.setOnClickListener(new onClickListenerDelete());
btnBirthdaySet.setOnClickListener(new onClickListenerBirthdaySet());
btnGoalDateSet.setOnClickListener(new onClickListenerGoalDateSet());
txtBirthday.setText(dateFormat.format(new Date())); txtBirthday.setText(dateFormat.format(new Date()));
txtGoalDate.setText(dateFormat.format(new Date())); txtGoalDate.setText(dateFormat.format(new Date()));
txtBirthday.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
Calendar cal = Calendar.getInstance();
DatePickerDialog datePicker = new DatePickerDialog(context, goalDatePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
datePicker.show();
}
}
});
txtGoalDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
Calendar cal = Calendar.getInstance();
DatePickerDialog datePicker = new DatePickerDialog(context, goalDatePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
datePicker.show();
}
}
});
if (getIntent().getExtras().getInt("mode") == EDIT_USER_REQUEST) if (getIntent().getExtras().getInt("mode") == EDIT_USER_REQUEST)
{ {
editMode(); editMode();
@@ -288,25 +307,6 @@ public class UserSettingsActivity extends Activity {
} }
} }
private class onClickListenerBirthdaySet implements View.OnClickListener {
@Override
public void onClick(View v) {
Calendar cal = Calendar.getInstance();
DatePickerDialog datePicker = new DatePickerDialog(context, datePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
datePicker.show();
}
}
private class onClickListenerGoalDateSet implements View.OnClickListener {
@Override
public void onClick(View v) {
Calendar cal = Calendar.getInstance();
DatePickerDialog datePicker = new DatePickerDialog(context, goalDatePickerListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
datePicker.show();
}
}
private class onClickListenerCancel implements View.OnClickListener { private class onClickListenerCancel implements View.OnClickListener {
@Override @Override
public void onClick(View v) { public void onClick(View v) {

View File

@@ -158,16 +158,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="5" android:layout_weight="5"
android:ems="10" android:ems="10"
android:enabled="false"
android:inputType="date" /> android:inputType="date" />
<Button
android:id="@+id/btnDateSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_set"
android:textSize="15sp" />
</TableRow> </TableRow>
<TableRow <TableRow
@@ -206,16 +198,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="5" android:layout_weight="5"
android:ems="10" android:ems="10"
android:enabled="false"
android:inputType="date" /> android:inputType="date" />
<Button
android:id="@+id/btnGoalDateSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_set"
android:textSize="15sp" />
</TableRow> </TableRow>
</TableLayout> </TableLayout>

View File

@@ -22,13 +22,27 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent"> android:layout_height="fill_parent">
<TextView <LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="fill_parent">
android:text="USER"
android:id="@+id/txtTitleUser" <TextView
android:layout_weight="0" android:layout_width="wrap_content"
android:textSize="20dp" /> android:layout_height="wrap_content"
android:text="USER"
android:id="@+id/txtTitleUser"
android:layout_weight="0"
android:textSize="20dp"/>
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinUser"
android:textSize="20dp" />
</LinearLayout>
<View <View
android:layout_width="fill_parent" android:layout_width="fill_parent"

View File

@@ -69,7 +69,6 @@
<string name="label_no">Nein</string> <string name="label_no">Nein</string>
<string name="label_ok">OK</string> <string name="label_ok">OK</string>
<string name="label_scale_unit">Einheit</string> <string name="label_scale_unit">Einheit</string>
<string name="label_set">Set</string>
<string name="label_time">Zeit</string> <string name="label_time">Zeit</string>
<string name="label_title_goal">Ziel</string> <string name="label_title_goal">Ziel</string>
<string name="label_title_last_measurement">Letzte Messung</string> <string name="label_title_last_measurement">Letzte Messung</string>

View File

@@ -39,7 +39,6 @@
<string name="label_title_goal">目標</string> <string name="label_title_goal">目標</string>
<string name="label_goal_date">目標期日</string> <string name="label_goal_date">目標期日</string>
<string name="label_scale_unit">単位</string> <string name="label_scale_unit">単位</string>
<string name="label_set">Set</string>
<string name="label_measures">計測</string> <string name="label_measures">計測</string>
<string name="label_title_last_measurement">最終の計測</string> <string name="label_title_last_measurement">最終の計測</string>
<string name="label_goal_date_is">目標期日は</string> <string name="label_goal_date_is">目標期日は</string>

View File

@@ -38,7 +38,6 @@
<string name="label_date">Date</string> <string name="label_date">Date</string>
<string name="label_time">Time</string> <string name="label_time">Time</string>
<string name="label_set">Set</string>
<string name="label_birthday">Birthday</string> <string name="label_birthday">Birthday</string>
<string name="label_user_name">Name</string> <string name="label_user_name">Name</string>
<string name="label_body_height">Body height</string> <string name="label_body_height">Body height</string>