forked from upstream-mirrors/OpenTracks
Statistics*Fragement now uses SharedPreferenceListener instead of accessing preferences repeatedly.
This commit is contained in:
@@ -51,11 +51,19 @@ import de.dennisguse.opentracks.viewmodels.SensorDataModel;
|
|||||||
* @author Sandor Dornbush
|
* @author Sandor Dornbush
|
||||||
* @author Rodrigo Damazio
|
* @author Rodrigo Damazio
|
||||||
*/
|
*/
|
||||||
//TODO During updateUI(): do not call PreferenceUtils (it is slow) rather use sharedPreferenceChangeListener.
|
|
||||||
public class StatisticsRecordedFragment extends Fragment {
|
public class StatisticsRecordedFragment extends Fragment {
|
||||||
|
|
||||||
private static final String TRACK_ID_KEY = "trackId";
|
private static final String TRACK_ID_KEY = "trackId";
|
||||||
|
|
||||||
|
public static StatisticsRecordedFragment newInstance(Track.Id trackId) {
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putParcelable(TRACK_ID_KEY, trackId);
|
||||||
|
|
||||||
|
StatisticsRecordedFragment fragment = new StatisticsRecordedFragment();
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
private TrackStatistics trackStatistics;
|
private TrackStatistics trackStatistics;
|
||||||
private SensorStatistics sensorStatistics;
|
private SensorStatistics sensorStatistics;
|
||||||
private SensorsAdapter sensorsAdapter;
|
private SensorsAdapter sensorsAdapter;
|
||||||
@@ -65,26 +73,31 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
|
|
||||||
private StatisticsRecordedBinding viewBinding;
|
private StatisticsRecordedBinding viewBinding;
|
||||||
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> {
|
private boolean preferenceMetricUnits;
|
||||||
if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
private boolean preferenceReportSpeed;
|
||||||
if (isResumed()) {
|
|
||||||
getActivity().runOnUiThread(() -> {
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
|
||||||
if (isResumed()) {
|
boolean updateUInecessary = false;
|
||||||
updateUI();
|
|
||||||
}
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) {
|
||||||
});
|
updateUInecessary = true;
|
||||||
}
|
preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
||||||
|
updateUInecessary = true;
|
||||||
|
preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key != null && updateUInecessary && isResumed()) {
|
||||||
|
getActivity().runOnUiThread(() -> {
|
||||||
|
if (isResumed()) {
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static StatisticsRecordedFragment newInstance(Track.Id trackId) {
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putParcelable(TRACK_ID_KEY, trackId);
|
|
||||||
|
|
||||||
StatisticsRecordedFragment fragment = new StatisticsRecordedFragment();
|
|
||||||
fragment.setArguments(bundle);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
@@ -113,7 +126,8 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
SharedPreferences sharedPreferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
||||||
|
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
||||||
|
|
||||||
loadStatistics();
|
loadStatistics();
|
||||||
}
|
}
|
||||||
@@ -142,13 +156,10 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateUI() {
|
private void updateUI() {
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
|
||||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
|
||||||
|
|
||||||
// Set total distance
|
// Set total distance
|
||||||
{
|
{
|
||||||
double totalDistance = trackStatistics == null ? Double.NaN : trackStatistics.getTotalDistance();
|
double totalDistance = trackStatistics == null ? Double.NaN : trackStatistics.getTotalDistance();
|
||||||
Pair<String, String> parts = StringUtils.getDistanceParts(getContext(), totalDistance, metricUnits);
|
Pair<String, String> parts = StringUtils.getDistanceParts(getContext(), totalDistance, preferenceMetricUnits);
|
||||||
|
|
||||||
viewBinding.statsDistanceValue.setText(parts.first);
|
viewBinding.statsDistanceValue.setText(parts.first);
|
||||||
viewBinding.statsDistanceUnit.setText(parts.second);
|
viewBinding.statsDistanceUnit.setText(parts.second);
|
||||||
@@ -169,9 +180,9 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
// Set average speed/pace
|
// Set average speed/pace
|
||||||
{
|
{
|
||||||
double speed = trackStatistics != null ? trackStatistics.getAverageSpeed() : Double.NaN;
|
double speed = trackStatistics != null ? trackStatistics.getAverageSpeed() : Double.NaN;
|
||||||
viewBinding.statsAverageSpeedLabel.setText(reportSpeed ? R.string.stats_average_speed : R.string.stats_average_pace);
|
viewBinding.statsAverageSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_average_speed : R.string.stats_average_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsAverageSpeedValue.setText(parts.first);
|
viewBinding.statsAverageSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsAverageSpeedUnit.setText(parts.second);
|
viewBinding.statsAverageSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -180,9 +191,9 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
{
|
{
|
||||||
double speed = trackStatistics == null ? Double.NaN : trackStatistics.getMaxSpeed();
|
double speed = trackStatistics == null ? Double.NaN : trackStatistics.getMaxSpeed();
|
||||||
|
|
||||||
viewBinding.statsMaxSpeedLabel.setText(reportSpeed ? R.string.stats_max_speed : R.string.stats_fastest_pace);
|
viewBinding.statsMaxSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_max_speed : R.string.stats_fastest_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsMaxSpeedValue.setText(parts.first);
|
viewBinding.statsMaxSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsMaxSpeedUnit.setText(parts.second);
|
viewBinding.statsMaxSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -191,9 +202,9 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
{
|
{
|
||||||
double speed = trackStatistics != null ? trackStatistics.getAverageMovingSpeed() : Double.NaN;
|
double speed = trackStatistics != null ? trackStatistics.getAverageMovingSpeed() : Double.NaN;
|
||||||
|
|
||||||
viewBinding.statsMovingSpeedLabel.setText(reportSpeed ? R.string.stats_average_moving_speed : R.string.stats_average_moving_pace);
|
viewBinding.statsMovingSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_average_moving_speed : R.string.stats_average_moving_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsMovingSpeedValue.setText(parts.first);
|
viewBinding.statsMovingSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsMovingSpeedUnit.setText(parts.second);
|
viewBinding.statsMovingSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -209,11 +220,11 @@ public class StatisticsRecordedFragment extends Fragment {
|
|||||||
|
|
||||||
Pair<String, String> parts;
|
Pair<String, String> parts;
|
||||||
|
|
||||||
parts = StringUtils.formatElevation(getContext(), elevationGain_m, metricUnits);
|
parts = StringUtils.formatElevation(getContext(), elevationGain_m, preferenceMetricUnits);
|
||||||
viewBinding.statsElevationGainValue.setText(parts.first);
|
viewBinding.statsElevationGainValue.setText(parts.first);
|
||||||
viewBinding.statsElevationGainUnit.setText(parts.second);
|
viewBinding.statsElevationGainUnit.setText(parts.second);
|
||||||
|
|
||||||
parts = StringUtils.formatElevation(getContext(), elevationLoss_m, metricUnits);
|
parts = StringUtils.formatElevation(getContext(), elevationLoss_m, preferenceMetricUnits);
|
||||||
viewBinding.statsElevationLossValue.setText(parts.first);
|
viewBinding.statsElevationLossValue.setText(parts.first);
|
||||||
viewBinding.statsElevationLossUnit.setText(parts.second);
|
viewBinding.statsElevationLossUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,41 +44,64 @@ import de.dennisguse.opentracks.viewmodels.SensorDataModel;
|
|||||||
* @author Sandor Dornbush
|
* @author Sandor Dornbush
|
||||||
* @author Rodrigo Damazio
|
* @author Rodrigo Damazio
|
||||||
*/
|
*/
|
||||||
//TODO isRecording should not be relevant anymore as we now have StatisticRecordedFragment.
|
|
||||||
//TODO During updateUI(): do not call PreferenceUtils (it is slow) rather use sharedPreferenceChangeListener.
|
|
||||||
public class StatisticsRecordingFragment extends Fragment implements TrackDataListener {
|
public class StatisticsRecordingFragment extends Fragment implements TrackDataListener {
|
||||||
|
|
||||||
private static final String TAG = StatisticsRecordingFragment.class.getSimpleName();
|
private static final String TAG = StatisticsRecordingFragment.class.getSimpleName();
|
||||||
|
|
||||||
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS;
|
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS;
|
||||||
|
|
||||||
|
public static Fragment newInstance() {
|
||||||
|
return new StatisticsRecordingFragment();
|
||||||
|
}
|
||||||
|
|
||||||
private TrackDataHub trackDataHub;
|
private TrackDataHub trackDataHub;
|
||||||
|
|
||||||
private Handler handlerUpdateUI;
|
private Handler handlerUpdateUI;
|
||||||
|
|
||||||
private TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
private TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
||||||
|
|
||||||
private TrackPoint lastTrackPoint;
|
private TrackPoint lastTrackPoint;
|
||||||
|
|
||||||
private TrackStatistics lastTrackStatistics;
|
private TrackStatistics lastTrackStatistics;
|
||||||
|
|
||||||
private String category = "";
|
private String category = "";
|
||||||
|
|
||||||
private StatisticsRecordingBinding viewBinding;
|
private StatisticsRecordingBinding viewBinding;
|
||||||
|
|
||||||
private SensorsAdapter sensorsAdapter;
|
private SensorsAdapter sensorsAdapter;
|
||||||
|
|
||||||
public static Fragment newInstance() {
|
private boolean preferenceMetricUnits;
|
||||||
return new StatisticsRecordingFragment();
|
private boolean preferenceReportSpeed;
|
||||||
}
|
private boolean preferenceShowElevation;
|
||||||
|
private boolean preferenceShowCoordinate;
|
||||||
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (preferences, key) -> {
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
|
||||||
if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
boolean updateUInecessary = false;
|
||||||
if (isResumed()) {
|
|
||||||
getActivity().runOnUiThread(() -> {
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) {
|
||||||
if (isResumed()) {
|
updateUInecessary = true;
|
||||||
updateUI();
|
preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext());
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
||||||
|
updateUInecessary = true;
|
||||||
|
preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_show_grade_elevation_key, key)) {
|
||||||
|
updateUInecessary = true;
|
||||||
|
preferenceShowElevation = PreferencesUtils.isShowStatsElevation(sharedPreferences, getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_show_coordinate_key, key)) {
|
||||||
|
updateUInecessary = true;
|
||||||
|
preferenceShowCoordinate = PreferencesUtils.isStatsShowCoordinate(sharedPreferences, getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key != null && updateUInecessary && isResumed()) {
|
||||||
|
getActivity().runOnUiThread(() -> {
|
||||||
|
if (isResumed()) {
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -120,9 +143,11 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
resumeTrackDataHub();
|
resumeTrackDataHub();
|
||||||
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
SharedPreferences preferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
|
||||||
|
sharedPreferenceChangeListener.onSharedPreferenceChanged(preferences, null);
|
||||||
trackRecordingServiceConnection.startConnection(getContext());
|
trackRecordingServiceConnection.startConnection(getContext());
|
||||||
|
|
||||||
|
updateUIeachSecond.run();
|
||||||
handlerUpdateUI.post(updateUIeachSecond);
|
handlerUpdateUI.post(updateUIeachSecond);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,8 +314,6 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
|
|
||||||
// Set elevation gain
|
// Set elevation gain
|
||||||
private void setTotalElevationGain(Float elevationGain_m) {
|
private void setTotalElevationGain(Float elevationGain_m) {
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
|
||||||
|
|
||||||
Float totalElevationGain = elevationGain_m;
|
Float totalElevationGain = elevationGain_m;
|
||||||
|
|
||||||
if (lastTrackStatistics != null && lastTrackStatistics.hasTotalElevationGain()) {
|
if (lastTrackStatistics != null && lastTrackStatistics.hasTotalElevationGain()) {
|
||||||
@@ -301,15 +324,13 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.formatElevation(getContext(), totalElevationGain, metricUnits);
|
Pair<String, String> parts = StringUtils.formatElevation(getContext(), totalElevationGain, preferenceMetricUnits);
|
||||||
viewBinding.statsElevationGainValue.setText(parts.first);
|
viewBinding.statsElevationGainValue.setText(parts.first);
|
||||||
viewBinding.statsElevationGainUnit.setText(parts.second);
|
viewBinding.statsElevationGainUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set elevation loss
|
// Set elevation loss
|
||||||
private void setTotalElevationLoss(Float elevationLoss_m) {
|
private void setTotalElevationLoss(Float elevationLoss_m) {
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
|
||||||
|
|
||||||
Float totalElevationLoss = elevationLoss_m;
|
Float totalElevationLoss = elevationLoss_m;
|
||||||
|
|
||||||
if (lastTrackStatistics != null && lastTrackStatistics.hasTotalElevationLoss()) {
|
if (lastTrackStatistics != null && lastTrackStatistics.hasTotalElevationLoss()) {
|
||||||
@@ -320,7 +341,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.formatElevation(getContext(), totalElevationLoss, metricUnits);
|
Pair<String, String> parts = StringUtils.formatElevation(getContext(), totalElevationLoss, preferenceMetricUnits);
|
||||||
viewBinding.statsElevationLossValue.setText(parts.first);
|
viewBinding.statsElevationLossValue.setText(parts.first);
|
||||||
viewBinding.statsElevationLossUnit.setText(parts.second);
|
viewBinding.statsElevationLossUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -338,14 +359,10 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
private void updateStats() {
|
private void updateStats() {
|
||||||
String trackIconValue = TrackIconUtils.getIconValue(getContext(), category);
|
String trackIconValue = TrackIconUtils.getIconValue(getContext(), category);
|
||||||
|
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
|
||||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
|
||||||
boolean isRecording = isSelectedTrackRecording();
|
|
||||||
|
|
||||||
// Set total distance
|
// Set total distance
|
||||||
{
|
{
|
||||||
double totalDistance = lastTrackStatistics == null ? Double.NaN : lastTrackStatistics.getTotalDistance();
|
double totalDistance = lastTrackStatistics == null ? Double.NaN : lastTrackStatistics.getTotalDistance();
|
||||||
Pair<String, String> parts = StringUtils.getDistanceParts(getContext(), totalDistance, metricUnits);
|
Pair<String, String> parts = StringUtils.getDistanceParts(getContext(), totalDistance, preferenceMetricUnits);
|
||||||
|
|
||||||
viewBinding.statsDistanceValue.setText(parts.first);
|
viewBinding.statsDistanceValue.setText(parts.first);
|
||||||
viewBinding.statsDistanceUnit.setText(parts.second);
|
viewBinding.statsDistanceUnit.setText(parts.second);
|
||||||
@@ -353,7 +370,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
|
|
||||||
// Set activity type
|
// Set activity type
|
||||||
{
|
{
|
||||||
viewBinding.statsActivityTypeIcon.setEnabled(isRecording);
|
viewBinding.statsActivityTypeIcon.setEnabled(isSelectedTrackRecording());
|
||||||
viewBinding.statsActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawable(trackIconValue));
|
viewBinding.statsActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawable(trackIconValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,9 +383,9 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
// Set average speed/pace
|
// Set average speed/pace
|
||||||
{
|
{
|
||||||
double speed = lastTrackStatistics != null ? lastTrackStatistics.getAverageSpeed() : Double.NaN;
|
double speed = lastTrackStatistics != null ? lastTrackStatistics.getAverageSpeed() : Double.NaN;
|
||||||
viewBinding.statsAverageSpeedLabel.setText(reportSpeed ? R.string.stats_average_speed : R.string.stats_average_pace);
|
viewBinding.statsAverageSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_average_speed : R.string.stats_average_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsAverageSpeedValue.setText(parts.first);
|
viewBinding.statsAverageSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsAverageSpeedUnit.setText(parts.second);
|
viewBinding.statsAverageSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -377,9 +394,9 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
{
|
{
|
||||||
double speed = lastTrackStatistics == null ? Double.NaN : lastTrackStatistics.getMaxSpeed();
|
double speed = lastTrackStatistics == null ? Double.NaN : lastTrackStatistics.getMaxSpeed();
|
||||||
|
|
||||||
viewBinding.statsMaxSpeedLabel.setText(reportSpeed ? R.string.stats_max_speed : R.string.stats_fastest_pace);
|
viewBinding.statsMaxSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_max_speed : R.string.stats_fastest_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsMaxSpeedValue.setText(parts.first);
|
viewBinding.statsMaxSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsMaxSpeedUnit.setText(parts.second);
|
viewBinding.statsMaxSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
@@ -388,18 +405,16 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
{
|
{
|
||||||
double speed = lastTrackStatistics != null ? lastTrackStatistics.getAverageMovingSpeed() : Double.NaN;
|
double speed = lastTrackStatistics != null ? lastTrackStatistics.getAverageMovingSpeed() : Double.NaN;
|
||||||
|
|
||||||
viewBinding.statsMovingSpeedLabel.setText(reportSpeed ? R.string.stats_average_moving_speed : R.string.stats_average_moving_pace);
|
viewBinding.statsMovingSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_average_moving_speed : R.string.stats_average_moving_pace);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
viewBinding.statsMovingSpeedValue.setText(parts.first);
|
viewBinding.statsMovingSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsMovingSpeedUnit.setText(parts.second);
|
viewBinding.statsMovingSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set elevation gain and loss
|
// Set elevation gain and loss
|
||||||
{
|
{
|
||||||
// Make elevation visible?
|
viewBinding.statsElevationGroup.setVisibility(preferenceShowElevation ? View.VISIBLE : View.GONE);
|
||||||
boolean showElevation = PreferencesUtils.isShowStatsElevation(getContext());
|
|
||||||
viewBinding.statsElevationGroup.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,29 +431,24 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setLocationValues() {
|
private void setLocationValues() {
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
|
||||||
|
|
||||||
// Set speed/pace
|
// Set speed/pace
|
||||||
double speed = lastTrackPoint != null && lastTrackPoint.hasSpeed() ? lastTrackPoint.getSpeed() : Double.NaN;
|
double speed = lastTrackPoint != null && lastTrackPoint.hasSpeed() ? lastTrackPoint.getSpeed() : Double.NaN;
|
||||||
setSpeed(speed);
|
setSpeed(speed);
|
||||||
|
|
||||||
// Set elevation
|
// Set elevation
|
||||||
boolean showElevation = PreferencesUtils.isShowStatsElevation(getContext());
|
viewBinding.statsElevationGroup.setVisibility(preferenceShowElevation ? View.VISIBLE : View.GONE);
|
||||||
viewBinding.statsElevationGroup.setVisibility(showElevation ? View.VISIBLE : View.GONE);
|
|
||||||
|
|
||||||
if (showElevation) {
|
if (preferenceShowElevation) {
|
||||||
// Current elevation
|
// Current elevation
|
||||||
Float altitude = lastTrackPoint != null && lastTrackPoint.hasAltitude() ? (float) lastTrackPoint.getAltitude() : null;
|
Float altitude = lastTrackPoint != null && lastTrackPoint.hasAltitude() ? (float) lastTrackPoint.getAltitude() : null;
|
||||||
Pair<String, String> parts = StringUtils.formatElevation(getContext(), altitude, metricUnits);
|
Pair<String, String> parts = StringUtils.formatElevation(getContext(), altitude, preferenceMetricUnits);
|
||||||
viewBinding.statsElevationCurrentValue.setText(parts.first);
|
viewBinding.statsElevationCurrentValue.setText(parts.first);
|
||||||
viewBinding.statsElevationCurrentUnit.setText(parts.second);
|
viewBinding.statsElevationCurrentUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set coordinate
|
// Set coordinate
|
||||||
boolean showCoordinate = PreferencesUtils.isStatsShowCoordinate(getContext());
|
viewBinding.statsCoordinateGroup.setVisibility(preferenceShowCoordinate ? View.VISIBLE : View.GONE);
|
||||||
|
if (preferenceShowCoordinate) {
|
||||||
viewBinding.statsCoordinateGroup.setVisibility(showCoordinate ? View.VISIBLE : View.GONE);
|
|
||||||
if (showCoordinate) {
|
|
||||||
String latitudeText = getContext().getString(R.string.value_unknown);
|
String latitudeText = getContext().getString(R.string.value_unknown);
|
||||||
String longitudeText = getContext().getString(R.string.value_unknown);
|
String longitudeText = getContext().getString(R.string.value_unknown);
|
||||||
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) {
|
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) {
|
||||||
@@ -451,12 +461,9 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setSpeed(double speed) {
|
private void setSpeed(double speed) {
|
||||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
viewBinding.statsSpeedLabel.setText(preferenceReportSpeed ? R.string.stats_speed : R.string.stats_pace);
|
||||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
|
||||||
|
|
||||||
viewBinding.statsSpeedLabel.setText(reportSpeed ? R.string.stats_speed : R.string.stats_pace);
|
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, preferenceMetricUnits, preferenceReportSpeed);
|
||||||
|
|
||||||
Pair<String, String> parts = StringUtils.getSpeedParts(getContext(), speed, metricUnits, reportSpeed);
|
|
||||||
viewBinding.statsSpeedValue.setText(parts.first);
|
viewBinding.statsSpeedValue.setText(parts.first);
|
||||||
viewBinding.statsSpeedUnit.setText(parts.second);
|
viewBinding.statsSpeedUnit.setText(parts.second);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,8 +46,10 @@ public class PreferencesUtils {
|
|||||||
return PreferenceManager.getDefaultSharedPreferences(context);
|
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
public static SharedPreferences register(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
||||||
getSharedPreferences(context).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
SharedPreferences sharedPreferences = getSharedPreferences(context);
|
||||||
|
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
|
return sharedPreferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unregister(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
public static void unregister(Context context, SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) {
|
||||||
@@ -106,6 +108,10 @@ public class PreferencesUtils {
|
|||||||
return sharedPreferences.getBoolean(getKey(context, keyId), defaultValue);
|
return sharedPreferences.getBoolean(getKey(context, keyId), defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean getBoolean(Context context, SharedPreferences sharedPreferences, int keyId, boolean defaultValue) {
|
||||||
|
return sharedPreferences.getBoolean(getKey(context, keyId), defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a boolean preference value.
|
* Sets a boolean preference value.
|
||||||
*
|
*
|
||||||
@@ -179,18 +185,16 @@ public class PreferencesUtils {
|
|||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Deprecated
|
||||||
* Gets a string preference value.
|
|
||||||
*
|
|
||||||
* @param context the context
|
|
||||||
* @param keyId the key id
|
|
||||||
* @param defaultValue default value
|
|
||||||
*/
|
|
||||||
public static String getString(Context context, int keyId, String defaultValue) {
|
public static String getString(Context context, int keyId, String defaultValue) {
|
||||||
SharedPreferences sharedPreferences = getSharedPreferences(context);
|
SharedPreferences sharedPreferences = getSharedPreferences(context);
|
||||||
return sharedPreferences.getString(getKey(context, keyId), defaultValue);
|
return sharedPreferences.getString(getKey(context, keyId), defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getString(Context context, SharedPreferences sharedPreferences, int keyId, String defaultValue) {
|
||||||
|
return sharedPreferences.getString(getKey(context, keyId), defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a string preference value.
|
* Sets a string preference value.
|
||||||
*
|
*
|
||||||
@@ -206,15 +210,25 @@ public class PreferencesUtils {
|
|||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean isMetricUnits(Context context) {
|
public static boolean isMetricUnits(Context context) {
|
||||||
final String STATS_UNIT = context.getString(R.string.stats_units_default);
|
return isMetricUnits(getSharedPreferences(context), context);
|
||||||
return STATS_UNIT.equals(getString(context, R.string.stats_units_key, STATS_UNIT));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isMetricUnits(SharedPreferences sharedPreferences, Context context) {
|
||||||
|
final String STATS_UNIT = context.getString(R.string.stats_units_default);
|
||||||
|
return STATS_UNIT.equals(getString(context, sharedPreferences, R.string.stats_units_key, STATS_UNIT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean isReportSpeed(Context context, String category) {
|
public static boolean isReportSpeed(Context context, String category) {
|
||||||
|
return isReportSpeed(getSharedPreferences(context), context, category);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isReportSpeed(SharedPreferences sharedPreferences, Context context, String category) {
|
||||||
final String STATS_RATE_DEFAULT = context.getString(R.string.stats_rate_default);
|
final String STATS_RATE_DEFAULT = context.getString(R.string.stats_rate_default);
|
||||||
String currentStatsRate = getString(context, R.string.stats_rate_key, STATS_RATE_DEFAULT);
|
String currentStatsRate = getString(context, sharedPreferences, R.string.stats_rate_key, STATS_RATE_DEFAULT);
|
||||||
if (currentStatsRate.equals(getString(context, R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) {
|
if (currentStatsRate.equals(getString(context, sharedPreferences, R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) {
|
||||||
return TrackIconUtils.isSpeedIcon(context, category);
|
return TrackIconUtils.isSpeedIcon(context, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,12 +300,17 @@ public class PreferencesUtils {
|
|||||||
return getBoolean(context, R.string.stats_fullscreen_while_recording_key, DEFAULT);
|
return getBoolean(context, R.string.stats_fullscreen_while_recording_key, DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean isShowStatsElevation(Context context) {
|
public static boolean isShowStatsElevation(Context context) {
|
||||||
final boolean STATS_SHOW_ELEVATION = context.getResources().getBoolean(R.bool.stats_show_elevation_default);
|
return isShowStatsElevation(getSharedPreferences(context), context);
|
||||||
return getBoolean(context, R.string.stats_show_grade_elevation_key, STATS_SHOW_ELEVATION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isStatsShowCoordinate(Context context) {
|
public static boolean isShowStatsElevation(SharedPreferences sharedPreferences, Context context) {
|
||||||
|
final boolean STATS_SHOW_ELEVATION = context.getResources().getBoolean(R.bool.stats_show_elevation_default);
|
||||||
|
return getBoolean(context, sharedPreferences, R.string.stats_show_grade_elevation_key, STATS_SHOW_ELEVATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isStatsShowCoordinate(SharedPreferences sharedPreferences, Context context) {
|
||||||
final boolean STATS_SHOW_COORDINATE = context.getResources().getBoolean(R.bool.stats_show_coordinate_default);
|
final boolean STATS_SHOW_COORDINATE = context.getResources().getBoolean(R.bool.stats_show_coordinate_default);
|
||||||
return getBoolean(context, R.string.stats_show_coordinate_key, STATS_SHOW_COORDINATE);
|
return getBoolean(context, R.string.stats_show_coordinate_key, STATS_SHOW_COORDINATE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user