mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-26 09:44:31 +02:00
added options to select if body fat, body water or muscle are displayed as absolute or relative values.
This commit is contained in:
@@ -27,6 +27,7 @@ import android.preference.Preference;
|
|||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.preference.PreferenceGroup;
|
import android.preference.PreferenceGroup;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.preference.SwitchPreference;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
@@ -41,6 +42,12 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class MeasurementPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class MeasurementPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
public static final String PREFERENCE_KEY_DELETE_ALL = "deleteAll";
|
public static final String PREFERENCE_KEY_DELETE_ALL = "deleteAll";
|
||||||
|
public static final String PREFERENCE_KEY_FAT = "fatEnable";
|
||||||
|
public static final String PREFERENCE_KEY_FAT_PERCENTAGE = "fatPercentageEnable";
|
||||||
|
public static final String PREFERENCE_KEY_WATER = "waterEnable";
|
||||||
|
public static final String PREFERENCE_KEY_WATER_PERCENTAGE = "waterPercentageEnable";
|
||||||
|
public static final String PREFERENCE_KEY_MUSCLE = "muscleEnable";
|
||||||
|
public static final String PREFERENCE_KEY_MUSCLE_PERCENTAGE = "musclePercentageEnable";
|
||||||
public static final String PREFERENCE_KEY_ESTIMATE_WATER = "estimateWaterEnable";
|
public static final String PREFERENCE_KEY_ESTIMATE_WATER = "estimateWaterEnable";
|
||||||
public static final String PREFERENCE_KEY_ESTIMATE_WATER_FORMULA = "estimateWaterFormula";
|
public static final String PREFERENCE_KEY_ESTIMATE_WATER_FORMULA = "estimateWaterFormula";
|
||||||
public static final String PREFERENCE_KEY_ESTIMATE_LBW = "estimateLBWEnable";
|
public static final String PREFERENCE_KEY_ESTIMATE_LBW = "estimateLBWEnable";
|
||||||
@@ -49,6 +56,14 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
|||||||
public static final String PREFERENCE_KEY_ESTIMATE_FAT_FORMULA = "estimateFatFormula";
|
public static final String PREFERENCE_KEY_ESTIMATE_FAT_FORMULA = "estimateFatFormula";
|
||||||
|
|
||||||
private Preference deleteAll;
|
private Preference deleteAll;
|
||||||
|
|
||||||
|
private CheckBoxPreference fatEnable;
|
||||||
|
private SwitchPreference fatPercentageEnable;
|
||||||
|
private CheckBoxPreference waterEnable;
|
||||||
|
private SwitchPreference waterPercentageEnable;
|
||||||
|
private CheckBoxPreference muscleEnable;
|
||||||
|
private SwitchPreference musclePercentageEnable;
|
||||||
|
|
||||||
private CheckBoxPreference estimateWaterEnable;
|
private CheckBoxPreference estimateWaterEnable;
|
||||||
private ListPreference estimateWaterFormula;
|
private ListPreference estimateWaterFormula;
|
||||||
private CheckBoxPreference estimateLBWEnable;
|
private CheckBoxPreference estimateLBWEnable;
|
||||||
@@ -72,6 +87,13 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
|||||||
estimateFatEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT);
|
estimateFatEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT);
|
||||||
estimateFatFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT_FORMULA);
|
estimateFatFormula = (ListPreference) findPreference(PREFERENCE_KEY_ESTIMATE_FAT_FORMULA);
|
||||||
|
|
||||||
|
fatEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_FAT);
|
||||||
|
fatPercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_FAT_PERCENTAGE);
|
||||||
|
waterEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_WATER);
|
||||||
|
waterPercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_WATER_PERCENTAGE);
|
||||||
|
muscleEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_MUSCLE);
|
||||||
|
musclePercentageEnable = (SwitchPreference) findPreference(PREFERENCE_KEY_MUSCLE_PERCENTAGE);
|
||||||
|
|
||||||
updateWaterListPreferences();
|
updateWaterListPreferences();
|
||||||
updateLBWListPreferences();
|
updateLBWListPreferences();
|
||||||
updateFatListPreferences();
|
updateFatListPreferences();
|
||||||
@@ -167,6 +189,24 @@ public class MeasurementPreferences extends PreferenceFragment implements Shared
|
|||||||
estimateFatFormula.setEnabled(false);
|
estimateFatFormula.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fatEnable.isChecked()) {
|
||||||
|
fatPercentageEnable.setEnabled(true);
|
||||||
|
} else {
|
||||||
|
fatPercentageEnable.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (waterEnable.isChecked()) {
|
||||||
|
waterPercentageEnable.setEnabled(true);
|
||||||
|
} else {
|
||||||
|
waterPercentageEnable.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (muscleEnable.isChecked()) {
|
||||||
|
musclePercentageEnable.setEnabled(true);
|
||||||
|
} else {
|
||||||
|
musclePercentageEnable.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
estimateWaterFormula.setSummary(EstimatedWaterMetric.getEstimatedMetric(EstimatedWaterMetric.FORMULA.valueOf(estimateWaterFormula.getValue())).getName());
|
estimateWaterFormula.setSummary(EstimatedWaterMetric.getEstimatedMetric(EstimatedWaterMetric.FORMULA.valueOf(estimateWaterFormula.getValue())).getName());
|
||||||
estimateLBWFormula.setSummary(EstimatedLBWMetric.getEstimatedMetric(EstimatedLBWMetric.FORMULA.valueOf(estimateLBWFormula.getValue())).getName());
|
estimateLBWFormula.setSummary(EstimatedLBWMetric.getEstimatedMetric(EstimatedLBWMetric.FORMULA.valueOf(estimateLBWFormula.getValue())).getName());
|
||||||
estimateFatFormula.setSummary(EstimatedFatMetric.getEstimatedMetric(EstimatedFatMetric.FORMULA.valueOf(estimateFatFormula.getValue())).getName());
|
estimateFatFormula.setSummary(EstimatedFatMetric.getEstimatedMetric(EstimatedFatMetric.FORMULA.valueOf(estimateFatFormula.getValue())).getName());
|
||||||
|
@@ -21,12 +21,14 @@ import android.support.v4.content.ContextCompat;
|
|||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
|
import com.health.openscale.core.datatypes.ScaleUser;
|
||||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||||
|
|
||||||
public class FatMeasurementView extends FloatMeasurementView {
|
public class FatMeasurementView extends FloatMeasurementView {
|
||||||
|
|
||||||
private boolean estimateFatEnable;
|
private boolean estimateFatEnable;
|
||||||
|
private boolean percentageEnable;
|
||||||
|
|
||||||
public FatMeasurementView(Context context) {
|
public FatMeasurementView(Context context) {
|
||||||
super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.ic_fat));
|
super(context, context.getResources().getString(R.string.label_fat), ContextCompat.getDrawable(context, R.drawable.ic_fat));
|
||||||
@@ -36,26 +38,43 @@ public class FatMeasurementView extends FloatMeasurementView {
|
|||||||
public void updatePreferences(SharedPreferences preferences) {
|
public void updatePreferences(SharedPreferences preferences) {
|
||||||
setVisible(preferences.getBoolean("fatEnable", true));
|
setVisible(preferences.getBoolean("fatEnable", true));
|
||||||
estimateFatEnable = preferences.getBoolean("estimateFatEnable", false);
|
estimateFatEnable = preferences.getBoolean("estimateFatEnable", false);
|
||||||
|
percentageEnable = preferences.getBoolean("fatPercentageEnable", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
return measurement.getFat();
|
if (percentageEnable) {
|
||||||
|
return measurement.getFat();
|
||||||
|
}
|
||||||
|
|
||||||
|
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getFat();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
measurement.setFat(value);
|
if (percentageEnable) {
|
||||||
|
measurement.setFat(value);
|
||||||
|
} else {
|
||||||
|
measurement.setFat(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getUnit() {
|
protected String getUnit() {
|
||||||
return "%";
|
if (percentageEnable) {
|
||||||
|
return "%";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
return 80;
|
if (percentageEnable) {
|
||||||
|
return 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -21,11 +21,14 @@ import android.support.v4.content.ContextCompat;
|
|||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
|
import com.health.openscale.core.datatypes.ScaleUser;
|
||||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||||
|
|
||||||
public class MuscleMeasurementView extends FloatMeasurementView {
|
public class MuscleMeasurementView extends FloatMeasurementView {
|
||||||
|
|
||||||
|
private boolean percentageEnable;
|
||||||
|
|
||||||
public MuscleMeasurementView(Context context) {
|
public MuscleMeasurementView(Context context) {
|
||||||
super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.ic_muscle));
|
super(context, context.getResources().getString(R.string.label_muscle), ContextCompat.getDrawable(context, R.drawable.ic_muscle));
|
||||||
}
|
}
|
||||||
@@ -33,26 +36,43 @@ public class MuscleMeasurementView extends FloatMeasurementView {
|
|||||||
@Override
|
@Override
|
||||||
public void updatePreferences(SharedPreferences preferences) {
|
public void updatePreferences(SharedPreferences preferences) {
|
||||||
setVisible(preferences.getBoolean("muscleEnable", true));
|
setVisible(preferences.getBoolean("muscleEnable", true));
|
||||||
|
percentageEnable = preferences.getBoolean("musclePercentageEnable", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
return measurement.getMuscle();
|
if (percentageEnable) {
|
||||||
|
return measurement.getMuscle();
|
||||||
|
}
|
||||||
|
|
||||||
|
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getMuscle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
measurement.setMuscle(value);
|
if (percentageEnable) {
|
||||||
|
measurement.setMuscle(value);
|
||||||
|
} else {
|
||||||
|
measurement.setMuscle(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getUnit() {
|
protected String getUnit() {
|
||||||
return "%";
|
if (percentageEnable) {
|
||||||
|
return "%";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
return 80;
|
if (percentageEnable) {
|
||||||
|
return 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -21,12 +21,14 @@ import android.support.v4.content.ContextCompat;
|
|||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
|
import com.health.openscale.core.datatypes.ScaleUser;
|
||||||
import com.health.openscale.core.evaluation.EvaluationResult;
|
import com.health.openscale.core.evaluation.EvaluationResult;
|
||||||
import com.health.openscale.core.evaluation.EvaluationSheet;
|
import com.health.openscale.core.evaluation.EvaluationSheet;
|
||||||
|
|
||||||
public class WaterMeasurementView extends FloatMeasurementView {
|
public class WaterMeasurementView extends FloatMeasurementView {
|
||||||
|
|
||||||
private boolean estimateWaterEnable;
|
private boolean estimateWaterEnable;
|
||||||
|
private boolean percentageEnable;
|
||||||
|
|
||||||
public WaterMeasurementView(Context context) {
|
public WaterMeasurementView(Context context) {
|
||||||
super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.ic_water));
|
super(context, context.getResources().getString(R.string.label_water), ContextCompat.getDrawable(context, R.drawable.ic_water));
|
||||||
@@ -36,26 +38,43 @@ public class WaterMeasurementView extends FloatMeasurementView {
|
|||||||
public void updatePreferences(SharedPreferences preferences) {
|
public void updatePreferences(SharedPreferences preferences) {
|
||||||
setVisible(preferences.getBoolean("waterEnable", true));
|
setVisible(preferences.getBoolean("waterEnable", true));
|
||||||
estimateWaterEnable = preferences.getBoolean("estimateWaterEnable", false);
|
estimateWaterEnable = preferences.getBoolean("estimateWaterEnable", false);
|
||||||
|
percentageEnable = preferences.getBoolean("waterPercentageEnable", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
protected float getMeasurementValue(ScaleMeasurement measurement) {
|
||||||
return measurement.getWater();
|
if (percentageEnable) {
|
||||||
|
return measurement.getWater();
|
||||||
|
}
|
||||||
|
|
||||||
|
return measurement.getConvertedWeight(getScaleUser().getScaleUnit()) / 100.0f * measurement.getWater();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
protected void setMeasurementValue(float value, ScaleMeasurement measurement) {
|
||||||
measurement.setWater(value);
|
if (percentageEnable) {
|
||||||
|
measurement.setWater(value);
|
||||||
|
} else {
|
||||||
|
measurement.setWater(100.0f / measurement.getConvertedWeight(getScaleUser().getScaleUnit()) * value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getUnit() {
|
protected String getUnit() {
|
||||||
return "%";
|
if (percentageEnable) {
|
||||||
|
return "%";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ScaleUser.UNIT_STRING[getScaleUser().getScaleUnit()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float getMaxValue() {
|
protected float getMaxValue() {
|
||||||
return 80;
|
if (percentageEnable) {
|
||||||
|
return 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -160,4 +160,7 @@
|
|||||||
<string name="close_drawer">schließen</string>
|
<string name="close_drawer">schließen</string>
|
||||||
<string name="info_bluetooth_no_device_set">Kein Bluetooth Gerät ausgewählt</string>
|
<string name="info_bluetooth_no_device_set">Kein Bluetooth Gerät ausgewählt</string>
|
||||||
<string name="info_new_data_duplicated">Messung mit gleichen Datum und Uhrzeit exisitiert bereits</string>
|
<string name="info_new_data_duplicated">Messung mit gleichen Datum und Uhrzeit exisitiert bereits</string>
|
||||||
|
<string name="label_fat_percentage">Körperfett in %</string>
|
||||||
|
<string name="label_water_percentage">Wasseranteil in %</string>
|
||||||
|
<string name="label_muscle_percentage">Muskelanteil in %</string>
|
||||||
</resources>
|
</resources>
|
@@ -40,6 +40,10 @@
|
|||||||
<string name="label_bone">Bone mass</string>
|
<string name="label_bone">Bone mass</string>
|
||||||
<string name="label_smartUserAssign">Smart User assignment</string>
|
<string name="label_smartUserAssign">Smart User assignment</string>
|
||||||
|
|
||||||
|
<string name="label_fat_percentage">Body fat in %</string>
|
||||||
|
<string name="label_water_percentage">Body water in %</string>
|
||||||
|
<string name="label_muscle_percentage">Muscle in %</string>
|
||||||
|
|
||||||
<plurals name="label_days">
|
<plurals name="label_days">
|
||||||
<item quantity="one">%d day</item>
|
<item quantity="one">%d day</item>
|
||||||
<item quantity="other">%d days</item>
|
<item quantity="other">%d days</item>
|
||||||
|
@@ -2,8 +2,11 @@
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<PreferenceCategory android:title="@string/label_category_display">
|
<PreferenceCategory android:title="@string/label_category_display">
|
||||||
<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"/>
|
<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"/>
|
<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"/>
|
||||||
|
<SwitchPreference android:title="@string/label_water_percentage" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key ="waterPercentageEnable" android:defaultValue="true"/>
|
||||||
<CheckBoxPreference android:title="@string/label_muscle" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="muscleEnable" android:defaultValue="true"/>
|
<CheckBoxPreference android:title="@string/label_muscle" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="muscleEnable" android:defaultValue="true"/>
|
||||||
|
<SwitchPreference android:title="@string/label_muscle_percentage" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key ="musclePercentageEnable" android:defaultValue="true"/>
|
||||||
<CheckBoxPreference android:title="@string/label_lbw" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="lbwEnable" android:defaultValue="false"/>
|
<CheckBoxPreference android:title="@string/label_lbw" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="lbwEnable" android:defaultValue="false"/>
|
||||||
<CheckBoxPreference android:title="@string/label_bone" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="boneEnable" android:defaultValue="false"/>
|
<CheckBoxPreference android:title="@string/label_bone" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="boneEnable" android:defaultValue="false"/>
|
||||||
<CheckBoxPreference android:title="@string/label_waist" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="waistEnable" android:defaultValue="false"/>
|
<CheckBoxPreference android:title="@string/label_waist" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="waistEnable" android:defaultValue="false"/>
|
||||||
|
Reference in New Issue
Block a user