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 @@ -