mirror of
https://github.com/oliexdev/openScale.git
synced 2025-09-01 04:22:26 +02:00
Merge pull request #198 from erijo/reorder
Make it possible to change order of measurment views
This commit is contained in:
@@ -78,6 +78,8 @@ public class MainActivity extends AppCompatActivity
|
||||
private BottomNavigationView navBottomDrawer;
|
||||
private ActionBarDrawerToggle drawerToggle;
|
||||
|
||||
private boolean settingsActivityRunning = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
@@ -90,6 +92,9 @@ public class MainActivity extends AppCompatActivity
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
PreferenceManager.getDefaultSharedPreferences(this)
|
||||
.registerOnSharedPreferenceChangeListener(this);
|
||||
|
||||
CaocConfig.Builder.create()
|
||||
.trackActivities(true)
|
||||
.apply();
|
||||
@@ -183,34 +188,25 @@ public class MainActivity extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
private void registerOnSharedPreferenceChangeListener() {
|
||||
PreferenceManager.getDefaultSharedPreferences(this)
|
||||
.registerOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
private void unregisterOnSharedPreferenceChangeListener() {
|
||||
PreferenceManager.getDefaultSharedPreferences(this)
|
||||
.unregisterOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Stop listening when returning from settings
|
||||
unregisterOnSharedPreferenceChangeListener();
|
||||
settingsActivityRunning = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
// Clean up when shutting down
|
||||
unregisterOnSharedPreferenceChangeListener();
|
||||
PreferenceManager.getDefaultSharedPreferences(this)
|
||||
.unregisterOnSharedPreferenceChangeListener(this);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||
if (settingsActivityRunning) {
|
||||
recreate();
|
||||
}
|
||||
}
|
||||
|
||||
private void positiveFeedbackDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
@@ -307,10 +303,10 @@ public class MainActivity extends AppCompatActivity
|
||||
prefs.edit().putInt("lastFragmentId", menuItemId).commit();
|
||||
break;
|
||||
case R.id.nav_settings:
|
||||
registerOnSharedPreferenceChangeListener();
|
||||
Intent settingsIntent = new Intent(this, SettingsActivity.class);
|
||||
settingsIntent.putExtra(SettingsActivity.EXTRA_TINT_COLOR, navDrawer.getItemTextColor().getDefaultColor());
|
||||
startActivity(settingsIntent);
|
||||
settingsActivityRunning = true;
|
||||
drawerLayout.closeDrawers();
|
||||
return;
|
||||
case R.id.nav_help:
|
||||
|
@@ -16,17 +16,27 @@
|
||||
package com.health.openscale.gui.preferences;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.MultiSelectListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.view.DragEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.health.openscale.R;
|
||||
@@ -34,6 +44,7 @@ import com.health.openscale.core.OpenScale;
|
||||
import com.health.openscale.core.bodymetric.EstimatedFatMetric;
|
||||
import com.health.openscale.core.bodymetric.EstimatedLBWMetric;
|
||||
import com.health.openscale.core.bodymetric.EstimatedWaterMetric;
|
||||
import com.health.openscale.gui.views.MeasurementView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -56,6 +67,9 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
||||
|
||||
private Preference deleteAll;
|
||||
|
||||
private PreferenceScreen measurementOrderScreen;
|
||||
private PreferenceCategory measurementOrderCategory;
|
||||
|
||||
private CheckBoxPreference fatEnable;
|
||||
private SwitchPreference fatPercentageEnable;
|
||||
private CheckBoxPreference waterEnable;
|
||||
@@ -79,6 +93,30 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
||||
deleteAll = (Preference) findPreference(PREFERENCE_KEY_DELETE_ALL);
|
||||
deleteAll.setOnPreferenceClickListener(new onClickListenerDeleteAll());
|
||||
|
||||
final Context context = getActivity().getApplicationContext();
|
||||
measurementOrderScreen = (PreferenceScreen) findPreference(MeasurementView.PREF_MEASUREMENT_ORDER);
|
||||
|
||||
measurementOrderCategory = new PreferenceCategory(context);
|
||||
measurementOrderCategory.setTitle(R.string.label_press_hold_reorder);
|
||||
measurementOrderCategory.setOrderingAsAdded(true);
|
||||
|
||||
Preference resetOrder = new Preference(context);
|
||||
resetOrder.setTitle(R.string.label_set_default_order);
|
||||
resetOrder.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||
.remove(MeasurementView.PREF_MEASUREMENT_ORDER).commit();
|
||||
measurementOrderCategory.removeAll();
|
||||
updateMeasurementOrderScreen(context, measurementOrderCategory);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
measurementOrderScreen.addPreference(resetOrder);
|
||||
measurementOrderScreen.addPreference(measurementOrderCategory);
|
||||
|
||||
updateMeasurementOrderScreen(context, measurementOrderCategory);
|
||||
|
||||
estimateWaterEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_WATER);
|
||||
estimateWaterFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_WATER_FORMULA);
|
||||
estimateLBWEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_LBW);
|
||||
@@ -100,6 +138,17 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
||||
initSummary(getPreferenceScreen());
|
||||
}
|
||||
|
||||
private void updateMeasurementOrderScreen(Context context, PreferenceCategory category) {
|
||||
List<MeasurementView> measurementViews = MeasurementView.getMeasurementList(
|
||||
context, MeasurementView.DateTimeOrder.NONE);
|
||||
for (MeasurementView measurement : measurementViews) {
|
||||
Preference preference = new MeasurementOrderPreference(context, category, measurement);
|
||||
preference.setShouldDisableView(true);
|
||||
preference.setEnabled(measurement.isVisible());
|
||||
category.addPreference(preference);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateWaterListPreferences() {
|
||||
ArrayList<String> listEntries = new ArrayList();
|
||||
ArrayList<String> listEntryValues = new ArrayList();
|
||||
@@ -167,6 +216,10 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
updatePrefSummary(findPreference(key));
|
||||
if (!key.equals(MeasurementView.PREF_MEASUREMENT_ORDER)) {
|
||||
measurementOrderCategory.removeAll();
|
||||
updateMeasurementOrderScreen(getContext(), measurementOrderCategory);
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePrefSummary(Preference p) {
|
||||
@@ -266,4 +319,154 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private class MeasurementOrderPreference extends Preference {
|
||||
PreferenceGroup parentGroup;
|
||||
MeasurementView measurement;
|
||||
View boundView;
|
||||
|
||||
MeasurementOrderPreference(Context context, PreferenceGroup parent, MeasurementView measurementView) {
|
||||
super(context);
|
||||
parentGroup = parent;
|
||||
measurement = measurementView;
|
||||
setIcon(measurement.getIcon());
|
||||
setTitle(measurement.getName());
|
||||
}
|
||||
|
||||
public PreferenceGroup getParent() {
|
||||
return parentGroup;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
boundView = view;
|
||||
|
||||
onTouchClickListener touchClickListener = new onTouchClickListener(this);
|
||||
view.setOnTouchListener(touchClickListener);
|
||||
view.setOnLongClickListener(touchClickListener);
|
||||
view.setOnDragListener(new onDragListener());
|
||||
}
|
||||
|
||||
private class onTouchClickListener implements View.OnTouchListener, View.OnLongClickListener {
|
||||
MeasurementOrderPreference preference;
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
onTouchClickListener(MeasurementOrderPreference pref) {
|
||||
preference = pref;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event) {
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
|
||||
x = Math.round(event.getX());
|
||||
y = Math.round(event.getY());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View view) {
|
||||
return view.startDrag(null, new dragShadowBuilder(view), preference, 0);
|
||||
}
|
||||
|
||||
private class dragShadowBuilder extends View.DragShadowBuilder {
|
||||
public dragShadowBuilder(View view) {
|
||||
super(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
|
||||
super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint);
|
||||
outShadowTouchPoint.set(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class onDragListener implements View.OnDragListener {
|
||||
Drawable background = null;
|
||||
// background may be set to null, thus the extra boolean
|
||||
boolean hasBackground = false;
|
||||
|
||||
private MeasurementOrderPreference castLocalState(DragEvent event) {
|
||||
return (MeasurementOrderPreference) event.getLocalState();
|
||||
}
|
||||
|
||||
private boolean isDraggedView(View view, DragEvent event) {
|
||||
return castLocalState(event).boundView == view;
|
||||
}
|
||||
|
||||
private void setTemporaryBackgroundColor(View view, int color) {
|
||||
if (!hasBackground) {
|
||||
background = view.getBackground();
|
||||
hasBackground = true;
|
||||
view.setBackgroundColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
private void restoreBackground(View view) {
|
||||
if (hasBackground) {
|
||||
view.setBackground(background);
|
||||
background = null;
|
||||
hasBackground = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDrag(View view, DragEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case DragEvent.ACTION_DRAG_STARTED:
|
||||
if (isDraggedView(view, event)) {
|
||||
setTemporaryBackgroundColor(view, Color.GRAY);
|
||||
}
|
||||
break;
|
||||
case DragEvent.ACTION_DRAG_ENTERED:
|
||||
if (!isDraggedView(view, event)) {
|
||||
setTemporaryBackgroundColor(view, Color.LTGRAY);
|
||||
}
|
||||
break;
|
||||
case DragEvent.ACTION_DRAG_EXITED:
|
||||
if (!isDraggedView(view, event)) {
|
||||
restoreBackground(view);
|
||||
}
|
||||
break;
|
||||
case DragEvent.ACTION_DROP:
|
||||
MeasurementOrderPreference draggedPref = castLocalState(event);
|
||||
PreferenceGroup group = draggedPref.getParent();
|
||||
|
||||
ArrayList<MeasurementOrderPreference> preferences = new ArrayList<>();
|
||||
for (int i = 0; i < group.getPreferenceCount(); ++i) {
|
||||
MeasurementOrderPreference pref = (MeasurementOrderPreference) group.getPreference(i);
|
||||
// Add all preferences except the dragged one
|
||||
if (pref != draggedPref) {
|
||||
preferences.add(pref);
|
||||
}
|
||||
// When we find the view that is the drop target use add(index, ...).
|
||||
// This will add the dragged preference before the drop if dragged upwards,
|
||||
// and after if dragged downwards.
|
||||
if (pref.boundView == view) {
|
||||
preferences.add(i, draggedPref);
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<MeasurementView> measurementViews = new ArrayList<>();
|
||||
// Re-add all preferences in the new order
|
||||
group.removeAll();
|
||||
for (MeasurementOrderPreference p : preferences) {
|
||||
p.setOrder(DEFAULT_ORDER);
|
||||
group.addPreference(p);
|
||||
measurementViews.add(p.measurement);
|
||||
}
|
||||
MeasurementView.saveMeasurementViewsOrder(getContext(), measurementViews);
|
||||
break;
|
||||
case DragEvent.ACTION_DRAG_ENDED:
|
||||
restoreBackground(view);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -31,6 +31,11 @@ public class BMIMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_bmi), ContextCompat.getDrawable(context, R.drawable.ic_bmi));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "bmi";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
|
@@ -33,6 +33,11 @@ public class BMRMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_bmr), ContextCompat.getDrawable(context, R.drawable.ic_bmr));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "bmr";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
|
@@ -31,6 +31,11 @@ public class BoneMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_bone), ContextCompat.getDrawable(context, R.drawable.ic_bone));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "bone";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("boneEnable", false));
|
||||
|
@@ -27,12 +27,16 @@ import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||
|
||||
public class CommentMeasurementView extends MeasurementView {
|
||||
private String comment;
|
||||
private static String COMMENT_KEY = "comment";
|
||||
|
||||
public CommentMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_comment), ContextCompat.getDrawable(context, R.drawable.ic_comment));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "comment";
|
||||
}
|
||||
|
||||
private void setValue(String newComment, boolean callListener) {
|
||||
if (!newComment.equals(comment)) {
|
||||
comment = newComment;
|
||||
@@ -52,12 +56,12 @@ public class CommentMeasurementView extends MeasurementView {
|
||||
|
||||
@Override
|
||||
public void restoreState(Bundle state) {
|
||||
setValue(state.getString(COMMENT_KEY), true);
|
||||
setValue(state.getString(getKey()), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveState(Bundle state) {
|
||||
state.putString(COMMENT_KEY, comment);
|
||||
state.putString(getKey(), comment);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -34,12 +34,17 @@ import java.util.Date;
|
||||
public class DateMeasurementView extends MeasurementView {
|
||||
private static DateFormat dateFormat = DateFormat.getDateInstance();
|
||||
private Date date;
|
||||
private static String DATE_KEY = "date";
|
||||
|
||||
public DateMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_date), ContextCompat.getDrawable(context, R.drawable.ic_lastmonth));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "date";
|
||||
}
|
||||
|
||||
|
||||
private void setValue(Date newDate, boolean callListener) {
|
||||
if (!newDate.equals(date)) {
|
||||
date = newDate;
|
||||
@@ -70,12 +75,12 @@ public class DateMeasurementView extends MeasurementView {
|
||||
|
||||
@Override
|
||||
public void restoreState(Bundle state) {
|
||||
setValue(new Date(state.getLong(DATE_KEY)), true);
|
||||
setValue(new Date(state.getLong(getKey())), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveState(Bundle state) {
|
||||
state.putLong(DATE_KEY, date.getTime());
|
||||
state.putLong(getKey(), date.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -34,6 +34,11 @@ public class FatMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.ic_fat));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "fat";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("fatEnable", true));
|
||||
|
@@ -251,12 +251,12 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
|
||||
@Override
|
||||
public void restoreState(Bundle state) {
|
||||
setValue(state.getFloat(nameText), previousValue, true);
|
||||
setValue(state.getFloat(getKey()), previousValue, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveState(Bundle state) {
|
||||
state.putFloat(nameText, value);
|
||||
state.putFloat(getKey(), value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -271,7 +271,8 @@ public abstract class FloatMeasurementView extends MeasurementView {
|
||||
return value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
@Override
|
||||
public CharSequence getName() {
|
||||
return nameText;
|
||||
}
|
||||
|
||||
|
@@ -31,6 +31,11 @@ public class HipMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_hip), ContextCompat.getDrawable(context, R.drawable.ic_hip));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "hip";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", false));
|
||||
|
@@ -33,6 +33,11 @@ public class LBWMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_lbw), ContextCompat.getDrawable(context, R.drawable.ic_lbw));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "lbw";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("lbwEnable", false));
|
||||
|
@@ -25,6 +25,7 @@ import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
@@ -58,6 +59,8 @@ import static com.health.openscale.gui.views.MeasurementView.MeasurementViewMode
|
||||
public abstract class MeasurementView extends TableLayout {
|
||||
public enum MeasurementViewMode {VIEW, EDIT, ADD, STATISTIC}
|
||||
|
||||
public static String PREF_MEASUREMENT_ORDER = "measurementOrder";
|
||||
|
||||
private TableRow measurementRow;
|
||||
private ImageView iconView;
|
||||
private TextView nameView;
|
||||
@@ -84,38 +87,71 @@ public abstract class MeasurementView extends TableLayout {
|
||||
|
||||
public enum DateTimeOrder { FIRST, LAST, NONE }
|
||||
|
||||
public static final List<MeasurementView> getMeasurementList(Context context, DateTimeOrder order) {
|
||||
final List<MeasurementView> measurementViews = new ArrayList<>();
|
||||
|
||||
if (order == DateTimeOrder.FIRST) {
|
||||
measurementViews.add(new DateMeasurementView(context));
|
||||
measurementViews.add(new TimeMeasurementView(context));
|
||||
}
|
||||
measurementViews.add(new WeightMeasurementView(context));
|
||||
measurementViews.add(new BMIMeasurementView(context));
|
||||
measurementViews.add(new WaterMeasurementView(context));
|
||||
measurementViews.add(new MuscleMeasurementView(context));
|
||||
measurementViews.add(new LBWMeasurementView(context));
|
||||
measurementViews.add(new FatMeasurementView(context));
|
||||
measurementViews.add(new BoneMeasurementView(context));
|
||||
measurementViews.add(new WaistMeasurementView(context));
|
||||
measurementViews.add(new WHtRMeasurementView(context));
|
||||
measurementViews.add(new HipMeasurementView(context));
|
||||
measurementViews.add(new WHRMeasurementView(context));
|
||||
measurementViews.add(new BMRMeasurementView(context));
|
||||
measurementViews.add(new CommentMeasurementView(context));
|
||||
if (order == DateTimeOrder.LAST) {
|
||||
measurementViews.add(new DateMeasurementView(context));
|
||||
measurementViews.add(new TimeMeasurementView(context));
|
||||
public static final List<MeasurementView> getMeasurementList(Context context, DateTimeOrder dateTimeOrder) {
|
||||
final List<MeasurementView> sorted = new ArrayList<>();
|
||||
if (dateTimeOrder == DateTimeOrder.FIRST) {
|
||||
sorted.add(new DateMeasurementView(context));
|
||||
sorted.add(new TimeMeasurementView(context));
|
||||
}
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
for (MeasurementView measurement : measurementViews) {
|
||||
{
|
||||
final List<MeasurementView> unsorted = new ArrayList<>();
|
||||
|
||||
unsorted.add(new WeightMeasurementView(context));
|
||||
unsorted.add(new BMIMeasurementView(context));
|
||||
unsorted.add(new WaterMeasurementView(context));
|
||||
unsorted.add(new MuscleMeasurementView(context));
|
||||
unsorted.add(new LBWMeasurementView(context));
|
||||
unsorted.add(new FatMeasurementView(context));
|
||||
unsorted.add(new BoneMeasurementView(context));
|
||||
unsorted.add(new WaistMeasurementView(context));
|
||||
unsorted.add(new WHtRMeasurementView(context));
|
||||
unsorted.add(new HipMeasurementView(context));
|
||||
unsorted.add(new WHRMeasurementView(context));
|
||||
unsorted.add(new BMRMeasurementView(context));
|
||||
unsorted.add(new CommentMeasurementView(context));
|
||||
|
||||
// Get sort order
|
||||
final String[] sortOrder = TextUtils.split(
|
||||
prefs.getString(PREF_MEASUREMENT_ORDER, ""), ",");
|
||||
|
||||
// Move views from unsorted to sorted in the correct order
|
||||
for (String key : sortOrder) {
|
||||
for (MeasurementView measurement : unsorted) {
|
||||
if (key.equals(measurement.getKey())) {
|
||||
sorted.add(measurement);
|
||||
unsorted.remove(measurement);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Any new views end up at the end
|
||||
sorted.addAll(unsorted);
|
||||
}
|
||||
|
||||
if (dateTimeOrder == DateTimeOrder.LAST) {
|
||||
sorted.add(new DateMeasurementView(context));
|
||||
sorted.add(new TimeMeasurementView(context));
|
||||
}
|
||||
|
||||
for (MeasurementView measurement : sorted) {
|
||||
measurement.updatePreferences(prefs);
|
||||
}
|
||||
|
||||
return measurementViews;
|
||||
return sorted;
|
||||
}
|
||||
|
||||
public static void saveMeasurementViewsOrder(Context context, List<MeasurementView> measurementViews) {
|
||||
ArrayList<String> order = new ArrayList<>();
|
||||
for (MeasurementView measurement : measurementViews) {
|
||||
order.add(measurement.getKey());
|
||||
}
|
||||
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||
.putString(PREF_MEASUREMENT_ORDER, TextUtils.join(",", order))
|
||||
.commit();
|
||||
}
|
||||
|
||||
private void initView(Context context) {
|
||||
@@ -180,9 +216,7 @@ public abstract class MeasurementView extends TableLayout {
|
||||
evaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.99f));
|
||||
spaceAfterEvaluatorView.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.01f));
|
||||
|
||||
onClickListenerEvaluation onClickListener = new onClickListenerEvaluation();
|
||||
measurementRow.setOnClickListener(onClickListener);
|
||||
evaluatorRow.setOnClickListener(onClickListener);
|
||||
setOnClickListener(new onClickListenerEvaluation());
|
||||
}
|
||||
|
||||
protected LinearLayout getIncDecLayout() {
|
||||
@@ -200,6 +234,8 @@ public abstract class MeasurementView extends TableLayout {
|
||||
return updateViews;
|
||||
}
|
||||
|
||||
public abstract String getKey();
|
||||
|
||||
public abstract void loadFrom(ScaleMeasurement measurement, ScaleMeasurement previousMeasurement);
|
||||
public abstract void saveTo(ScaleMeasurement measurement);
|
||||
|
||||
@@ -208,6 +244,7 @@ public abstract class MeasurementView extends TableLayout {
|
||||
|
||||
public abstract void updatePreferences(SharedPreferences preferences);
|
||||
|
||||
public CharSequence getName() { return nameView.getText(); }
|
||||
public abstract String getValueAsString();
|
||||
public void appendDiffValue(SpannableStringBuilder builder) { }
|
||||
public Drawable getIcon() { return iconView.getDrawable(); }
|
||||
@@ -339,8 +376,8 @@ public abstract class MeasurementView extends TableLayout {
|
||||
|
||||
protected AlertDialog getInputDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||
builder.setTitle(nameView.getText());
|
||||
builder.setIcon(iconView.getDrawable());
|
||||
builder.setTitle(getName());
|
||||
builder.setIcon(getIcon());
|
||||
|
||||
final EditText input = new EditText(getContext());
|
||||
|
||||
|
@@ -33,6 +33,11 @@ public class MuscleMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.ic_muscle));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "muscle";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("muscleEnable", true));
|
||||
|
@@ -34,13 +34,17 @@ import java.util.Date;
|
||||
public class TimeMeasurementView extends MeasurementView {
|
||||
private DateFormat timeFormat;
|
||||
private Date time;
|
||||
private static String TIME_KEY = "time";
|
||||
|
||||
public TimeMeasurementView(Context context) {
|
||||
super(context, context.getResources().getString(R.string.label_time), ContextCompat.getDrawable(context, R.drawable.ic_daysleft));
|
||||
timeFormat = android.text.format.DateFormat.getTimeFormat(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "time";
|
||||
}
|
||||
|
||||
private void setValue(Date newTime, boolean callListener) {
|
||||
if (!newTime.equals(time)) {
|
||||
time = newTime;
|
||||
@@ -73,12 +77,12 @@ public class TimeMeasurementView extends MeasurementView {
|
||||
|
||||
@Override
|
||||
public void restoreState(Bundle state) {
|
||||
setValue(new Date(state.getLong(TIME_KEY)), true);
|
||||
setValue(new Date(state.getLong(getKey())), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveState(Bundle state) {
|
||||
state.putLong(TIME_KEY, time.getTime());
|
||||
state.putLong(getKey(), time.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -31,6 +31,11 @@ public class WHRMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_whr), ContextCompat.getDrawable(context, R.drawable.ic_whr));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "whr";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("hipEnable", false)
|
||||
|
@@ -31,6 +31,11 @@ public class WHtRMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_whtr), ContextCompat.getDrawable(context, R.drawable.ic_whtr));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "whtr";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", false));
|
||||
|
@@ -31,6 +31,11 @@ public class WaistMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_waist), ContextCompat.getDrawable(context, R.drawable.ic_waist));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "waist";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waistEnable", false));
|
||||
|
@@ -34,6 +34,11 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.ic_water));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "water";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("waterEnable", true));
|
||||
|
@@ -32,6 +32,11 @@ public class WeightMeasurementView extends FloatMeasurementView {
|
||||
super(context, context.getResources().getString(R.string.label_weight), ContextCompat.getDrawable(context, R.drawable.ic_weight));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "weight";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePreferences(SharedPreferences preferences) {
|
||||
setVisible(preferences.getBoolean("weightEnable", true));
|
||||
|
@@ -222,5 +222,8 @@
|
||||
<string name="permission_bluetooth_info">openScale requires permission to access the coarse location to search for Bluetooth devices</string>
|
||||
<string name="permission_bluetooth_info_title">Information</string>
|
||||
<string name="label_next">Next</string>
|
||||
<string name="label_measurement_order">Measurement order</string>
|
||||
<string name="label_press_hold_reorder">Press and hold to reorder</string>
|
||||
<string name="label_set_default_order">Set default order</string>
|
||||
|
||||
</resources>
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/label_category_display">
|
||||
<PreferenceScreen android:title="@string/label_measurement_order" android:key="measurementOrder" />
|
||||
<CheckBoxPreference android:title="@string/label_fat" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="fatEnable" android:defaultValue="true"/>
|
||||
<SwitchPreference android:title="@string/label_fat_percentage" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key ="fatPercentageEnable" android:defaultValue="true"/>
|
||||
<CheckBoxPreference android:title="@string/label_water" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="waterEnable" android:defaultValue="true"/>
|
||||
|
Reference in New Issue
Block a user