From 13f45072fdc97800055ea9e69eb3f62373e863d7 Mon Sep 17 00:00:00 2001 From: OliE Date: Sat, 10 Jun 2017 13:58:50 +0200 Subject: [PATCH] for smart assigning to the correct user if no weight data is available an initial weight field has been added. --- .../com/health/openscale/core/OpenScale.java | 20 ++++++++++++------- .../core/database/ScaleUserDatabase.java | 13 +++++++++++- .../openscale/core/datatypes/ScaleUser.java | 4 +++- .../gui/activities/UserSettingsActivity.java | 14 +++++++++++-- .../main/res/layout/activity_usersettings.xml | 19 ++++++++++++++++++ .../app/src/main/res/values-de/strings.xml | 5 ++++- .../app/src/main/res/values-fr/strings.xml | 1 + .../app/src/main/res/values-ja/strings.xml | 1 + .../app/src/main/res/values/strings.xml | 3 +++ 9 files changed, 68 insertions(+), 12 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 2bef4f07..9c9603cf 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 @@ -90,7 +90,7 @@ public class OpenScale { return instance; } - public void addScaleUser(String name, String birthday, int body_height, int scale_unit, int gender, float goal_weight, String goal_date) + public void addScaleUser(String name, String birthday, int body_height, int scale_unit, int gender, float initial_weight, float goal_weight, String goal_date) { ScaleUser scaleUser = new ScaleUser(); @@ -100,6 +100,7 @@ public class OpenScale { scaleUser.body_height = body_height; scaleUser.scale_unit = scale_unit; scaleUser.gender = gender; + scaleUser.initial_weight = initial_weight; scaleUser.goal_weight = goal_weight; scaleUser.goal_date = new SimpleDateFormat("dd.MM.yyyy").parse(goal_date); @@ -139,7 +140,7 @@ public class OpenScale { scaleUserDB.deleteEntry(id); } - public void updateScaleUser(int id, String name, String birthday, int body_height, int scale_unit, int gender, float goal_weight, String goal_date) + public void updateScaleUser(int id, String name, String birthday, int body_height, int scale_unit, int gender, float initial_weight, float goal_weight, String goal_date) { ScaleUser scaleUser = new ScaleUser(); @@ -150,6 +151,7 @@ public class OpenScale { scaleUser.body_height = body_height; scaleUser.scale_unit = scale_unit; scaleUser.gender = gender; + scaleUser.initial_weight = initial_weight; scaleUser.goal_weight = goal_weight; scaleUser.goal_date = new SimpleDateFormat("dd.MM.yyyy").parse(goal_date); } catch (ParseException e) { @@ -202,12 +204,16 @@ public class OpenScale { for (int i = 0; i < scaleUser.size(); i++) { ArrayList scaleUserData = scaleDB.getScaleDataList(scaleUser.get(i).id); - if (scaleUserData.size() > 0) { - float lastWeight = scaleUserData.get(0).getWeight(); + float lastWeight = 0; - if ((lastWeight - range) <= weight && (lastWeight + range) >= weight) { - inRangeWeights.put(Math.abs(lastWeight - weight), scaleUser.get(i).id); - } + if (scaleUserData.size() > 0) { + lastWeight = scaleUserData.get(0).getWeight(); + } else { + lastWeight = scaleUser.get(i).initial_weight; + } + + if ((lastWeight - range) <= weight && (lastWeight + range) >= weight) { + inRangeWeights.put(Math.abs(lastWeight - weight), scaleUser.get(i).id); } } diff --git a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleUserDatabase.java b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleUserDatabase.java index 4fdec9ac..f7294be2 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleUserDatabase.java +++ b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleUserDatabase.java @@ -32,7 +32,7 @@ import java.util.ArrayList; import java.util.Locale; public class ScaleUserDatabase extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 2; + private static final int DATABASE_VERSION = 3; private static final String DATABASE_NAME = "openScaleUserDatabase.db"; private static final String TABLE_NAME = "scaleuserdata"; @@ -42,6 +42,7 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { private static final String COLUMN_NAME_BODY_HEIGHT = "body_height"; private static final String COLUMN_NAME_SCALE_UNIT = "scale_unit"; private static final String COLUMN_NAME_GENDER = "gender"; + private static final String COLUMN_NAME_INITIAL_WEIGHT = "initial_weight"; private static final String COLUMN_NAME_GOAL_WEIGHT = "goal_weight"; private static final String COLUMN_NAME_GOAL_DATE = "goal_date"; @@ -53,6 +54,7 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { COLUMN_NAME_BODY_HEIGHT + " INTEGER," + COLUMN_NAME_SCALE_UNIT + " INTEGER," + COLUMN_NAME_GENDER + " INTEGER," + + COLUMN_NAME_INITIAL_WEIGHT + " REAL," + COLUMN_NAME_GOAL_WEIGHT + " REAL," + COLUMN_NAME_GOAL_DATE + " TEXT" + ")"; @@ -67,6 +69,7 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { COLUMN_NAME_BODY_HEIGHT, COLUMN_NAME_SCALE_UNIT, COLUMN_NAME_GENDER, + COLUMN_NAME_INITIAL_WEIGHT, COLUMN_NAME_GOAL_WEIGHT, COLUMN_NAME_GOAL_DATE }; @@ -89,6 +92,10 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_GOAL_WEIGHT + " REAL DEFAULT 0"); db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_GOAL_DATE + " TEXT DEFAULT '2014-01-01 00:00'"); } + + if (oldVersion == 2 && newVersion == 3) { + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_NAME_INITIAL_WEIGHT + " REAL DEFAULT 0"); + } } public void clearDatabase() { @@ -106,6 +113,7 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_BODY_HEIGHT, scaleUser.body_height); values.put(COLUMN_NAME_SCALE_UNIT, scaleUser.scale_unit); values.put(COLUMN_NAME_GENDER, scaleUser.gender); + values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.initial_weight); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.goal_weight); values.put(COLUMN_NAME_GOAL_DATE, formatDateTime.format(scaleUser.goal_date)); @@ -138,6 +146,7 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_BODY_HEIGHT, scaleUser.body_height); values.put(COLUMN_NAME_SCALE_UNIT, scaleUser.scale_unit); values.put(COLUMN_NAME_GENDER, scaleUser.gender); + values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.initial_weight); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.goal_weight); values.put(COLUMN_NAME_GOAL_DATE, formatDateTime.format(scaleUser.goal_date)); @@ -206,12 +215,14 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { scaleUser.body_height = cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_BODY_HEIGHT)); scaleUser.scale_unit = cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_SCALE_UNIT)); scaleUser.gender = cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_GENDER)); + double initial_weight = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_INITIAL_WEIGHT)); double goal_weight = cur.getFloat(cur.getColumnIndexOrThrow(COLUMN_NAME_GOAL_WEIGHT)); String goal_date = cur.getString(cur.getColumnIndexOrThrow(COLUMN_NAME_GOAL_DATE)); scaleUser.birthday = formatDateTime.parse(birthday); scaleUser.goal_date = formatDateTime.parse(goal_date); + scaleUser.initial_weight = Math.round(initial_weight * 100.0f) / 100.0f; scaleUser.goal_weight = Math.round(goal_weight * 100.0f) / 100.0f; } catch (ParseException ex) { Log.e("ScaleDatabase", "Can't parse the date time string: " + ex.getMessage()); diff --git a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleUser.java b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleUser.java index 2853509b..a9c1aada 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleUser.java +++ b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleUser.java @@ -27,6 +27,7 @@ public class ScaleUser { public int body_height; public int scale_unit; public int gender; + public float initial_weight; public float goal_weight; public Date goal_date; @@ -37,6 +38,7 @@ public class ScaleUser { body_height = -1; scale_unit = 0; gender = 0; + initial_weight = -1; goal_weight = -1; goal_date = new Date(); } @@ -52,6 +54,6 @@ public class ScaleUser { @Override public String toString() { - return "ID : " + id + " NAME: " + user_name + " BIRTHDAY: " + birthday.toString() + " BODY_HEIGHT: " + body_height + " SCALE_UNIT: " + UNIT_STRING[scale_unit] + " GENDER " + gender + " GOAL WEIGHT " + goal_weight + " GOAL DATE " + goal_date.toString(); + return "ID : " + id + " NAME: " + user_name + " BIRTHDAY: " + birthday.toString() + " BODY_HEIGHT: " + body_height + " SCALE_UNIT: " + UNIT_STRING[scale_unit] + " GENDER " + gender + " INITIAL WEIGHT " + initial_weight + " GOAL WEIGHT " + goal_weight + " GOAL DATE " + goal_date.toString(); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java index d7b94698..26d7a315 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/UserSettingsActivity.java @@ -47,6 +47,7 @@ public class UserSettingsActivity extends Activity { private EditText txtUserName; private EditText txtBodyHeight; private EditText txtBirthday; + private EditText txtInitialWeight; private EditText txtGoalWeight; private EditText txtGoalDate; private RadioGroup radioScaleUnit; @@ -70,6 +71,7 @@ public class UserSettingsActivity extends Activity { txtBodyHeight = (EditText) findViewById(R.id.txtBodyHeight); radioScaleUnit = (RadioGroup) findViewById(R.id.groupScaleUnit); radioGender = (RadioGroup) findViewById(R.id.groupGender); + txtInitialWeight = (EditText) findViewById(R.id.txtInitialWeight); txtGoalWeight = (EditText) findViewById(R.id.txtGoalWeight); txtBirthday = (EditText) findViewById(R.id.txtBirthday); @@ -131,6 +133,7 @@ public class UserSettingsActivity extends Activity { txtBodyHeight.setText(Integer.toString(scaleUser.body_height)); txtBirthday.setText(dateFormat.format(scaleUser.birthday)); txtGoalDate.setText(dateFormat.format(scaleUser.goal_date)); + txtInitialWeight.setText(scaleUser.initial_weight+""); txtGoalWeight.setText(scaleUser.goal_weight+""); switch (scaleUser.scale_unit) @@ -173,6 +176,12 @@ public class UserSettingsActivity extends Activity { validate = false; } + if( txtInitialWeight.getText().toString().length() == 0 ) + { + txtInitialWeight.setError(getResources().getString(R.string.error_initial_weight_required)); + validate = false; + } + if( txtGoalWeight.getText().toString().length() == 0 ) { txtGoalWeight.setError(getResources().getString(R.string.error_goal_weight_required)); @@ -252,6 +261,7 @@ public class UserSettingsActivity extends Activity { int body_height = Integer.valueOf(txtBodyHeight.getText().toString()); int checkedRadioButtonId = radioScaleUnit.getCheckedRadioButtonId(); int checkedGenderId = radioGender.getCheckedRadioButtonId(); + float initial_weight = Float.valueOf(txtInitialWeight.getText().toString()); float goal_weight = Float.valueOf(txtGoalWeight.getText().toString()); int scale_unit = -1; @@ -287,10 +297,10 @@ public class UserSettingsActivity extends Activity { if (getIntent().getExtras().getInt("mode") == EDIT_USER_REQUEST) { id = getIntent().getExtras().getInt("id"); - openScale.updateScaleUser(id, name, date, body_height, scale_unit, gender, goal_weight, goal_date); + openScale.updateScaleUser(id, name, date, body_height, scale_unit, gender, initial_weight, goal_weight, goal_date); } else { - openScale.addScaleUser(name, date, body_height, scale_unit, gender, goal_weight, goal_date); + openScale.addScaleUser(name, date, body_height, scale_unit, gender, initial_weight, goal_weight, goal_date); id = openScale.getScaleUserList().get(openScale.getScaleUserList().size()-1).id; } 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 d1b501e3..964b6a91 100644 --- a/android_app/app/src/main/res/layout/activity_usersettings.xml +++ b/android_app/app/src/main/res/layout/activity_usersettings.xml @@ -162,6 +162,25 @@ + + + + + + + Lösche alle Bluetooth Daten Bluetooth Daten wurden erfolgreich gelöscht Gebe ein optionalen Kommentar ein - Gebe dein Gewicht in deiner Einheit an Gebe dein Namen ein Gebe dein Wert in cm an Gebe dein Wert in % an @@ -127,4 +126,8 @@ Export Ordner nicht gefunden Ignoriere Daten außerhalb des zulässigen Bereiches + Anfangsgewicht + Gebe dein Gewicht in deiner Einheit an + Gebe dein Gewicht in deiner Einheit an + Fehler Anfangsgewicht ist erforderlich \ No newline at end of file diff --git a/android_app/app/src/main/res/values-fr/strings.xml b/android_app/app/src/main/res/values-fr/strings.xml index 86186d47..9b1a801c 100644 --- a/android_app/app/src/main/res/values-fr/strings.xml +++ b/android_app/app/src/main/res/values-fr/strings.xml @@ -136,4 +136,5 @@ Samedi Dimanche Statistiques + Entrez votre objectif de poids dans votre unité d\'échelle diff --git a/android_app/app/src/main/res/values-ja/strings.xml b/android_app/app/src/main/res/values-ja/strings.xml index 76b750df..593b062b 100644 --- a/android_app/app/src/main/res/values-ja/strings.xml +++ b/android_app/app/src/main/res/values-ja/strings.xml @@ -117,4 +117,5 @@ 値が必要です エラー値の範囲 統計 + あなたの体重をあなたの単位で入力してください \ No newline at end of file diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index ebdaee28..a73186b5 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -70,6 +70,7 @@ Error importing Error user name is required Error body height is required + Error initial weight is required Error goal weight is required hip circumference is required @@ -82,6 +83,7 @@ Enter value in % Enter value in Enter an optional comment + Enter your initial weight in your scale unit Enter your goal weight in your scale unit is visible is not visible @@ -146,4 +148,5 @@ Export dir not found Ignore data that are out of range + Initial weight