From b68e75786b6de1d377a3fc566e4b06cac327d1c3 Mon Sep 17 00:00:00 2001 From: OliE Date: Sat, 8 Aug 2015 16:10:14 +0200 Subject: [PATCH] add drop down list for user names fix small export/import bug if comment field is empty --- .../com/health/openscale/core/OpenScale.java | 14 ++-- .../com/health/openscale/core/ScaleData.java | 14 +++- .../com/health/openscale/core/ScaleUser.java | 11 +++ .../openscale/gui/OverviewFragment.java | 67 +++++++++++++++++-- .../openscale/gui/UserSettingsActivity.java | 48 ++++++------- .../main/res/layout/activity_usersettings.xml | 16 ----- .../src/main/res/layout/fragment_overview.xml | 26 +++++-- .../app/src/main/res/values-de/strings.xml | 1 - .../app/src/main/res/values-ja/strings.xml | 1 - .../app/src/main/res/values/strings.xml | 1 - 10 files changed, 135 insertions(+), 64 deletions(-) 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 cba5b777..aa263f91 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 @@ -33,7 +33,6 @@ import java.io.OutputStreamWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; public class OpenScale { @@ -107,12 +106,6 @@ public class OpenScale { if (selectedUserId == -1) { 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; } @@ -209,7 +202,7 @@ public class OpenScale { try { while (line != null) { - String csvField[] = line.split(","); + String csvField[] = line.split(",", -1); ScaleData newScaleData = new ScaleData(); @@ -251,7 +244,10 @@ public class OpenScale { csvWriter.append(Float.toString(scaleData.fat) + ","); csvWriter.append(Float.toString(scaleData.water) + ","); csvWriter.append(Float.toString(scaleData.muscle) + ","); - csvWriter.append(scaleData.comment); + if (!scaleData.comment.isEmpty()) { + csvWriter.append(scaleData.comment); + } + csvWriter.append("\n"); } 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 9d7a1c6d..3fe95da6 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 @@ -27,7 +27,19 @@ public class ScaleData { public float water; public float muscle; 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 public String toString() { diff --git a/android_app/app/src/main/java/com/health/openscale/core/ScaleUser.java b/android_app/app/src/main/java/com/health/openscale/core/ScaleUser.java index e6662c60..b480aea7 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/ScaleUser.java +++ b/android_app/app/src/main/java/com/health/openscale/core/ScaleUser.java @@ -30,6 +30,17 @@ public class ScaleUser { public double goal_weight; 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() { if (gender == 0) 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 8ad9223b..f05ec48e 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 @@ -16,6 +16,7 @@ package com.health.openscale.gui; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; @@ -28,6 +29,9 @@ import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; @@ -94,6 +98,8 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener private PieChartView pieChartLast; private LineChartView lineChartLast; + private Spinner spinUser; + private enum lines {WEIGHT, FAT, WATER, MUSCLE} private ArrayList activeLines; @@ -104,11 +110,15 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener private List scaleDataLastDays; + private Context context; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { overviewView = inflater.inflate(R.layout.fragment_overview, container, false); + context = overviewView.getContext(); + txtTitleUser = (TextView) overviewView.findViewById(R.id.txtTitleUser); txtTitleLastMeasurement = (TextView) overviewView.findViewById(R.id.txtTitleLastMeasurment); 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); lineChartLast = (LineChartView) overviewView.findViewById(R.id.lineChartLast); + spinUser = (Spinner) overviewView.findViewById(R.id.spinUser); + lineChartLast.setOnValueTouchListener(new LineChartTouchListener()); pieChartLast.setOnValueTouchListener(new PieChartLastTouchListener()); @@ -155,6 +167,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener }); prefs = PreferenceManager.getDefaultSharedPreferences(overviewView.getContext()); + currentScaleUser = OpenScale.getInstance(overviewView.getContext()).getSelectedScaleUser(); updateOnView(OpenScale.getInstance(overviewView.getContext()).getScaleDataList()); @@ -173,14 +186,36 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener row.setVisibility(View.GONE); } - return overviewView; + spinUser.setOnItemSelectedListener(new spinUserSelectionListener()); + + ArrayList userItems = new ArrayList<>(); + + ArrayList 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 spinAdapter = new ArrayAdapter<>(overviewView.getContext(), R.layout.support_simple_spinner_dropdown_item, userItems); + + spinUser.setAdapter(spinAdapter); + spinUser.setSelection(posUser); + + return overviewView; } @Override public void updateOnView(ArrayList scaleDataList) { - currentScaleUser = OpenScale.getInstance(overviewView.getContext()).getSelectedScaleUser(); - if (scaleDataList.isEmpty()) { lastScaleData = null; return; @@ -188,7 +223,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener 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()); txtTitleGoal.setText(getResources().getString(R.string.label_title_goal).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) + "
BMI " + String.format("%.1f", currentScaleUser.getBMI(lastScaleData.weight) - currentScaleUser.getBMI(currentScaleUser.goal_weight)) + " ")); txtLabelDayLeft.setText(Html.fromHtml(getResources().getString(R.string.label_days_left) + "
" + getResources().getString(R.string.label_goal_date_is) + " " + DateFormat.getDateInstance(DateFormat.LONG).format(currentScaleUser.goal_date) + " ")); // currentScaleUser.goal_date - if (scaleDataList.size() > 2) { + if (scaleDataList.size() >= 2) { ScaleData diffScaleData = scaleDataList.get(1); 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 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) { + + } + } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/UserSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/UserSettingsActivity.java index 430d3b21..11753918 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/UserSettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/UserSettingsActivity.java @@ -77,8 +77,6 @@ public class UserSettingsActivity extends Activity { txtBirthday = (EditText) findViewById(R.id.txtBirthday); txtGoalDate = (EditText) findViewById(R.id.txtGoalDate); - btnBirthdaySet = (Button) findViewById(R.id.btnDateSet); - btnGoalDateSet = (Button) findViewById(R.id.btnGoalDateSet); btnDelete = (Button) findViewById(R.id.btnDelete); btnOk = (Button)findViewById(R.id.btnOk); btnCancel = (Button)findViewById(R.id.btnCancel); @@ -86,13 +84,34 @@ public class UserSettingsActivity extends Activity { btnOk.setOnClickListener(new onClickListenerOk()); btnCancel.setOnClickListener(new onClickListenerCancel()); btnDelete.setOnClickListener(new onClickListenerDelete()); - btnBirthdaySet.setOnClickListener(new onClickListenerBirthdaySet()); - btnGoalDateSet.setOnClickListener(new onClickListenerGoalDateSet()); + txtBirthday.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) { 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 { @Override public void onClick(View v) { diff --git a/android_app/app/src/main/res/layout/activity_usersettings.xml b/android_app/app/src/main/res/layout/activity_usersettings.xml index 84a6f377..d1b501e3 100644 --- a/android_app/app/src/main/res/layout/activity_usersettings.xml +++ b/android_app/app/src/main/res/layout/activity_usersettings.xml @@ -158,16 +158,8 @@ android:layout_height="wrap_content" android:layout_weight="5" android:ems="10" - android:enabled="false" android:inputType="date" /> -