diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index d026f77e..896c62d1 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -33,6 +33,9 @@ import android.widget.TableLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.widget.Toolbar; +import androidx.core.graphics.drawable.DrawableCompat; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; @@ -40,15 +43,13 @@ import com.health.openscale.gui.views.DateMeasurementView; import com.health.openscale.gui.views.MeasurementView; import com.health.openscale.gui.views.MeasurementViewUpdateListener; import com.health.openscale.gui.views.TimeMeasurementView; +import com.health.openscale.gui.views.UserMeasurementView; import com.health.openscale.gui.views.WeightMeasurementView; import java.text.DateFormat; import java.util.Date; import java.util.List; -import androidx.appcompat.widget.Toolbar; -import androidx.core.graphics.drawable.DrawableCompat; - public class DataEntryActivity extends BaseAppCompatActivity { public static final String EXTRA_ID = "id"; public static final String EXTRA_MODE = "mode"; @@ -373,7 +374,7 @@ public class DataEntryActivity extends BaseAppCompatActivity { } for (MeasurementView measurement : dataEntryMeasurements) { - if (measurement instanceof DateMeasurementView || measurement instanceof TimeMeasurementView) { + if (measurement instanceof DateMeasurementView || measurement instanceof TimeMeasurementView || measurement instanceof UserMeasurementView) { measurement.setVisibility(dateTimeVisibility); } measurement.setEditMode(viewMode); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java index 845cd37c..6c340e4d 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/MeasurementView.java @@ -41,6 +41,8 @@ import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; +import androidx.core.content.ContextCompat; + import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; @@ -51,8 +53,6 @@ import com.health.openscale.gui.utils.ColorUtil; import java.util.ArrayList; import java.util.List; -import androidx.core.content.ContextCompat; - import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.ADD; import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.EDIT; import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode.STATISTIC; @@ -131,6 +131,7 @@ public abstract class MeasurementView extends TableLayout { unsorted.add(new TDEEMeasurementView(context)); unsorted.add(new CaloriesMeasurementView(context)); unsorted.add(new CommentMeasurementView(context)); + unsorted.add(new UserMeasurementView(context)); // Get sort order final String[] sortOrder = TextUtils.split( diff --git a/android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java new file mode 100644 index 00000000..b96ea368 --- /dev/null +++ b/android_app/app/src/main/java/com/health/openscale/gui/views/UserMeasurementView.java @@ -0,0 +1,119 @@ +/* Copyright (C) 2019 olie.xdev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.health.openscale.gui.views; + +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Spinner; + +import com.health.openscale.R; +import com.health.openscale.core.OpenScale; +import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.health.openscale.core.datatypes.ScaleUser; + +import java.util.ArrayList; + +public class UserMeasurementView extends MeasurementView { + // Don't change key value, it may be stored persistent in preferences + public static final String KEY = "user"; + + private OpenScale openScale = OpenScale.getInstance(); + private int userId; + + public UserMeasurementView(Context context) { + super(context, R.string.label_user_name, R.drawable.ic_user); + userId = -1; + } + + @Override + public String getKey() { + return KEY; + } + + private void setValue(int newUserId, boolean callListener) { + if (newUserId == -1) { + setValueView(openScale.getSelectedScaleUser().getUserName(), callListener); + } else if (userId != newUserId) { + userId = newUserId; + + setValueView(openScale.getScaleUser(userId).getUserName(), callListener); + } + } + + @Override + public void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement) { + setValue(measurement.getUserId(), false); + } + + @Override + public void saveTo(ScaleMeasurement measurement) { + measurement.setUserId(userId); + } + + @Override + public void clearIn(ScaleMeasurement measurement) { + // ignore + } + + @Override + public void restoreState(Bundle state) { + setValue(state.getInt(getKey()), true); + } + + @Override + public void saveState(Bundle state) { + state.putInt(getKey(), userId); + } + + @Override + public String getValueAsString(boolean withUnit) { + return openScale.getScaleUser(userId).getUserName(); + } + + @Override + protected View getInputView() { + Spinner spinScaleUer = new Spinner(getContext()); + ArrayAdapter spinScaleUserAdapter = new ArrayAdapter<>(getContext(), R.layout.support_simple_spinner_dropdown_item, new ArrayList<>()); + + spinScaleUer.setAdapter(spinScaleUserAdapter); + + int spinPos = 0; + + for (ScaleUser scaleUser : openScale.getScaleUserList()) { + spinScaleUserAdapter.add(scaleUser.getUserName()); + + if (scaleUser.getId() == userId) { + spinPos = spinScaleUserAdapter.getCount() - 1; + } + } + + spinScaleUer.setSelection(spinPos); + + return spinScaleUer; + } + + @Override + protected boolean validateAndSetInput(View view) { + Spinner spinScaleUser = (Spinner)view; + + int pos = spinScaleUser.getSelectedItemPosition(); + setValue(openScale.getScaleUserList().get(pos).getId(), true); + + return true; + } +} diff --git a/android_app/app/src/main/res/drawable-hdpi/ic_user.png b/android_app/app/src/main/res/drawable-hdpi/ic_user.png new file mode 100644 index 00000000..6656e7d2 Binary files /dev/null and b/android_app/app/src/main/res/drawable-hdpi/ic_user.png differ diff --git a/android_app/app/src/main/res/drawable-ldpi/ic_user.png b/android_app/app/src/main/res/drawable-ldpi/ic_user.png new file mode 100644 index 00000000..0ba453dd Binary files /dev/null and b/android_app/app/src/main/res/drawable-ldpi/ic_user.png differ diff --git a/android_app/app/src/main/res/drawable-mdpi/ic_user.png b/android_app/app/src/main/res/drawable-mdpi/ic_user.png new file mode 100644 index 00000000..bb2a33a0 Binary files /dev/null and b/android_app/app/src/main/res/drawable-mdpi/ic_user.png differ diff --git a/android_app/app/src/main/res/drawable-xhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xhdpi/ic_user.png new file mode 100644 index 00000000..191972cd Binary files /dev/null and b/android_app/app/src/main/res/drawable-xhdpi/ic_user.png differ diff --git a/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png new file mode 100644 index 00000000..74fb0b04 Binary files /dev/null and b/android_app/app/src/main/res/drawable-xxhdpi/ic_user.png differ diff --git a/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png b/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png new file mode 100644 index 00000000..14720bba Binary files /dev/null and b/android_app/app/src/main/res/drawable-xxxhdpi/ic_user.png differ