1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-26 03:46:49 +01:00

honor Imperial units settings in Widget, Activity list and Workouts, fixes #2041

This commit is contained in:
vanous 2021-01-23 21:42:12 +01:00
parent fb2c9158e4
commit 57fe621ba8
5 changed files with 118 additions and 26 deletions

View File

@ -59,6 +59,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenterv2;
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.WidgetAlarmsActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@ -155,20 +156,31 @@ public class Widget extends AppWidgetProvider {
long[] dailyTotals = getSteps();
int steps = (int) dailyTotals[0];
int sleep = (int) dailyTotals[1];
ActivityUser activityUser = new ActivityUser();
int stepGoal = activityUser.getStepsGoal();
int sleepGoal = activityUser.getSleepDuration();
int sleepGoalMinutes = sleepGoal * 60;
int distanceGoal = activityUser.getDistanceMeters() * 100;
int stepLength = activityUser.getStepLengthCm();
int distanceFormatted = (int) (dailyTotals[0] * stepLength / 100);
double distanceMeters = dailyTotals[0] * stepLength / 100;
double distanceFeet = distanceMeters * 3.28084f;
double distanceFormatted = 0;
String unit = "###m";
if (distanceFormatted > 2000) {
distanceFormatted = distanceFormatted / 1000;
distanceFormatted = distanceMeters;
if (distanceMeters > 2000) {
distanceFormatted = distanceMeters / 1000;
unit = "###.#km";
}
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
unit = "###ft";
distanceFormatted = distanceFeet;
if (distanceFeet > 6000) {
distanceFormatted = distanceFeet * 0.0001893939f;
unit = "###.#mi";
}
}
DecimalFormat df = new DecimalFormat(unit);
views.setTextViewText(R.id.todaywidget_steps, String.format("%1s", steps));

View File

@ -312,6 +312,8 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
private void makeSummaryContent(BaseActivitySummary item) {
//make view of data from summaryData of item
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
String UNIT_IMPERIAL = GBApplication.getContext().getString(R.string.p_unit_imperial);
TableLayout fieldLayout = findViewById(R.id.summaryDetails);
fieldLayout.removeAllViews(); //remove old widgets
@ -349,27 +351,56 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
double value = innerData.getDouble("value");
if (!show_raw_data) {
//special casing here:
//special casing here + imperial units handling
switch (unit) {
case "meters_second":
value = value * 3.6;
unit = "km_h";
break;
case "seconds_m":
value = value * (1000 / 60D);
unit = "minutes_km";
break;
case "seconds_km":
value = value / 60;
unit = "minutes_km";
break;
case "meters":
if (value > 2000) {
value = value / 1000;
unit = "km";
case "cm":
if (units.equals(UNIT_IMPERIAL)) {
value = value * 0.0328084;
unit = "ft";
}
break;
case "meters_second":
if (units.equals(UNIT_IMPERIAL)) {
value = value * 2.236936D;
unit = "mi_h";
} else { //metric
value = value * 3.6;
unit = "km_h";
}
break;
case "seconds_m":
if (units.equals(UNIT_IMPERIAL)) {
value = value * (1609.344 / 60D);
unit = "minutes_mi";
} else { //metric
value = value * (1000 / 60D);
unit = "minutes_km";
}
break;
case "seconds_km":
if (units.equals(UNIT_IMPERIAL)) {
value = value / 60D * 1.609344;
unit = "minutes_mi";
} else { //metric
value = value / 60D;
unit = "minutes_km";
}
break;
case "meters":
if (units.equals(UNIT_IMPERIAL)) {
value = value * 3.28084D;
unit = "ft";
if (value > 6000) {
value = value * 0.0001893939D;
unit = "mi";
}
} else { //metric
if (value > 2000) {
value = value / 1000;
unit = "km";
}
}
break;
}
}

View File

@ -23,7 +23,9 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.adapter.AbstractActivityListingAdapter;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySession;
@ -244,14 +246,28 @@ public class ActivityListingAdapter extends AbstractActivityListingAdapter<Activ
@Override
protected String getDistanceLabel(ActivitySession item) {
float distance = item.getDistance();
double distanceMeters = item.getDistance();
double distanceFeet = distanceMeters * 3.28084f;
double distanceFormatted = 0;
String unit = "###m";
if (distance > 2000) {
distance = distance / 1000;
distanceFormatted = distanceMeters;
if (distanceMeters > 2000) {
distanceFormatted = distanceMeters / 1000;
unit = "###.#km";
}
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
unit = "###ft";
distanceFormatted = distanceFeet;
if (distanceFeet > 6000) {
distanceFormatted = distanceFeet * 0.0001893939f;
unit = "###.#mi";
}
}
DecimalFormat df = new DecimalFormat(unit);
return df.format(distance);
return df.format(distanceFormatted);
}
@Override

View File

@ -39,6 +39,7 @@ import java.util.concurrent.TimeUnit;
import de.greenrobot.dao.query.QueryBuilder;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
@ -221,6 +222,9 @@ public class ActivitySummariesAdapter extends AbstractActivityListingAdapter<Bas
durationSumView.setText(String.format("%s", DateTimeUtils.formatDurationHoursMinutes((long) durationSum, TimeUnit.MILLISECONDS)));
caloriesBurntSumView.setText(String.format("%s %s", (long) caloriesBurntSum, context.getString(R.string.calories_unit)));
distanceSumView.setText(String.format("%s %s", df.format(distanceSum / 1000), context.getString(R.string.km)));
distanceSumView.setText(getLabel(distanceSum));
activeSecondsSumView.setText(String.format("%s", DateTimeUtils.formatDurationHoursMinutes((long) activeSecondsSum, TimeUnit.SECONDS)));
activitiesCountView.setText(String.valueOf(activitiesCount));
String activityName = context.getString(R.string.activity_summaries_all_activities);
@ -312,6 +316,31 @@ public class ActivitySummariesAdapter extends AbstractActivityListingAdapter<Bas
return null;
}
protected String getLabel(double distance) {
double distanceMetric = distance;
double distanceImperial = distanceMetric * 3.28084f;
double distanceFormatted = 0;
String unit = "###m";
distanceFormatted = distanceMetric;
if (distanceMetric > 2000) {
distanceFormatted = distanceMetric / 1000;
unit = "###.#km";
}
String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, GBApplication.getContext().getString(R.string.p_unit_metric));
if (units.equals(GBApplication.getContext().getString(R.string.p_unit_imperial))) {
unit = "###ft";
distanceFormatted = distanceImperial;
if (distanceImperial > 6000) {
distanceFormatted = distanceImperial * 0.0001893939f;
unit = "###.#mi";
}
}
DecimalFormat df = new DecimalFormat(unit);
return df.format(distanceFormatted);
}
@Override
protected String getHrLabel(BaseActivitySummary item) {
return null;

View File

@ -1035,9 +1035,12 @@
<!-- activity summary units-->
<string name="meters">m</string>
<string name="cm">cm</string>
<string name="ft">ft</string>
<string name="steps_unit">steps</string>
<string name="meters_second">m/s</string>
<string name="km_h">km/h</string>
<string name="mi_h">mi/h</string>
<string name="minutes_mi">min/mi</string>
<string name="strokes_second">str/s</string>
<string name="strokes_unit">str</string>
<string name="seconds">sec</string>
@ -1050,6 +1053,7 @@
<string name="minutes_km">min/km</string>
<string name="bpm">bpm</string>
<string name="km">km</string>
<string name="mi">mi</string>
<!-- activity summary groups-->
<string name="Strokes">Strokes</string>
<string name="Swimming">Swimming</string>