From b45f01d3ebd303a1eb4899ed16ed00435e211a95 Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Tue, 16 Jan 2018 23:49:18 +0100 Subject: [PATCH] Introduce an enum for gender --- .../bluetooth/BluetoothBeurerBF700_800.java | 2 +- .../core/bluetooth/BluetoothMiScale2.java | 2 +- .../core/bluetooth/BluetoothSanitasSbf70.java | 2 +- .../core/bodymetric/BFDeurenberg.java | 5 ++-- .../core/database/ScaleUserDatabase.java | 12 +++++----- .../openscale/core/datatypes/ScaleUser.java | 19 ++++++++------- .../openscale/core/utils/Converters.java | 16 +++++++++++-- .../gui/activities/UserSettingsActivity.java | 8 +++---- .../com.health.openscale/ConvertersTest.java | 24 ++++++++++++++----- 9 files changed, 58 insertions(+), 32 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothBeurerBF700_800.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothBeurerBF700_800.java index 023509f6..dbc77f43 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothBeurerBF700_800.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothBeurerBF700_800.java @@ -208,7 +208,7 @@ public class BluetoothBeurerBF700_800 extends BluetoothCommunication { (byte) selectedUser.getBirthday().getMonth(), (byte) selectedUser.getBirthday().getDate(), (byte) selectedUser.getBodyHeight(), - (byte) (((1 - selectedUser.getGender()) << 7) | activity) + (byte) (((selectedUser.isMale() ? 1 : 0) << 7) | activity) }); } else { // Get existing user information diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java index 3bd7d95e..02ca85fb 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java @@ -96,7 +96,7 @@ public class BluetoothMiScale2 extends BluetoothCommunication { case 0: // set scale units final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); - byte[] setUnitCmd = new byte[]{(byte)0x06, (byte)0x04, (byte)0x00, (byte) Converters.toInt(selectedUser.getScaleUnit())}; + byte[] setUnitCmd = new byte[]{(byte)0x06, (byte)0x04, (byte)0x00, (byte) Converters.toWeightUnitInt(selectedUser.getScaleUnit())}; writeBytes(WEIGHT_CUSTOM_SERVICE, WEIGHT_CUSTOM_CONFIG, setUnitCmd); break; case 1: diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSbf70.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSbf70.java index fea47cbe..3d468063 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSbf70.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothSanitasSbf70.java @@ -202,7 +202,7 @@ public class BluetoothSanitasSbf70 extends BluetoothCommunication { (byte) selectedUser.getBirthday().getMonth(), (byte) selectedUser.getBirthday().getDate(), (byte) selectedUser.getBodyHeight(), - (byte) (((1 - selectedUser.getGender()) << 7) | activity) + (byte) (((selectedUser.isMale() ? 1 : 0) << 7) | activity) }); } else { // Get existing user information diff --git a/android_app/app/src/main/java/com/health/openscale/core/bodymetric/BFDeurenberg.java b/android_app/app/src/main/java/com/health/openscale/core/bodymetric/BFDeurenberg.java index c72ae96f..854a1597 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bodymetric/BFDeurenberg.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bodymetric/BFDeurenberg.java @@ -26,10 +26,11 @@ public class BFDeurenberg extends EstimatedFatMetric { @Override public float getFat(ScaleUser user, ScaleMeasurement data) { + final int gender = user.isMale() ? 1 : 0; if (user.getAge(data.getDateTime()) >= 16) { - return (1.2f * data.getBMI(user.getBodyHeight())) + (0.23f*user.getAge(data.getDateTime())) - (10.8f*(1-user.getGender())) - 5.4f; + return (1.2f * data.getBMI(user.getBodyHeight())) + (0.23f*user.getAge(data.getDateTime())) - (10.8f * gender) - 5.4f; } - return (1.294f * data.getBMI(user.getBodyHeight())) + (0.20f*user.getAge(data.getDateTime())) - (11.4f*(1-user.getGender())) - 8.0f; + return (1.294f * data.getBMI(user.getBodyHeight())) + (0.20f*user.getAge(data.getDateTime())) - (11.4f * gender) - 8.0f; } } 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 29cb47a5..78745f3e 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 @@ -112,8 +112,8 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_USER_NAME, scaleUser.getUserName()); values.put(COLUMN_NAME_BIRTHDAY, formatDateTime.format(scaleUser.getBirthday())); values.put(COLUMN_NAME_BODY_HEIGHT, scaleUser.getBodyHeight()); - values.put(COLUMN_NAME_SCALE_UNIT, Converters.toInt(scaleUser.getScaleUnit())); - values.put(COLUMN_NAME_GENDER, scaleUser.getGender()); + values.put(COLUMN_NAME_SCALE_UNIT, Converters.toWeightUnitInt(scaleUser.getScaleUnit())); + values.put(COLUMN_NAME_GENDER, Converters.toGenderInt(scaleUser.getGender())); values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.getInitialWeight()); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.getGoalWeight()); values.put(COLUMN_NAME_GOAL_DATE, formatDateTime.format(scaleUser.getGoalDate())); @@ -145,8 +145,8 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { values.put(COLUMN_NAME_USER_NAME, scaleUser.getUserName()); values.put(COLUMN_NAME_BIRTHDAY, formatDateTime.format(scaleUser.getBirthday())); values.put(COLUMN_NAME_BODY_HEIGHT, scaleUser.getBodyHeight()); - values.put(COLUMN_NAME_SCALE_UNIT, Converters.toInt(scaleUser.getScaleUnit())); - values.put(COLUMN_NAME_GENDER, scaleUser.getGender()); + values.put(COLUMN_NAME_SCALE_UNIT, Converters.toWeightUnitInt(scaleUser.getScaleUnit())); + values.put(COLUMN_NAME_GENDER, Converters.toGenderInt(scaleUser.getGender())); values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.getInitialWeight()); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.getGoalWeight()); values.put(COLUMN_NAME_GOAL_DATE, formatDateTime.format(scaleUser.getGoalDate())); @@ -214,8 +214,8 @@ public class ScaleUserDatabase extends SQLiteOpenHelper { scaleUser.setUserName(cur.getString(cur.getColumnIndexOrThrow(COLUMN_NAME_USER_NAME))); String birthday = cur.getString(cur.getColumnIndexOrThrow(COLUMN_NAME_BIRTHDAY)); scaleUser.setBodyHeight(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_BODY_HEIGHT))); - scaleUser.setScaleUnit(Converters.fromInt(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_SCALE_UNIT)))); - scaleUser.setGender(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_GENDER))); + scaleUser.setScaleUnit(Converters.fromWeightUnitInt(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_SCALE_UNIT)))); + scaleUser.setGender(Converters.fromGenderInt(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)); 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 dc5878a2..94e5e735 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 @@ -42,7 +42,8 @@ public class ScaleUser { @NonNull private Converters.WeightUnit scaleUnit; @ColumnInfo(name = "gender") - private int gender; + @NonNull + private Converters.Gender gender; @ColumnInfo(name = "initialWeight") private float initialWeight; @ColumnInfo(name = "goalWeight") @@ -55,7 +56,7 @@ public class ScaleUser { birthday = new Date(); bodyHeight = -1; scaleUnit = Converters.WeightUnit.KG; - gender = 0; + gender = Converters.Gender.MALE; initialWeight = -1; goalWeight = -1; goalDate = new Date(); @@ -101,11 +102,11 @@ public class ScaleUser { this.scaleUnit = scaleUnit; } - public int getGender() { + public Converters.Gender getGender() { return gender; } - public void setGender(int gender) { + public void setGender(Converters.Gender gender) { this.gender = gender; } @@ -126,9 +127,9 @@ public class ScaleUser { } public boolean isMale() { - if (gender == 0) + if (gender == Converters.Gender.MALE) { return true; - + } return false; } @@ -162,9 +163,9 @@ public class ScaleUser { public String toString() { return String.format( - "ID: %d, NAME: %s, BIRTHDAY: %s, BODY_HEIGHT: %d, SCALE_UNIT: %s, GENDER: %d, " + - "INITIAL_WEIGHT: %.2f, GOAL_WEIGHT: %.2f, GOAL_DATE: %s", + "ID: %d, NAME: %s, BIRTHDAY: %s, BODY_HEIGHT: %d, SCALE_UNIT: %s, " + + "GENDER: %s, INITIAL_WEIGHT: %.2f, GOAL_WEIGHT: %.2f, GOAL_DATE: %s", id, userName, birthday.toString(), bodyHeight, scaleUnit.toString(), - gender, initialWeight, goalWeight, goalDate.toString()); + gender.toString().toLowerCase(), initialWeight, goalWeight, goalDate.toString()); } } diff --git a/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java b/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java index 39f8192a..9ff800e1 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java +++ b/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java @@ -35,6 +35,8 @@ public class Converters { } } + public enum Gender { MALE, FEMALE } + private static float KG_LB = 2.20462f; private static float KG_ST = 0.157473f; @@ -49,7 +51,7 @@ public class Converters { } @TypeConverter - public static WeightUnit fromInt(int unit) { + public static WeightUnit fromWeightUnitInt(int unit) { switch (unit) { case 1: return WeightUnit.LB; @@ -60,7 +62,7 @@ public class Converters { } @TypeConverter - public static int toInt(WeightUnit unit) { + public static int toWeightUnitInt(WeightUnit unit) { switch (unit) { case LB: return 1; @@ -70,6 +72,16 @@ public class Converters { return 0; } + @TypeConverter + public static Gender fromGenderInt(int gender) { + return gender == 0 ? Gender.MALE : Gender.FEMALE; + } + + @TypeConverter + public static int toGenderInt(Gender gender) { + return gender == Gender.MALE ? 0 : 1; + } + public static float toKilogram(float value, WeightUnit unit) { switch (unit) { case LB: 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 7392ea2f..4f0819f9 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 @@ -161,10 +161,10 @@ public class UserSettingsActivity extends Activity { switch (scaleUser.getGender()) { - case 0: + case MALE: radioGender.check(R.id.btnRadioMale); break; - case 1: + case FEMALE: radioGender.check(R.id.btnRadioWoman); break; } @@ -312,8 +312,8 @@ public class UserSettingsActivity extends Activity { scaleUser.setUserName(name); scaleUser.setBirthday(birthday); scaleUser.setBodyHeight(body_height); - scaleUser.setScaleUnit(Converters.fromInt(scale_unit)); - scaleUser.setGender(gender); + scaleUser.setScaleUnit(Converters.fromWeightUnitInt(scale_unit)); + scaleUser.setGender(Converters.fromGenderInt(gender)); scaleUser.setConvertedInitialWeight(initial_weight); scaleUser.setGoalWeight(goal_weight); scaleUser.setGoalDate(goal_date); diff --git a/android_app/app/src/test/java/com.health.openscale/ConvertersTest.java b/android_app/app/src/test/java/com.health.openscale/ConvertersTest.java index 71e6e8cd..50b2265b 100644 --- a/android_app/app/src/test/java/com.health.openscale/ConvertersTest.java +++ b/android_app/app/src/test/java/com.health.openscale/ConvertersTest.java @@ -26,19 +26,31 @@ public class ConvertersTest { @Test public void weightUnitTypeConverters() throws Exception { - assertEquals(0, Converters.toInt(Converters.WeightUnit.KG)); - assertEquals(1, Converters.toInt(Converters.WeightUnit.LB)); - assertEquals(2, Converters.toInt(Converters.WeightUnit.ST)); + assertEquals(0, Converters.toWeightUnitInt(Converters.WeightUnit.KG)); + assertEquals(1, Converters.toWeightUnitInt(Converters.WeightUnit.LB)); + assertEquals(2, Converters.toWeightUnitInt(Converters.WeightUnit.ST)); - assertEquals(Converters.WeightUnit.KG, Converters.fromInt(0)); - assertEquals(Converters.WeightUnit.LB, Converters.fromInt(1)); - assertEquals(Converters.WeightUnit.ST, Converters.fromInt(2)); + assertEquals(Converters.WeightUnit.KG, Converters.fromWeightUnitInt(0)); + assertEquals(Converters.WeightUnit.LB, Converters.fromWeightUnitInt(1)); + assertEquals(Converters.WeightUnit.ST, Converters.fromWeightUnitInt(2)); assertEquals("kg", Converters.WeightUnit.KG.toString()); assertEquals("lb", Converters.WeightUnit.LB.toString()); assertEquals("st", Converters.WeightUnit.ST.toString()); } + @Test + public void genderTypeConverters() throws Exception { + assertEquals(0, Converters.toGenderInt(Converters.Gender.MALE)); + assertEquals(1, Converters.toGenderInt(Converters.Gender.FEMALE)); + + assertEquals(Converters.Gender.MALE, Converters.fromGenderInt(0)); + assertEquals(Converters.Gender.FEMALE, Converters.fromGenderInt(1)); + + assertEquals("MALE", Converters.Gender.MALE.toString()); + assertEquals("FEMALE", Converters.Gender.FEMALE.toString()); + } + @Test public void weightConverters() throws Exception { for (Converters.WeightUnit unit : Converters.WeightUnit.values()) {