mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-24 09:13:04 +02:00
refactored file structure and alarm handling.
This commit is contained in:
@@ -24,12 +24,12 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".gui.SettingsActivity"/>
|
||||
<activity android:name=".gui.DataEntryActivity" android:theme="@android:style/Theme.Holo.Light.Dialog"/>
|
||||
<activity android:name=".gui.UserSettingsActivity" android:theme="@android:style/Theme.Holo.Dialog"
|
||||
<activity android:name=".gui.activities.SettingsActivity"/>
|
||||
<activity android:name=".gui.activities.DataEntryActivity" android:theme="@android:style/Theme.Holo.Light.Dialog"/>
|
||||
<activity android:name=".gui.activities.UserSettingsActivity" android:theme="@android:style/Theme.Holo.Dialog"
|
||||
android:label="@string/label_title_user"/>
|
||||
|
||||
<receiver android:name=".gui.ReminderBootReceiver" android:enabled="false">
|
||||
<receiver android:name=".core.alarm.ReminderBootReceiver" android:enabled="false">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
</intent-filter>
|
||||
|
@@ -1,8 +0,0 @@
|
||||
package com.health.openscale.core;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public interface IScaleDatabaseEntryListener
|
||||
{
|
||||
void entryChanged(Context context, ScaleData data);
|
||||
}
|
@@ -23,8 +23,15 @@ import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.alarm.AlarmDatabaseEntryListener;
|
||||
import com.health.openscale.gui.FragmentUpdateListener;
|
||||
import com.health.openscale.core.alarm.AlarmHandler;
|
||||
import com.health.openscale.core.bluetooth.BluetoothCommunication;
|
||||
import com.health.openscale.core.bluetooth.BluetoothCustomOpenScale;
|
||||
import com.health.openscale.core.bluetooth.BluetoothMiScale;
|
||||
import com.health.openscale.core.database.ScaleDatabase;
|
||||
import com.health.openscale.core.database.ScaleUserDatabase;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
import com.health.openscale.gui.fragments.FragmentUpdateListener;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
@@ -39,8 +46,8 @@ 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;
|
||||
import static com.health.openscale.core.bluetooth.BluetoothCommunication.BT_MI_SCALE;
|
||||
import static com.health.openscale.core.bluetooth.BluetoothCommunication.BT_OPEN_SCALE;
|
||||
|
||||
public class OpenScale {
|
||||
|
||||
@@ -52,6 +59,7 @@ public class OpenScale {
|
||||
|
||||
private BluetoothCommunication btCom;
|
||||
private String btDeviceName;
|
||||
private AlarmHandler alarmHandler;
|
||||
|
||||
private SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
|
||||
|
||||
@@ -62,8 +70,8 @@ public class OpenScale {
|
||||
private OpenScale(Context con) {
|
||||
context = con;
|
||||
scaleDB = new ScaleDatabase(context);
|
||||
scaleDB.addEntryListener(new AlarmDatabaseEntryListener());
|
||||
scaleUserDB = new ScaleUserDatabase(context);
|
||||
alarmHandler = new AlarmHandler();
|
||||
btCom = null;
|
||||
fragmentList = new ArrayList<>();
|
||||
|
||||
@@ -196,6 +204,7 @@ public class OpenScale {
|
||||
}
|
||||
|
||||
if (scaleDB.insertEntry(scaleData)) {
|
||||
alarmHandler.entryChanged(context, scaleData);
|
||||
updateScaleData();
|
||||
}
|
||||
|
||||
@@ -243,6 +252,7 @@ public class OpenScale {
|
||||
}
|
||||
|
||||
scaleDB.updateEntry(id, scaleData);
|
||||
alarmHandler.entryChanged(context, scaleData);
|
||||
|
||||
updateScaleData();
|
||||
}
|
||||
|
@@ -1,16 +0,0 @@
|
||||
package com.health.openscale.core;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class Util
|
||||
{
|
||||
public static boolean isSameDate(Calendar c1, Calendar c2)
|
||||
{
|
||||
int[] dateFields = {Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH};
|
||||
for (int dateField : dateFields)
|
||||
{
|
||||
if (c1.get(dateField) != c2.get(dateField)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
package com.health.openscale.core.alarm;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.health.openscale.core.IScaleDatabaseEntryListener;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.Util;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class AlarmDatabaseEntryListener implements IScaleDatabaseEntryListener
|
||||
{
|
||||
@Override
|
||||
public void entryChanged(Context context, ScaleData data)
|
||||
{
|
||||
long dataMillis = data.date_time.getTime();
|
||||
|
||||
Calendar dataTimestamp = Calendar.getInstance();
|
||||
dataTimestamp.setTimeInMillis(dataMillis);
|
||||
|
||||
if(Util.isSameDate(dataTimestamp, Calendar.getInstance()))
|
||||
{
|
||||
AlarmHandler alarmHandler = new AlarmHandler();
|
||||
alarmHandler.cancelAlarmNotification(context);
|
||||
alarmHandler.cancelAndRescheduleAlarmForNextWeek( context, dataTimestamp );
|
||||
}
|
||||
}
|
||||
}
|
@@ -12,9 +12,8 @@ import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.Util;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.gui.MainActivity;
|
||||
import com.health.openscale.gui.ReminderBootReceiver;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.LinkedList;
|
||||
@@ -38,6 +37,30 @@ public class AlarmHandler
|
||||
enableAlarms(context, alarmEntries);
|
||||
}
|
||||
|
||||
public void entryChanged(Context context, ScaleData data)
|
||||
{
|
||||
long dataMillis = data.date_time.getTime();
|
||||
|
||||
Calendar dataTimestamp = Calendar.getInstance();
|
||||
dataTimestamp.setTimeInMillis(dataMillis);
|
||||
|
||||
if(AlarmHandler.isSameDate(dataTimestamp, Calendar.getInstance()))
|
||||
{
|
||||
cancelAlarmNotification(context);
|
||||
cancelAndRescheduleAlarmForNextWeek( context, dataTimestamp );
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isSameDate(Calendar c1, Calendar c2)
|
||||
{
|
||||
int[] dateFields = {Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH};
|
||||
for (int dateField : dateFields)
|
||||
{
|
||||
if (c1.get(dateField) != c2.get(dateField)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void enableAlarms(Context context, Set<AlarmEntry> alarmEntries)
|
||||
{
|
||||
for (AlarmEntry alarmEntry : alarmEntries)
|
||||
@@ -96,7 +119,7 @@ public class AlarmHandler
|
||||
{
|
||||
Calendar nextAlarmTimestamp = entry.getNextTimestamp();
|
||||
|
||||
if (Util.isSameDate(timestamp, nextAlarmTimestamp))
|
||||
if (isSameDate(timestamp, nextAlarmTimestamp))
|
||||
{
|
||||
int dayOfWeek = entry.getDayOfWeek();
|
||||
PendingIntent alarmPendingIntent = getPendingAlarmIntent(context, dayOfWeek);
|
||||
|
@@ -14,14 +14,12 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.core.alarm;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import com.health.openscale.core.alarm.AlarmHandler;
|
||||
|
||||
public class ReminderBootReceiver extends BroadcastReceiver
|
||||
{
|
||||
@Override
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.bluetooth;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.os.Handler;
|
||||
@@ -42,7 +42,7 @@ public abstract class BluetoothCommunication {
|
||||
callbackBtHandler = cbBtHandler;
|
||||
}
|
||||
|
||||
abstract void startSearching(String deviceName);
|
||||
abstract void stopSearching();
|
||||
abstract public void startSearching(String deviceName);
|
||||
abstract public void stopSearching();
|
||||
}
|
||||
|
@@ -13,12 +13,14 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.bluetooth;
|
||||
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothSocket;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
@@ -27,7 +29,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
class BluetoothCustomOpenScale extends BluetoothCommunication {
|
||||
public class BluetoothCustomOpenScale extends BluetoothCommunication {
|
||||
private final UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); // Standard SerialPortService ID
|
||||
|
||||
private BluetoothSocket btSocket = null;
|
||||
@@ -36,7 +38,7 @@ class BluetoothCustomOpenScale extends BluetoothCommunication {
|
||||
private BluetoothConnectedThread btConnectThread = null;
|
||||
|
||||
@Override
|
||||
void startSearching(String deviceName) {
|
||||
public void startSearching(String deviceName) {
|
||||
|
||||
if (btAdapter == null) {
|
||||
callbackBtHandler.obtainMessage(BluetoothCommunication.BT_NO_DEVICE_FOUND).sendToTarget();
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.bluetooth;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
@@ -27,6 +27,8 @@ import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
@@ -59,7 +61,7 @@ public class BluetoothMiScale extends BluetoothCommunication {
|
||||
}
|
||||
|
||||
@Override
|
||||
void startSearching(String deviceName) {
|
||||
public void startSearching(String deviceName) {
|
||||
btDeviceName = deviceName;
|
||||
|
||||
if (scanCallback == null)
|
||||
@@ -103,7 +105,7 @@ public class BluetoothMiScale extends BluetoothCommunication {
|
||||
}
|
||||
|
||||
@Override
|
||||
void stopSearching() {
|
||||
public void stopSearching() {
|
||||
if (bluetoothGatt != null)
|
||||
{
|
||||
bluetoothGatt.close();
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.database;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
@@ -24,12 +24,12 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
@@ -87,13 +87,8 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
|
||||
private SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
|
||||
|
||||
private Context context;
|
||||
private List<IScaleDatabaseEntryListener> entryListeners;
|
||||
|
||||
public ScaleDatabase(Context context) {
|
||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
this.context = context;
|
||||
entryListeners = new LinkedList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -147,7 +142,6 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
try
|
||||
{
|
||||
db.insertOrThrow(TABLE_NAME, null, values);
|
||||
notifyEntryListeners(scaleData);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
@@ -175,7 +169,6 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
values.put(COLUMN_NAME_ENABLE, 1);
|
||||
|
||||
dbWrite.update(TABLE_NAME, values, COLUMN_NAME_ID + "=" + id, null);
|
||||
notifyEntryListeners(scaleData);
|
||||
}
|
||||
|
||||
public ScaleData getDataEntry(long id)
|
||||
@@ -328,20 +321,4 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
|
||||
return scaleData;
|
||||
}
|
||||
|
||||
public void addEntryListener(IScaleDatabaseEntryListener listener)
|
||||
{
|
||||
if (!entryListeners.contains(listener)) entryListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeEntryListener( IScaleDatabaseEntryListener listener)
|
||||
{
|
||||
entryListeners.remove(listener);
|
||||
}
|
||||
|
||||
private void notifyEntryListeners(ScaleData data)
|
||||
{
|
||||
for (IScaleDatabaseEntryListener listener : entryListeners)
|
||||
listener.entryChanged(context, data);
|
||||
}
|
||||
}
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.database;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
@@ -24,6 +24,8 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
@@ -1,4 +1,4 @@
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.datatypes;
|
||||
|
||||
public class ScaleCalculator {
|
||||
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.datatypes;
|
||||
|
||||
import java.util.Date;
|
||||
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.datatypes;
|
||||
|
||||
import java.util.Date;
|
||||
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.evaluation;
|
||||
|
||||
public class EvaluationResult {
|
||||
public static enum EVAL_STATE {LOW, NORMAL, HIGH, UNDEFINED};
|
@@ -13,10 +13,12 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.core;
|
||||
package com.health.openscale.core.evaluation;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
@@ -39,9 +39,14 @@ import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.BluetoothCommunication;
|
||||
import com.health.openscale.core.bluetooth.BluetoothCommunication;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.gui.activities.SettingsActivity;
|
||||
import com.health.openscale.gui.activities.UserSettingsActivity;
|
||||
import com.health.openscale.gui.fragments.GraphFragment;
|
||||
import com.health.openscale.gui.fragments.OverviewFragment;
|
||||
import com.health.openscale.gui.fragments.TableFragment;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
|
@@ -1,679 +0,0 @@
|
||||
package com.health.openscale.gui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Html;
|
||||
import android.text.InputType;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Space;
|
||||
import android.widget.TableLayout;
|
||||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.EvaluationResult;
|
||||
import com.health.openscale.core.EvaluationSheet;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleCalculator;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.ScaleUser;
|
||||
|
||||
import lecho.lib.hellocharts.util.ChartUtils;
|
||||
|
||||
abstract class MeasurementView extends TableLayout {
|
||||
private static String SYMBOL_UP = "↗";
|
||||
private static String SYMBOL_DOWN = "↘";
|
||||
|
||||
private TableRow measurementRow;
|
||||
private ImageView iconView;
|
||||
private TextView nameView;
|
||||
private TextView valueView;
|
||||
private ImageView indicatorView;
|
||||
|
||||
private TableRow evaluatorRow;
|
||||
private LinearGaugeView evaluatorView;
|
||||
|
||||
private String nameText;
|
||||
|
||||
private boolean editMode;
|
||||
|
||||
public MeasurementView(Context context, String text, Drawable icon) {
|
||||
super(context);
|
||||
initView(context);
|
||||
|
||||
editMode = false;
|
||||
nameText = text;
|
||||
nameView.setText(text);
|
||||
iconView.setImageDrawable(icon);
|
||||
}
|
||||
|
||||
private void initView(Context context) {
|
||||
measurementRow = new TableRow(context);
|
||||
|
||||
iconView = new ImageView(context);
|
||||
nameView = new TextView(context);
|
||||
valueView = new TextView(context);
|
||||
indicatorView = new ImageView(context);
|
||||
|
||||
evaluatorRow = new TableRow(context);
|
||||
evaluatorView = new LinearGaugeView(context);
|
||||
|
||||
|
||||
measurementRow.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1.0f));
|
||||
measurementRow.addView(iconView);
|
||||
measurementRow.addView(nameView);
|
||||
measurementRow.addView(valueView);
|
||||
measurementRow.addView(indicatorView);
|
||||
|
||||
addView(measurementRow);
|
||||
addView(evaluatorRow);
|
||||
|
||||
iconView.getLayoutParams().height = pxImageDp(30);
|
||||
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
|
||||
nameView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
|
||||
nameView.setTextColor(Color.BLACK);
|
||||
nameView.setLines(2);
|
||||
nameView.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.90f));
|
||||
|
||||
valueView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
|
||||
valueView.setTextColor(Color.BLACK);
|
||||
valueView.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.01f));
|
||||
|
||||
indicatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.01f));
|
||||
indicatorView.setBackgroundColor(Color.GRAY);
|
||||
|
||||
evaluatorRow.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1.0f));
|
||||
evaluatorRow.addView(new Space(context));
|
||||
evaluatorRow.addView(evaluatorView);
|
||||
Space spaceAfterEvaluatorView = new Space(context);
|
||||
evaluatorRow.addView(spaceAfterEvaluatorView);
|
||||
evaluatorRow.setVisibility(View.GONE);
|
||||
|
||||
evaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.99f));
|
||||
spaceAfterEvaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.01f));
|
||||
|
||||
measurementRow.setOnClickListener(new onClickListenerEvaluation());
|
||||
}
|
||||
|
||||
abstract void updateValue(ScaleData updateData);
|
||||
abstract void updateDiff(ScaleData updateData, ScaleData lastData);
|
||||
abstract void updatePreferences(SharedPreferences preferences);
|
||||
abstract String getUnit();
|
||||
abstract EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value);
|
||||
abstract float getMinValue();
|
||||
abstract float getMaxValue();
|
||||
|
||||
abstract int getInputType();
|
||||
|
||||
public float getValue() {
|
||||
if (valueView.getText().length() == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return Float.valueOf(valueView.getText().toString());
|
||||
}
|
||||
|
||||
public void setEditMode(boolean mode) {
|
||||
editMode = mode;
|
||||
|
||||
if (editMode) {
|
||||
valueView = new EditText(getContext());
|
||||
valueView.setInputType(getInputType());
|
||||
valueView.setHint(getContext().getResources().getString(R.string.info_enter_value_unit) + " " + getUnit());
|
||||
measurementRow.addView(valueView);
|
||||
indicatorView.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isEditModeOn() {
|
||||
return editMode;
|
||||
}
|
||||
|
||||
protected void setValueOnView(float value) {
|
||||
if (isEditModeOn()) {
|
||||
valueView.setText(String.valueOf(value));
|
||||
} else {
|
||||
valueView.setText(String.format("%.2f ", value) + getUnit());
|
||||
evaluate(value);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDiffOnView(float value, float lastValue) {
|
||||
float diffValue = value - lastValue;
|
||||
|
||||
String symbol;
|
||||
|
||||
if (diffValue > 0.0) {
|
||||
symbol = SYMBOL_UP;
|
||||
} else {
|
||||
symbol = SYMBOL_DOWN;
|
||||
}
|
||||
|
||||
nameView.setText(
|
||||
Html.fromHtml(
|
||||
nameText +
|
||||
" <br> <font color='grey'>" +
|
||||
symbol +
|
||||
"<small> " +
|
||||
String.format("%.2f ", diffValue) + getUnit() +
|
||||
"</small></font>"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
protected void setVisible(boolean isVisible){
|
||||
if(isVisible) {
|
||||
measurementRow.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
measurementRow.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private int pxImageDp(float dp) {
|
||||
return (int)(dp * getResources().getDisplayMetrics().density + 0.5f);
|
||||
}
|
||||
|
||||
public boolean validateInput() {
|
||||
if (measurementRow.getVisibility() == View.VISIBLE) {
|
||||
if (valueView.getText().toString().length() == 0) {
|
||||
valueView.setError(getResources().getString(R.string.error_value_required));
|
||||
return false;
|
||||
}
|
||||
|
||||
float value = Float.valueOf(valueView.getText().toString());
|
||||
|
||||
if (!(value >= 0 && value <= getMaxValue())) {
|
||||
valueView.setError(getResources().getString(R.string.error_value_range));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void evaluate(float value) {
|
||||
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser());
|
||||
EvaluationResult evalResult = evaluateSheet(evalSheet, value);
|
||||
|
||||
evaluatorView.setMinMaxValue(getMinValue(), getMaxValue());
|
||||
evaluatorView.setLimits(evalResult.lowLimit, evalResult.highLimit);
|
||||
evaluatorView.setValue(value);
|
||||
|
||||
switch(evalResult.eval_state)
|
||||
{
|
||||
case LOW:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_BLUE);
|
||||
break;
|
||||
case NORMAL:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_GREEN);
|
||||
break;
|
||||
case HIGH:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_RED);
|
||||
break;
|
||||
case UNDEFINED:
|
||||
indicatorView.setBackgroundColor(Color.GRAY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected ScaleUser getScaleUser() {
|
||||
OpenScale openScale = OpenScale.getInstance(getContext());
|
||||
|
||||
return openScale.getSelectedScaleUser();
|
||||
}
|
||||
|
||||
private class onClickListenerEvaluation implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isEditModeOn()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (evaluatorRow.getVisibility() == View.VISIBLE) {
|
||||
evaluatorRow.setVisibility(View.GONE);
|
||||
} else {
|
||||
evaluatorRow.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class WeightMeasurementView extends MeasurementView {
|
||||
|
||||
public WeightMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_weight), ContextCompat.getDrawable(context, R.drawable.weight));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.weight, lastData.weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return ScaleUser.UNIT_STRING[getScaleUser().scale_unit];
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWeight(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 300;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class BMIMeasurementView extends MeasurementView {
|
||||
|
||||
public BMIMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_bmi), ContextCompat.getDrawable(context, R.drawable.bmi));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getBMI(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getBMI(getScaleUser().body_height), lastCalculator.getBMI(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBMI(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 50;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
}
|
||||
}
|
||||
|
||||
class WaterMeasurementView extends MeasurementView {
|
||||
|
||||
public WaterMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.water));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.water);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.water, lastData.water);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waterEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyWater(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 80;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class MuscleMeasurementView extends MeasurementView {
|
||||
|
||||
public MuscleMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.muscle));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.muscle);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.muscle, lastData.muscle);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("muscleEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyMuscle(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 80;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class FatMeasurementView extends MeasurementView {
|
||||
|
||||
public FatMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.fat));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.fat);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.fat, lastData.fat);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("fatEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyFat(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 40;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class WaistMeasurementView extends MeasurementView {
|
||||
|
||||
public WaistMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_waist), ContextCompat.getDrawable(context, R.drawable.waist));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.waist);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.waist, lastData.waist);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "cm";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWaist(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 200;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class WHtRMeasurementView extends MeasurementView {
|
||||
|
||||
public WHtRMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_whtr), ContextCompat.getDrawable(context, R.drawable.whtr));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getWHtR(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getWHtR(getScaleUser().body_height), lastCalculator.getWHtR(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWHtR(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
class HipMeasurementView extends MeasurementView {
|
||||
|
||||
public HipMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_hip), ContextCompat.getDrawable(context, R.drawable.hip));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.hip);
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.hip, lastData.hip);
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "cm";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateHip(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 200;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
||||
|
||||
class WHRMeasurementView extends MeasurementView {
|
||||
|
||||
public WHRMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_whr), ContextCompat.getDrawable(context, R.drawable.whr));
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getWHR());
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getWHR(), lastCalculator.getWHR());
|
||||
}
|
||||
|
||||
@Override
|
||||
String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", true) && preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWHR(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMinValue() {
|
||||
return 0.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
float getMaxValue() {
|
||||
return 1.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.activities;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
@@ -36,7 +36,14 @@ import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.gui.views.FatMeasurementView;
|
||||
import com.health.openscale.gui.views.HipMeasurementView;
|
||||
import com.health.openscale.gui.views.MeasurementView;
|
||||
import com.health.openscale.gui.views.MuscleMeasurementView;
|
||||
import com.health.openscale.gui.views.WaistMeasurementView;
|
||||
import com.health.openscale.gui.views.WaterMeasurementView;
|
||||
import com.health.openscale.gui.views.WeightMeasurementView;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.activities;
|
||||
|
||||
import android.preference.PreferenceActivity;
|
||||
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.activities;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
@@ -32,7 +32,7 @@ import android.widget.RadioGroup;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleUser;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
@@ -14,9 +14,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.fragments;
|
||||
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@@ -14,7 +14,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.fragments;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
@@ -33,7 +33,8 @@ import android.widget.TextView;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.gui.activities.DataEntryActivity;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.fragments;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -36,9 +36,20 @@ import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleCalculator;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.ScaleUser;
|
||||
import com.health.openscale.core.datatypes.ScaleCalculator;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
import com.health.openscale.gui.activities.DataEntryActivity;
|
||||
import com.health.openscale.gui.views.BMIMeasurementView;
|
||||
import com.health.openscale.gui.views.FatMeasurementView;
|
||||
import com.health.openscale.gui.views.HipMeasurementView;
|
||||
import com.health.openscale.gui.views.MeasurementView;
|
||||
import com.health.openscale.gui.views.MuscleMeasurementView;
|
||||
import com.health.openscale.gui.views.WHRMeasurementView;
|
||||
import com.health.openscale.gui.views.WHtRMeasurementView;
|
||||
import com.health.openscale.gui.views.WaistMeasurementView;
|
||||
import com.health.openscale.gui.views.WaterMeasurementView;
|
||||
import com.health.openscale.gui.views.WeightMeasurementView;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.ArrayList;
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.fragments;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
@@ -42,7 +42,8 @@ import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.gui.activities.DataEntryActivity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
@@ -29,7 +29,7 @@ import android.preference.PreferenceGroup;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.alarm.AlarmHandler;
|
||||
import com.health.openscale.gui.ReminderBootReceiver;
|
||||
import com.health.openscale.core.alarm.ReminderBootReceiver;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@@ -24,8 +24,8 @@ import android.preference.PreferenceManager;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.ScaleUser;
|
||||
import com.health.openscale.gui.UserSettingsActivity;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
import com.health.openscale.gui.activities.UserSettingsActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@@ -0,0 +1,61 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleCalculator;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class BMIMeasurementView extends MeasurementView {
|
||||
|
||||
public BMIMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_bmi), ContextCompat.getDrawable(context, R.drawable.bmi));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getBMI(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getBMI(getScaleUser().body_height), lastCalculator.getBMI(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBMI(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 50;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class FatMeasurementView extends MeasurementView {
|
||||
|
||||
public FatMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.fat));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.fat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.fat, lastData.fat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("fatEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyFat(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 40;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class HipMeasurementView extends MeasurementView {
|
||||
|
||||
public HipMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_hip), ContextCompat.getDrawable(context, R.drawable.hip));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.hip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.hip, lastData.hip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "cm";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateHip(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 200;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package com.health.openscale.gui;
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
@@ -0,0 +1,244 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.Html;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Space;
|
||||
import android.widget.TableLayout;
|
||||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
|
||||
import lecho.lib.hellocharts.util.ChartUtils;
|
||||
|
||||
public abstract class MeasurementView extends TableLayout {
|
||||
private static String SYMBOL_UP = "↗";
|
||||
private static String SYMBOL_DOWN = "↘";
|
||||
|
||||
private TableRow measurementRow;
|
||||
private ImageView iconView;
|
||||
private TextView nameView;
|
||||
private TextView valueView;
|
||||
private ImageView indicatorView;
|
||||
|
||||
private TableRow evaluatorRow;
|
||||
private LinearGaugeView evaluatorView;
|
||||
|
||||
private String nameText;
|
||||
|
||||
private boolean editMode;
|
||||
|
||||
public MeasurementView(Context context, String text, Drawable icon) {
|
||||
super(context);
|
||||
initView(context);
|
||||
|
||||
editMode = false;
|
||||
nameText = text;
|
||||
nameView.setText(text);
|
||||
iconView.setImageDrawable(icon);
|
||||
}
|
||||
|
||||
private void initView(Context context) {
|
||||
measurementRow = new TableRow(context);
|
||||
|
||||
iconView = new ImageView(context);
|
||||
nameView = new TextView(context);
|
||||
valueView = new TextView(context);
|
||||
indicatorView = new ImageView(context);
|
||||
|
||||
evaluatorRow = new TableRow(context);
|
||||
evaluatorView = new LinearGaugeView(context);
|
||||
|
||||
|
||||
measurementRow.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1.0f));
|
||||
measurementRow.addView(iconView);
|
||||
measurementRow.addView(nameView);
|
||||
measurementRow.addView(valueView);
|
||||
measurementRow.addView(indicatorView);
|
||||
|
||||
addView(measurementRow);
|
||||
addView(evaluatorRow);
|
||||
|
||||
iconView.getLayoutParams().height = pxImageDp(30);
|
||||
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
|
||||
nameView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
|
||||
nameView.setTextColor(Color.BLACK);
|
||||
nameView.setLines(2);
|
||||
nameView.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.90f));
|
||||
|
||||
valueView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
|
||||
valueView.setTextColor(Color.BLACK);
|
||||
valueView.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.01f));
|
||||
|
||||
indicatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.MATCH_PARENT, 0.01f));
|
||||
indicatorView.setBackgroundColor(Color.GRAY);
|
||||
|
||||
evaluatorRow.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, 1.0f));
|
||||
evaluatorRow.addView(new Space(context));
|
||||
evaluatorRow.addView(evaluatorView);
|
||||
Space spaceAfterEvaluatorView = new Space(context);
|
||||
evaluatorRow.addView(spaceAfterEvaluatorView);
|
||||
evaluatorRow.setVisibility(View.GONE);
|
||||
|
||||
evaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.99f));
|
||||
spaceAfterEvaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.01f));
|
||||
|
||||
measurementRow.setOnClickListener(new onClickListenerEvaluation());
|
||||
}
|
||||
|
||||
public abstract void updateValue(ScaleData updateData);
|
||||
public abstract void updateDiff(ScaleData updateData, ScaleData lastData);
|
||||
public abstract void updatePreferences(SharedPreferences preferences);
|
||||
public abstract String getUnit();
|
||||
public abstract EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value);
|
||||
public abstract float getMinValue();
|
||||
public abstract float getMaxValue();
|
||||
|
||||
abstract int getInputType();
|
||||
|
||||
public float getValue() {
|
||||
if (valueView.getText().length() == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return Float.valueOf(valueView.getText().toString());
|
||||
}
|
||||
|
||||
public void setEditMode(boolean mode) {
|
||||
editMode = mode;
|
||||
|
||||
if (editMode) {
|
||||
valueView = new EditText(getContext());
|
||||
valueView.setInputType(getInputType());
|
||||
valueView.setHint(getContext().getResources().getString(R.string.info_enter_value_unit) + " " + getUnit());
|
||||
measurementRow.addView(valueView);
|
||||
indicatorView.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isEditModeOn() {
|
||||
return editMode;
|
||||
}
|
||||
|
||||
protected void setValueOnView(float value) {
|
||||
if (isEditModeOn()) {
|
||||
valueView.setText(String.valueOf(value));
|
||||
} else {
|
||||
valueView.setText(String.format("%.2f ", value) + getUnit());
|
||||
evaluate(value);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setDiffOnView(float value, float lastValue) {
|
||||
float diffValue = value - lastValue;
|
||||
|
||||
String symbol;
|
||||
|
||||
if (diffValue > 0.0) {
|
||||
symbol = SYMBOL_UP;
|
||||
} else {
|
||||
symbol = SYMBOL_DOWN;
|
||||
}
|
||||
|
||||
nameView.setText(
|
||||
Html.fromHtml(
|
||||
nameText +
|
||||
" <br> <font color='grey'>" +
|
||||
symbol +
|
||||
"<small> " +
|
||||
String.format("%.2f ", diffValue) + getUnit() +
|
||||
"</small></font>"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
protected void setVisible(boolean isVisible){
|
||||
if(isVisible) {
|
||||
measurementRow.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
measurementRow.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private int pxImageDp(float dp) {
|
||||
return (int)(dp * getResources().getDisplayMetrics().density + 0.5f);
|
||||
}
|
||||
|
||||
public boolean validateInput() {
|
||||
if (measurementRow.getVisibility() == View.VISIBLE) {
|
||||
if (valueView.getText().toString().length() == 0) {
|
||||
valueView.setError(getResources().getString(R.string.error_value_required));
|
||||
return false;
|
||||
}
|
||||
|
||||
float value = Float.valueOf(valueView.getText().toString());
|
||||
|
||||
if (!(value >= 0 && value <= getMaxValue())) {
|
||||
valueView.setError(getResources().getString(R.string.error_value_range));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void evaluate(float value) {
|
||||
EvaluationSheet evalSheet = new EvaluationSheet(getScaleUser());
|
||||
EvaluationResult evalResult = evaluateSheet(evalSheet, value);
|
||||
|
||||
evaluatorView.setMinMaxValue(getMinValue(), getMaxValue());
|
||||
evaluatorView.setLimits(evalResult.lowLimit, evalResult.highLimit);
|
||||
evaluatorView.setValue(value);
|
||||
|
||||
switch(evalResult.eval_state)
|
||||
{
|
||||
case LOW:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_BLUE);
|
||||
break;
|
||||
case NORMAL:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_GREEN);
|
||||
break;
|
||||
case HIGH:
|
||||
indicatorView.setBackgroundColor(ChartUtils.COLOR_RED);
|
||||
break;
|
||||
case UNDEFINED:
|
||||
indicatorView.setBackgroundColor(Color.GRAY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected ScaleUser getScaleUser() {
|
||||
OpenScale openScale = OpenScale.getInstance(getContext());
|
||||
|
||||
return openScale.getSelectedScaleUser();
|
||||
}
|
||||
|
||||
private class onClickListenerEvaluation implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isEditModeOn()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (evaluatorRow.getVisibility() == View.VISIBLE) {
|
||||
evaluatorRow.setVisibility(View.GONE);
|
||||
} else {
|
||||
evaluatorRow.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,58 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class MuscleMeasurementView extends MeasurementView {
|
||||
|
||||
public MuscleMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.muscle));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.muscle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.muscle, lastData.muscle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("muscleEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyMuscle(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 80;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleCalculator;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class WHRMeasurementView extends MeasurementView {
|
||||
|
||||
public WHRMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_whr), ContextCompat.getDrawable(context, R.drawable.whr));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getWHR());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getWHR(), lastCalculator.getWHR());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", true) && preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWHR(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 0.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 1.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,61 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleCalculator;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class WHtRMeasurementView extends MeasurementView {
|
||||
|
||||
public WHtRMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_whtr), ContextCompat.getDrawable(context, R.drawable.whtr));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
setValueOnView(updateCalculator.getWHtR(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
ScaleCalculator updateCalculator = new ScaleCalculator(updateData);
|
||||
ScaleCalculator lastCalculator = new ScaleCalculator(lastData);
|
||||
setDiffOnView(updateCalculator.getWHtR(getScaleUser().body_height), lastCalculator.getWHtR(getScaleUser().body_height));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWHtR(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return 0;
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class WaistMeasurementView extends MeasurementView {
|
||||
|
||||
public WaistMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_waist), ContextCompat.getDrawable(context, R.drawable.waist));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.waist);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.waist, lastData.waist);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "cm";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWaist(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 200;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class WaterMeasurementView extends MeasurementView {
|
||||
|
||||
public WaterMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.water));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.water);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.water, lastData.water);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return "%";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waterEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateBodyWater(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 80;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
@@ -0,0 +1,59 @@
|
||||
package com.health.openscale.gui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.InputType;
|
||||
|
||||
import com.health.openscale.R;
|
||||
import com.health.openscale.core.datatypes.ScaleData;
|
||||
import com.health.openscale.core.datatypes.ScaleUser;
|
||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||
|
||||
public class WeightMeasurementView extends MeasurementView {
|
||||
|
||||
public WeightMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_weight), ContextCompat.getDrawable(context, R.drawable.weight));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateValue(ScaleData updateData) {
|
||||
setValueOnView(updateData.weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDiff(ScaleData updateData, ScaleData lastData) {
|
||||
setDiffOnView(updateData.weight, lastData.weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnit() {
|
||||
return ScaleUser.UNIT_STRING[getScaleUser().scale_unit];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationResult evaluateSheet(EvaluationSheet evalSheet, float value) {
|
||||
return evalSheet.evaluateWeight(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMinValue() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMaxValue() {
|
||||
return 300;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getInputType() {
|
||||
return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user