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 5f90b474..983c98af 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 @@ -39,6 +39,7 @@ import com.health.openscale.core.database.ScaleUserDAO; import com.health.openscale.core.database.ScaleUserDatabase; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.CsvHelper; import com.health.openscale.gui.fragments.FragmentUpdateListener; @@ -217,9 +218,9 @@ public class OpenScale { final java.text.DateFormat timeFormat = DateFormat.getTimeFormat(context); final Date dateTime = scaleMeasurement.getDateTime(); + final Converters.WeightUnit unit = scaleUser.getScaleUnit(); String infoText = String.format(context.getString(R.string.info_new_data_added), - scaleMeasurement.getConvertedWeight(scaleUser.getScaleUnit()), - ScaleUser.UNIT_STRING[scaleUser.getScaleUnit()], + scaleMeasurement.getConvertedWeight(unit), unit.toString(), dateFormat.format(dateTime) + " " + timeFormat.format(dateTime), scaleUser.getUserName()); Toast.makeText(context, infoText, Toast.LENGTH_LONG).show(); 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 29ff9fe8..023509f6 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 @@ -612,21 +612,18 @@ public class BluetoothBeurerBF700_800 extends BluetoothCommunication { byte[] command = SET_UNIT_COMMAND; final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); - switch ((byte) selectedUser.getScaleUnit()) { - case 0: - // Kg + switch (selectedUser.getScaleUnit()) { + case KG: command[2] = (byte) 0x01; break; - case 1: - // Lb + case LB: command[2] = (byte) 0x02; break; - case 2: - // St + case ST: command[3] = (byte) 0x04; break; } - Log.d(TAG, "Setting unit " + ScaleUser.UNIT_STRING[selectedUser.getScaleUnit()]); + Log.d(TAG, "Setting unit " + selectedUser.getScaleUnit().toString()); writeBytes(command); } diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothDigooDGSO38H.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothDigooDGSO38H.java index 8a694a42..bf2d62c8 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothDigooDGSO38H.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothDigooDGSO38H.java @@ -107,19 +107,14 @@ public class BluetoothDigooDGSO38H extends BluetoothCommunication { byte gender = selectedUser.isMale() ? (byte)0x00: (byte)0x01; byte height = (byte) (selectedUser.getBodyHeight() & 0xFF); byte age = (byte)(selectedUser.getAge(new Date()) & 0xff); - byte unit; + byte unit = 0x01; // kg switch (selectedUser.getScaleUnit()) { - case 0: - unit = 0x1; - break; - case 1: + case LB: unit = 0x02; break; - case 2: + case ST: unit = 0x8; break; - default: - unit = 0x1; } byte configBytes[] = new byte[]{(byte)0x09, (byte)0x10, (byte)0x12, (byte)0x11, (byte)0x0d, (byte)0x01, height, age, gender, unit, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}; //Write checksum is sum of all bytes % 256 diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothExcelvanCF369BLE.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothExcelvanCF369BLE.java index d0fbf548..6e6a2218 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothExcelvanCF369BLE.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothExcelvanCF369BLE.java @@ -64,20 +64,15 @@ public class BluetoothExcelvanCF369BLE extends BluetoothCommunication { byte sex = selectedUser.isMale() ? (byte)0x01 : (byte)0x00; // 01 - male; 00 - female byte height = (byte)(selectedUser.getBodyHeight() & 0xff); // cm byte age = (byte)(selectedUser.getAge(new Date()) & 0xff); - byte unit; + byte unit = 0x01; // kg switch (selectedUser.getScaleUnit()) { - case 0: - unit = 0x01; // kg + case LB: + unit = 0x02; break; - case 1: - unit = 0x02; // lb + case ST: + unit = 0x04; break; - case 2: - unit = 0x04; // st - break; - default: - unit = 0x01; // kg } byte xor_checksum = (byte)((byte)(0x01) ^ sex ^ (byte)(0x01) ^ height ^ age ^ unit); 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 54255cf6..3bd7d95e 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 @@ -26,6 +26,7 @@ import android.util.Log; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -95,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) selectedUser.getScaleUnit()}; + byte[] setUnitCmd = new byte[]{(byte)0x06, (byte)0x04, (byte)0x00, (byte) Converters.toInt(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 fb07563d..fea47cbe 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 @@ -607,21 +607,18 @@ public class BluetoothSanitasSbf70 extends BluetoothCommunication { byte[] command = SET_UNIT_COMMAND; final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); - switch ((byte) selectedUser.getScaleUnit()) { - case 0: - // Kg + switch (selectedUser.getScaleUnit()) { + case KG: command[2] = (byte) 0x01; break; - case 1: - // Lb + case LB: command[2] = (byte) 0x02; break; - case 2: - // St + case ST: command[3] = (byte) 0x04; break; } - Log.d(TAG, "Setting unit " + ScaleUser.UNIT_STRING[selectedUser.getScaleUnit()]); + Log.d(TAG, "Setting unit " + selectedUser.getScaleUnit().toString()); writeBytes(command); } diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiMini.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiMini.java index 019edc2f..197d67ec 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiMini.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiMini.java @@ -25,6 +25,7 @@ import android.preference.PreferenceManager; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import java.util.Date; import java.util.Random; @@ -69,7 +70,7 @@ public class BluetoothYunmaiMini extends BluetoothCommunication { final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); byte sex = selectedUser.isMale() ? (byte)0x01 : (byte)0x02; - byte display_unit = selectedUser.getScaleUnit() == 0 ? (byte) 0x01 : (byte) 0x02; + byte display_unit = selectedUser.getScaleUnit() == Converters.WeightUnit.KG ? (byte) 0x01 : (byte) 0x02; byte[] user_add_or_query = new byte[]{(byte)0x0d, (byte)0x12, (byte)0x10, (byte)0x01, (byte)0x00, (byte) 0x00, (byte) ((user_id & 0xFF00) >> 8), (byte) ((user_id & 0xFF) >> 0), (byte)selectedUser.getBodyHeight(), (byte)sex, (byte) selectedUser.getAge(new Date()), (byte) 0x55, (byte) 0x5a, (byte) 0x00, (byte)0x00, (byte) display_unit, (byte) 0x03, (byte) 0x00 }; user_add_or_query[17] = xor_checksum(user_add_or_query); diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE.java index 4a1f5b39..5007ded0 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothYunmaiSE.java @@ -25,6 +25,7 @@ import android.preference.PreferenceManager; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import java.util.Date; import java.util.Random; @@ -69,7 +70,7 @@ public class BluetoothYunmaiSE extends BluetoothCommunication { final ScaleUser selectedUser = OpenScale.getInstance(context).getSelectedScaleUser(); byte sex = selectedUser.isMale() ? (byte)0x01 : (byte)0x02; - byte display_unit = selectedUser.getScaleUnit() == 0 ? (byte) 0x01 : (byte) 0x02; + byte display_unit = selectedUser.getScaleUnit() == Converters.WeightUnit.KG ? (byte) 0x01 : (byte) 0x02; byte[] user_add_or_query = new byte[]{(byte)0x0d, (byte)0x12, (byte)0x10, (byte)0x01, (byte)0x00, (byte) 0x00, (byte) ((user_id & 0xFF00) >> 8), (byte) ((user_id & 0xFF) >> 0), (byte)selectedUser.getBodyHeight(), (byte)sex, (byte) selectedUser.getAge(new Date()), (byte) 0x55, (byte) 0x5a, (byte) 0x00, (byte)0x00, (byte) display_unit, (byte) 0x03, (byte) 0x00 }; user_add_or_query[17] = xor_checksum(user_add_or_query); 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 91d1865d..29cb47a5 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 @@ -25,6 +25,7 @@ import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -111,7 +112,7 @@ 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, scaleUser.getScaleUnit()); + values.put(COLUMN_NAME_SCALE_UNIT, Converters.toInt(scaleUser.getScaleUnit())); values.put(COLUMN_NAME_GENDER, scaleUser.getGender()); values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.getInitialWeight()); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.getGoalWeight()); @@ -144,7 +145,7 @@ 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, scaleUser.getScaleUnit()); + values.put(COLUMN_NAME_SCALE_UNIT, Converters.toInt(scaleUser.getScaleUnit())); values.put(COLUMN_NAME_GENDER, scaleUser.getGender()); values.put(COLUMN_NAME_INITIAL_WEIGHT, scaleUser.getInitialWeight()); values.put(COLUMN_NAME_GOAL_WEIGHT, scaleUser.getGoalWeight()); @@ -213,7 +214,7 @@ 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(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_SCALE_UNIT))); + scaleUser.setScaleUnit(Converters.fromInt(cur.getInt(cur.getColumnIndexOrThrow(COLUMN_NAME_SCALE_UNIT)))); scaleUser.setGender(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)); diff --git a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java index 71ffd600..53a7bf8e 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java +++ b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java @@ -21,14 +21,13 @@ import android.arch.persistence.room.Entity; import android.arch.persistence.room.Index; import android.arch.persistence.room.PrimaryKey; +import com.health.openscale.core.utils.Converters; import com.j256.simplecsv.common.CsvColumn; import java.util.Date; @Entity(tableName = "scaleMeasurements", indices = {@Index(value = {"datetime"}, unique = true)}) public class ScaleMeasurement implements Cloneable { - private static float KG_LB = 2.20462f; - private static float KG_ST = 0.157473f; @PrimaryKey(autoGenerate = true) private int id; @@ -155,40 +154,16 @@ public class ScaleMeasurement implements Cloneable { return weight; } - public float getConvertedWeight(int scale_unit) { - float converted_weight = 0.0f; - - switch (ScaleUser.UNIT_STRING[scale_unit]) { - case "kg": - converted_weight = weight; - break; - case "lb": - converted_weight = weight * KG_LB; - break; - case "st": - converted_weight = weight * KG_ST; - break; - } - - return converted_weight; + public float getConvertedWeight(Converters.WeightUnit unit) { + return Converters.fromKilogram(weight, unit); } public void setWeight(float weight) { this.weight = weight; } - public void setConvertedWeight(float weight, int scale_unit) { - switch (ScaleUser.UNIT_STRING[scale_unit]) { - case "kg": - this.weight = weight; - break; - case "lb": - this.weight = weight / KG_LB; - break; - case "st": - this.weight = weight / KG_ST; - break; - } + public void setConvertedWeight(float weight, Converters.WeightUnit unit) { + this.weight = Converters.toKilogram(weight, unit); } public float getFat() { @@ -283,6 +258,10 @@ public class ScaleMeasurement implements Cloneable { @Override public String toString() { - return "ID : " + id + " USER_ID: " + userId + " DATE_TIME: " + dateTime.toString() + " WEIGHT: " + weight + " FAT: " + fat + " WATER: " + water + " MUSCLE: " + muscle + " LBW: " + lbw + " WAIST: " + waist + " HIP: " + hip + " BONE: " + bone + " COMMENT: " + comment; + return String.format( + "ID: %d, USER_ID: %d, DATE_TIME: %s, WEIGHT: %.2f, FAT: %.2f, WATER: %.2f, " + + "MUSCLE: %.2f, LBW: %.2f, WAIST: %.2f, HIP: %.2f, BONE: %.2f, COMMENT: %s", + id, userId, dateTime.toString(), weight, fat, water, + muscle, lbw, waist, hip, bone, comment); } } 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 1bc89232..dc5878a2 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 @@ -19,7 +19,9 @@ package com.health.openscale.core.datatypes; import android.arch.persistence.room.ColumnInfo; import android.arch.persistence.room.Entity; import android.arch.persistence.room.PrimaryKey; +import android.support.annotation.NonNull; +import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.DateTimeHelpers; import java.util.Calendar; @@ -27,10 +29,6 @@ import java.util.Date; @Entity(tableName = "scaleUsers") public class ScaleUser { - public static final String[] UNIT_STRING = new String[] {"kg", "lb", "st"}; - private static float KG_LB = 2.20462f; - private static float KG_ST = 0.157473f; - @PrimaryKey(autoGenerate = true) private int id; @@ -41,7 +39,8 @@ public class ScaleUser { @ColumnInfo(name = "bodyHeight") private int bodyHeight; @ColumnInfo(name = "scaleUnit") - private int scaleUnit; + @NonNull + private Converters.WeightUnit scaleUnit; @ColumnInfo(name = "gender") private int gender; @ColumnInfo(name = "initialWeight") @@ -55,7 +54,7 @@ public class ScaleUser { userName = new String(); birthday = new Date(); bodyHeight = -1; - scaleUnit = 0; + scaleUnit = Converters.WeightUnit.KG; gender = 0; initialWeight = -1; goalWeight = -1; @@ -94,11 +93,11 @@ public class ScaleUser { this.bodyHeight = bodyHeight; } - public int getScaleUnit() { + public Converters.WeightUnit getScaleUnit() { return scaleUnit; } - public void setScaleUnit(int scaleUnit) { + public void setScaleUnit(Converters.WeightUnit scaleUnit) { this.scaleUnit = scaleUnit; } @@ -148,17 +147,7 @@ public class ScaleUser { } public void setConvertedInitialWeight(float weight) { - switch (ScaleUser.UNIT_STRING[scaleUnit]) { - case "kg": - this.initialWeight = weight; - break; - case "lb": - this.initialWeight = weight / KG_LB; - break; - case "st": - this.initialWeight = weight / KG_ST; - break; - } + initialWeight = Converters.toKilogram(weight, scaleUnit); } public float getInitialWeight() { @@ -166,26 +155,16 @@ public class ScaleUser { } public float getConvertedInitialWeight() { - float converted_weight = 0.0f; - - switch (ScaleUser.UNIT_STRING[scaleUnit]) { - case "kg": - converted_weight = initialWeight; - break; - case "lb": - converted_weight = initialWeight * KG_LB; - break; - case "st": - converted_weight = initialWeight * KG_ST; - break; - } - - return converted_weight; + return Converters.fromKilogram(initialWeight, scaleUnit); } @Override public String toString() { - return "ID : " + id + " NAME: " + userName + " BIRTHDAY: " + birthday.toString() + " BODY_HEIGHT: " + bodyHeight + " SCALE_UNIT: " + UNIT_STRING[scaleUnit] + " GENDER " + gender + " INITIAL WEIGHT " + initialWeight + " GOAL WEIGHT " + goalWeight + " GOAL DATE " + goalDate.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, userName, birthday.toString(), bodyHeight, scaleUnit.toString(), + gender, 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 6e95ebc7..39f8192a 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 @@ -21,6 +21,23 @@ import android.arch.persistence.room.TypeConverter; import java.util.Date; public class Converters { + public enum WeightUnit { + KG, LB, ST; + + public String toString() { + switch (this) { + case LB: + return "lb"; + case ST: + return "st"; + } + return "kg"; + } + } + + private static float KG_LB = 2.20462f; + private static float KG_ST = 0.157473f; + @TypeConverter public static Date fromTimestamp(Long value) { return value == null ? null : new Date(value); @@ -30,4 +47,46 @@ public class Converters { public static Long dateToTimestamp(Date date) { return date == null ? null : date.getTime(); } + + @TypeConverter + public static WeightUnit fromInt(int unit) { + switch (unit) { + case 1: + return WeightUnit.LB; + case 2: + return WeightUnit.ST; + } + return WeightUnit.KG; + } + + @TypeConverter + public static int toInt(WeightUnit unit) { + switch (unit) { + case LB: + return 1; + case ST: + return 2; + } + return 0; + } + + public static float toKilogram(float value, WeightUnit unit) { + switch (unit) { + case LB: + return value / KG_LB; + case ST: + return value / KG_ST; + } + return value; + } + + public static float fromKilogram(float kg, WeightUnit unit) { + switch (unit) { + case LB: + return kg * KG_LB; + case ST: + return kg * KG_ST; + } + return kg; + } } 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 018523c9..7392ea2f 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 @@ -34,6 +34,7 @@ import android.widget.Toast; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import java.text.DateFormat; import java.util.Calendar; @@ -147,13 +148,13 @@ public class UserSettingsActivity extends Activity { switch (scaleUser.getScaleUnit()) { - case 0: + case KG: radioScaleUnit.check(R.id.btnRadioKG); break; - case 1: + case LB: radioScaleUnit.check(R.id.btnRadioLB); break; - case 2: + case ST: radioScaleUnit.check(R.id.btnRadioST); break; } @@ -311,7 +312,7 @@ public class UserSettingsActivity extends Activity { scaleUser.setUserName(name); scaleUser.setBirthday(birthday); scaleUser.setBodyHeight(body_height); - scaleUser.setScaleUnit(scale_unit); + scaleUser.setScaleUnit(Converters.fromInt(scale_unit)); scaleUser.setGender(gender); scaleUser.setConvertedInitialWeight(initial_weight); scaleUser.setGoalWeight(goal_weight); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java index f470acd3..5acb9111 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/OverviewFragment.java @@ -37,6 +37,7 @@ import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.DateTimeHelpers; import com.health.openscale.gui.activities.DataEntryActivity; import com.health.openscale.gui.views.BMIMeasurementView; @@ -398,10 +399,11 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener arcValuesLast.add(new SliceValue(lastScaleMeasurement.getMuscle(), ChartUtils.COLOR_GREEN)); } + final Converters.WeightUnit unit = currentScaleUser.getScaleUnit(); PieChartData pieChartData = new PieChartData(arcValuesLast); pieChartData.setHasLabels(false); pieChartData.setHasCenterCircle(true); - pieChartData.setCenterText1(String.format("%.2f %s", lastScaleMeasurement.getConvertedWeight(currentScaleUser.getScaleUnit()), ScaleUser.UNIT_STRING[currentScaleUser.getScaleUnit()])); + pieChartData.setCenterText1(String.format("%.2f %s", lastScaleMeasurement.getConvertedWeight(unit), unit.toString())); pieChartData.setCenterText2(DateFormat.getDateInstance(DateFormat.MEDIUM).format(lastScaleMeasurement.getDateTime())); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java index c7f8d8f9..c65f1154 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/StatisticsFragment.java @@ -31,6 +31,7 @@ import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; import com.health.openscale.core.datatypes.ScaleUser; +import com.health.openscale.core.utils.Converters; import com.health.openscale.core.utils.DateTimeHelpers; import com.health.openscale.gui.views.BoneMeasurementView; import com.health.openscale.gui.views.FatMeasurementView; @@ -169,10 +170,11 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen ScaleMeasurement goalScaleMeasurement = new ScaleMeasurement(); goalScaleMeasurement.setConvertedWeight(currentScaleUser.getGoalWeight(), currentScaleUser.getScaleUnit()); - txtGoalWeight.setText(goalScaleMeasurement.getConvertedWeight(currentScaleUser.getScaleUnit()) + " " + ScaleUser.UNIT_STRING[currentScaleUser.getScaleUnit()]); + final Converters.WeightUnit unit = currentScaleUser.getScaleUnit(); + txtGoalWeight.setText(goalScaleMeasurement.getConvertedWeight(unit) + " " + unit.toString()); - double weight_diff = goalScaleMeasurement.getConvertedWeight(currentScaleUser.getScaleUnit()) - lastScaleMeasurement.getConvertedWeight(currentScaleUser.getScaleUnit()); - txtGoalDiff.setText(String.format("%.1f " + ScaleUser.UNIT_STRING[currentScaleUser.getScaleUnit()], weight_diff)); + double weight_diff = goalScaleMeasurement.getConvertedWeight(unit) - lastScaleMeasurement.getConvertedWeight(unit); + txtGoalDiff.setText(String.format("%.1f %s", weight_diff, unit.toString())); Calendar goalCalendar = Calendar.getInstance(); goalCalendar.setTime(currentScaleUser.getGoalDate()); @@ -182,7 +184,7 @@ public class StatisticsFragment extends Fragment implements FragmentUpdateListen lastScaleMeasurement.setUserId(currentScaleUser.getId()); ScaleMeasurement goalData = new ScaleMeasurement(); - goalData.setConvertedWeight(currentScaleUser.getGoalWeight(), currentScaleUser.getScaleUnit()); + goalData.setConvertedWeight(currentScaleUser.getGoalWeight(), unit); goalData.setUserId(currentScaleUser.getId()); txtLabelGoalWeight.setText( 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 89f8e130..db55bb9a 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 @@ -65,7 +65,7 @@ public class FatMeasurementView extends FloatMeasurementView { return "%"; } - return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; + return getScaleUser().getScaleUnit().toString(); } @Override 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 594e3f29..1be9e69b 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 @@ -63,7 +63,7 @@ public class MuscleMeasurementView extends FloatMeasurementView { return "%"; } - return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; + return getScaleUser().getScaleUnit().toString(); } @Override 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 1c15e6f5..4260fde2 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 @@ -65,7 +65,7 @@ public class WaterMeasurementView extends FloatMeasurementView { return "%"; } - return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; + return getScaleUser().getScaleUnit().toString(); } @Override 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 18b1bd49..9975b972 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 @@ -48,7 +48,7 @@ public class WeightMeasurementView extends FloatMeasurementView { @Override protected String getUnit() { - return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()]; + return getScaleUser().getScaleUnit().toString(); } @Override 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 new file mode 100644 index 00000000..71e6e8cd --- /dev/null +++ b/android_app/app/src/test/java/com.health.openscale/ConvertersTest.java @@ -0,0 +1,49 @@ +/* Copyright (C) 2018 Erik Johansson +* +* 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; + +import com.health.openscale.core.utils.Converters; + +import org.junit.Test; + +import static junit.framework.Assert.assertEquals; + +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(Converters.WeightUnit.KG, Converters.fromInt(0)); + assertEquals(Converters.WeightUnit.LB, Converters.fromInt(1)); + assertEquals(Converters.WeightUnit.ST, Converters.fromInt(2)); + + assertEquals("kg", Converters.WeightUnit.KG.toString()); + assertEquals("lb", Converters.WeightUnit.LB.toString()); + assertEquals("st", Converters.WeightUnit.ST.toString()); + } + + @Test + public void weightConverters() throws Exception { + for (Converters.WeightUnit unit : Converters.WeightUnit.values()) { + assertEquals(10.0f, + Converters.toKilogram(Converters.fromKilogram(10.0f, unit), unit)); + } + } +}