Charts use preferred units and rate.

Fixes #150.
This commit is contained in:
Dennis Guse
2020-03-13 22:56:50 +01:00
parent ac528f9a10
commit d23db5bafd
2 changed files with 21 additions and 20 deletions
@@ -295,6 +295,10 @@ public class ChartView extends View {
series[index].setEnabled(enabled); series[index].setEnabled(enabled);
} }
public boolean getMetricUnits() {
return metricUnits;
}
/** /**
* Sets metric units. * Sets metric units.
* *
@@ -304,6 +308,10 @@ public class ChartView extends View {
metricUnits = value; metricUnits = value;
} }
public boolean getReportSpeed() {
return reportSpeed;
}
/** /**
* Sets report speed. * Sets report speed.
* *
@@ -486,7 +494,6 @@ public class ChartView extends View {
@Override @Override
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
synchronized (chartData) { synchronized (chartData) {
canvas.save(); canvas.save();
canvas.drawColor(Color.WHITE); canvas.drawColor(Color.WHITE);
@@ -76,8 +76,6 @@ public class ChartFragment extends Fragment implements TrackDataListener {
private TripStatisticsUpdater tripStatisticsUpdater; private TripStatisticsUpdater tripStatisticsUpdater;
private long startTime; private long startTime;
private boolean metricUnits = true;
private boolean reportSpeed = true;
private int recordingDistanceInterval; private int recordingDistanceInterval;
// Modes of operation // Modes of operation
@@ -90,13 +88,9 @@ public class ChartFragment extends Fragment implements TrackDataListener {
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override @Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (!isResumed()) {
return;
}
if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) {
boolean metric = PreferencesUtils.isMetricUnits(getContext()); boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
if (metricUnits != metric) { if (metricUnits != chartView.getMetricUnits()) {
metricUnits = metric;
chartView.setMetricUnits(metricUnits); chartView.setMetricUnits(metricUnits);
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
@@ -109,9 +103,8 @@ public class ChartFragment extends Fragment implements TrackDataListener {
} }
} }
if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
boolean speed = PreferencesUtils.isReportSpeed(getContext()); boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext());
if (reportSpeed != speed) { if (reportSpeed != chartView.getReportSpeed()) {
reportSpeed = speed;
chartView.setReportSpeed(reportSpeed); chartView.setReportSpeed(reportSpeed);
setSeriesEnabled(ChartView.SPEED_SERIES, reportSpeed); setSeriesEnabled(ChartView.SPEED_SERIES, reportSpeed);
setSeriesEnabled(ChartView.PACE_SERIES, !reportSpeed); setSeriesEnabled(ChartView.PACE_SERIES, !reportSpeed);
@@ -152,7 +145,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
chartByDistance = getArguments().getBoolean(KEY_CHART_VIEW_BY_DISTANCE_KEY, chartByDistance); chartByDistance = getArguments().getBoolean(KEY_CHART_VIEW_BY_DISTANCE_KEY, true);
recordingDistanceInterval = PreferencesUtils.getRecordingDistanceIntervalDefault(getContext()); recordingDistanceInterval = PreferencesUtils.getRecordingDistanceIntervalDefault(getContext());
@@ -178,6 +171,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
super.onResume(); super.onResume();
resumeTrackDataHub(); resumeTrackDataHub();
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null);
checkChartSettings(); checkChartSettings();
getActivity().runOnUiThread(updateChart); getActivity().runOnUiThread(updateChart);
@@ -277,10 +271,10 @@ public class ChartFragment extends Fragment implements TrackDataListener {
private void checkChartSettings() { private void checkChartSettings() {
boolean needUpdate = false; boolean needUpdate = false;
if (setSeriesEnabled(ChartView.SPEED_SERIES, reportSpeed)) { if (setSeriesEnabled(ChartView.SPEED_SERIES, chartView.getReportSpeed())) {
needUpdate = true; needUpdate = true;
} }
if (setSeriesEnabled(ChartView.PACE_SERIES, !reportSpeed)) { if (setSeriesEnabled(ChartView.PACE_SERIES, !chartView.getReportSpeed())) {
needUpdate = true; needUpdate = true;
} }
@@ -381,7 +375,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics(); TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
if (chartByDistance) { if (chartByDistance) {
double distance = tripStatistics.getTotalDistance() * UnitConversions.M_TO_KM; double distance = tripStatistics.getTotalDistance() * UnitConversions.M_TO_KM;
if (!metricUnits) { if (!chartView.getMetricUnits()) {
distance *= UnitConversions.KM_TO_MI; distance *= UnitConversions.KM_TO_MI;
} }
timeOrDistance = distance; timeOrDistance = distance;
@@ -390,12 +384,12 @@ public class ChartFragment extends Fragment implements TrackDataListener {
} }
elevation = tripStatisticsUpdater.getSmoothedElevation(); elevation = tripStatisticsUpdater.getSmoothedElevation();
if (!metricUnits) { if (!chartView.getMetricUnits()) {
elevation *= UnitConversions.M_TO_FT; elevation *= UnitConversions.M_TO_FT;
} }
speed = tripStatisticsUpdater.getSmoothedSpeed() * UnitConversions.MS_TO_KMH; speed = tripStatisticsUpdater.getSmoothedSpeed() * UnitConversions.MS_TO_KMH;
if (!metricUnits) { if (!chartView.getMetricUnits()) {
speed *= UnitConversions.KM_TO_MI; speed *= UnitConversions.KM_TO_MI;
} }
pace = speed == 0 ? 0.0 : 60.0 / speed; pace = speed == 0 ? 0.0 : 60.0 / speed;
@@ -441,12 +435,12 @@ public class ChartFragment extends Fragment implements TrackDataListener {
@VisibleForTesting @VisibleForTesting
void setMetricUnits(boolean value) { void setMetricUnits(boolean value) {
metricUnits = value; chartView.setMetricUnits(value);
} }
@VisibleForTesting @VisibleForTesting
void setReportSpeed(boolean value) { void setReportSpeed(boolean value) {
reportSpeed = value; chartView.setReportSpeed(value);
} }
@VisibleForTesting @VisibleForTesting