From a3b9cfa0c0693cf2272e438accc90b936a57365c Mon Sep 17 00:00:00 2001 From: OliE Date: Tue, 27 Dec 2016 15:56:39 +0100 Subject: [PATCH] add an option to automatically assign the weight data to the associated user depending on the weight verify that Bluetooth is supported on the device, and if so, ensure that it is enabled set waist and hip default value to false set default values of weight data to zero --- android_app/app/src/main/AndroidManifest.xml | 4 +- .../com/health/openscale/core/OpenScale.java | 48 +++++++++++++++++-- .../com/health/openscale/core/ScaleData.java | 12 ++--- .../openscale/gui/DataEntryActivity.java | 8 ++-- .../health/openscale/gui/MainActivity.java | 34 ++++++------- .../openscale/gui/OverviewFragment.java | 10 ++-- .../app/src/main/res/values-de/strings.xml | 3 +- .../app/src/main/res/values-ja/strings.xml | 1 + .../app/src/main/res/values/strings.xml | 3 +- .../app/src/main/res/xml/preferences.xml | 2 +- 10 files changed, 83 insertions(+), 42 deletions(-) diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml index 2405dc72..4a721b13 100644 --- a/android_app/app/src/main/AndroidManifest.xml +++ b/android_app/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="10" + android:versionName="1.4.2" > 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 f8f17390..0340d085 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 @@ -35,6 +35,8 @@ import java.io.OutputStreamWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Map; +import java.util.TreeMap; import static com.health.openscale.core.BluetoothCommunication.BT_MI_SCALE; import static com.health.openscale.core.BluetoothCommunication.BT_OPEN_SCALE; @@ -154,15 +156,29 @@ public class OpenScale { return scaleDB.getDataEntry(id); } - public void addScaleData(ScaleData scaleData) { - addScaleData(scaleData.user_id, dateTimeFormat.format(scaleData.date_time).toString(), scaleData.weight, scaleData.fat, + public int addScaleData(ScaleData scaleData) { + return addScaleData(scaleData.user_id, dateTimeFormat.format(scaleData.date_time).toString(), scaleData.weight, scaleData.fat, scaleData.water, scaleData.muscle, scaleData.waist, scaleData.hip, scaleData.comment); } - public void addScaleData(int user_id, String date_time, float weight, float fat, + public int addScaleData(int user_id, String date_time, float weight, float fat, float water, float muscle, float waist, float hip, String comment) { ScaleData scaleData = new ScaleData(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + if (user_id == -1) { + if (prefs.getBoolean("smartUserAssign", false)) { + user_id = getSmartUserAssignment(weight, 15.0f); + } else { + user_id = getSelectedScaleUser().id; + } + + if (user_id == -1) { + return -1; + } + } + try { scaleData.user_id = user_id; scaleData.date_time = dateTimeFormat.parse(date_time); @@ -180,8 +196,34 @@ public class OpenScale { if (scaleDB.insertEntry(scaleData)) { updateScaleData(); } + + return user_id; } + private int getSmartUserAssignment(float weight, float range) { + ArrayList scaleUser = getScaleUserList(); + Map inRangeWeights = new TreeMap<>(); + + 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).weight; + + if ((lastWeight - range) <= weight && (lastWeight + range) >= weight) { + inRangeWeights.put(Math.abs(lastWeight - weight), scaleUser.get(i).id); + } + } + } + + if (inRangeWeights.size() > 0) { + // return the user id which is nearest to the weight (first element of the tree map) + return inRangeWeights.entrySet().iterator().next().getValue(); + } + + return getSelectedScaleUser().id; + } + public void updateScaleData(long id, String date_time, float weight, float fat, float water, float muscle, float waist, float hip, String comment) { ScaleData scaleData = new ScaleData(); 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 086f9e68..e3f1e96a 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 @@ -35,12 +35,12 @@ public class ScaleData { id = -1; user_id = -1; date_time = new Date(); - weight = -1.0f; - fat = -1.0f; - water = -1.0f; - muscle = -1.0f; - waist = -1.0f; - hip = -1.0f; + weight = 0.0f; + fat = 0.0f; + water = 0.0f; + muscle = 0.0f; + waist = 0.0f; + hip = 0.0f; comment = new String(); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java index 63a1e4bc..cdf72601 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/DataEntryActivity.java @@ -135,12 +135,12 @@ public class DataEntryActivity extends Activity { row.setVisibility(View.GONE); } - if(!prefs.getBoolean("waistEnable", true)) { + if(!prefs.getBoolean("waistEnable", false)) { TableRow row = (TableRow)findViewById(R.id.tableRowWaist); row.setVisibility(View.GONE); } - if(!prefs.getBoolean("hipEnable", true)) { + if(!prefs.getBoolean("hipEnable", false)) { TableRow row = (TableRow)findViewById(R.id.tableRowHip); row.setVisibility(View.GONE); } @@ -258,7 +258,7 @@ public class DataEntryActivity extends Activity { } } - if (prefs.getBoolean("waistEnable", true)) { + if (prefs.getBoolean("waistEnable", false)) { if (txtWaist.getText().toString().length() == 0) { txtWaist.setError(getResources().getString(R.string.error_waist_value_required)); validate = false; @@ -268,7 +268,7 @@ public class DataEntryActivity extends Activity { } } - if (prefs.getBoolean("hipEnable", true)) { + if (prefs.getBoolean("hipEnable", false)) { if (txtHip.getText().toString().length() == 0) { txtHip.setError(getResources().getString(R.string.error_hip_value_required)); validate = false; diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 977f1f0c..f5442e44 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -17,6 +17,8 @@ package com.health.openscale.gui; import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothManager; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; @@ -143,9 +145,6 @@ public class MainActivity extends ActionBarActivity implements @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_general_settings) { @@ -155,16 +154,7 @@ public class MainActivity extends ActionBarActivity implements } if (id == R.id.action_bluetooth_status) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - - if (BluetoothAdapter.getDefaultAdapter().isEnabled()) { - String deviceName = prefs.getString("btDeviceName", "MI_SCALE"); - Toast.makeText(getApplicationContext(), getResources().getString(R.string.info_bluetooth_try_connection) + " " + deviceName, Toast.LENGTH_SHORT).show(); - invokeSearchBluetoothDevice(); - } else { - setBluetoothStatusIcon(R.drawable.bluetooth_disabled); - Toast.makeText(getApplicationContext(), "Bluetooth " + getResources().getString(R.string.info_is_not_enable), Toast.LENGTH_SHORT).show(); - } + invokeSearchBluetoothDevice(); return true; } @@ -172,7 +162,15 @@ public class MainActivity extends ActionBarActivity implements } private void invokeSearchBluetoothDevice() { - if (!BluetoothAdapter.getDefaultAdapter().isEnabled()) { + final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); + BluetoothAdapter btAdapter = bluetoothManager.getAdapter(); + + if (btAdapter == null || !btAdapter.isEnabled()) { + setBluetoothStatusIcon(R.drawable.bluetooth_disabled); + Toast.makeText(getApplicationContext(), "Bluetooth " + getResources().getString(R.string.info_is_not_enable), Toast.LENGTH_SHORT).show(); + + Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); + startActivityForResult(enableBtIntent, 1); return; } @@ -190,6 +188,7 @@ public class MainActivity extends ActionBarActivity implements } } + Toast.makeText(getApplicationContext(), getResources().getString(R.string.info_bluetooth_try_connection) + " " + deviceName, Toast.LENGTH_SHORT).show(); setBluetoothStatusIcon(R.drawable.bluetooth_searching); OpenScale.getInstance(getApplicationContext()).stopSearchingForBluetooth(); @@ -205,12 +204,9 @@ public class MainActivity extends ActionBarActivity implements setBluetoothStatusIcon(R.drawable.bluetooth_connection_success); ScaleData scaleBtData = (ScaleData) msg.obj; - // if no user id is set, use the current user id - if (scaleBtData.user_id == -1) { - scaleBtData.user_id = OpenScale.getInstance(getApplicationContext()).getSelectedScaleUser().id; + if (OpenScale.getInstance(getApplicationContext()).addScaleData(scaleBtData) == -1) { + Toast.makeText(getApplicationContext(), getResources().getString(R.string.info_no_selected_user) + "(" + getResources().getString(R.string.label_weight) + ": " + scaleBtData.weight + ")", Toast.LENGTH_SHORT).show(); } - - OpenScale.getInstance(getApplicationContext()).addScaleData(scaleBtData); break; case BluetoothCommunication.BT_INIT_PROCESS: setBluetoothStatusIcon(R.drawable.bluetooth_connection_success); 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 e1394b0e..25904503 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 @@ -481,7 +481,7 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener lines++; } - if(prefs.getBoolean("waistEnable", true)) { + if(prefs.getBoolean("waistEnable", false)) { info_week += String.format("Ø-"+getResources().getString(R.string.label_waist)+": %.1fcm
", weekAvgWaist); info_month += String.format("Ø-"+getResources().getString(R.string.label_waist)+": %.1fcm
", monthAvgWaist); lines++; @@ -491,13 +491,13 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener lines++; } - if(prefs.getBoolean("hipEnable", true)) { + if(prefs.getBoolean("hipEnable", false)) { info_week += String.format("Ø-"+getResources().getString(R.string.label_hip)+": %.1fcm
", weekAvgHip); info_month += String.format("Ø-"+getResources().getString(R.string.label_hip)+": %.1fcm
",monthAvgHip); lines++; } - if(prefs.getBoolean("hipEnable", true) && prefs.getBoolean("waistEnable", true)) { + if(prefs.getBoolean("hipEnable", false) && prefs.getBoolean("waistEnable", false)) { info_week += String.format("Ø-"+getResources().getString(R.string.label_whr)+": %.2f
", weekAvgWHR); info_month += String.format("Ø-"+getResources().getString(R.string.label_whr)+": %.2f
", monthAvgWHR); lines++; @@ -603,11 +603,11 @@ public class OverviewFragment extends Fragment implements FragmentUpdateListener lines.add(lineMuscle); } - if(prefs.getBoolean("waistEnable", true)) { + if(prefs.getBoolean("waistEnable", false)) { lines.add(lineWaist); } - if(prefs.getBoolean("hipEnable", true)) { + if(prefs.getBoolean("hipEnable", false)) { lines.add(lineHip); } diff --git a/android_app/app/src/main/res/values-de/strings.xml b/android_app/app/src/main/res/values-de/strings.xml index 17a78c42..b6c12f8c 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -29,7 +29,7 @@ ist nicht sichtbar ist sichtbar ist nicht verfügbar - Kein Benutzer existiert! Bitte lege einen neuen Benutzer unter Einstellungen an + Kein Benutzer vorhanden. Bitte erzeugen Sie ein neuen Benutzer unter Einstellungen. am Setzte Dateiname auf Dein Körperfett war @@ -104,4 +104,5 @@ Versuche Verbindung herzustellen zu Gerätetyp Initializiere Bluetooth Gerät + Intelligente Benutzer Zuweisung \ No newline at end of file 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 3faebbcf..63089b1c 100644 --- a/android_app/app/src/main/res/values-ja/strings.xml +++ b/android_app/app/src/main/res/values-ja/strings.xml @@ -104,4 +104,5 @@ 接続に成功しました デバイスタイプ Bluetooth接続を初期化する + スマートユーザーのアサイン \ 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 b2199234..b974de7d 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -30,6 +30,7 @@ Comment Waist-to-height ratio Waist-hip ratio + Smart User assignment days measures @@ -100,7 +101,7 @@ Bluetooth has an unexpected error Enter your name - No user exist! Please create a new user in the settings + No user exists. Please create a new user in the settings. Can\'t evaluate the value Do you really want to delete all database entries? diff --git a/android_app/app/src/main/res/xml/preferences.xml b/android_app/app/src/main/res/xml/preferences.xml index 2c8fc00c..c49dc5d8 100644 --- a/android_app/app/src/main/res/xml/preferences.xml +++ b/android_app/app/src/main/res/xml/preferences.xml @@ -8,6 +8,7 @@ + @@ -15,7 +16,6 @@ -