Voice announcements and Interval: add sub km/miles options.

Fixes #1195.
This commit is contained in:
Dennis Guse
2022-04-23 12:36:23 +02:00
parent 5e4924a5e1
commit 3815ee6c59
6 changed files with 51 additions and 27 deletions
@@ -106,7 +106,7 @@ public class IntervalStatisticsModel extends AndroidViewModel {
public void update(Track.Id trackId, boolean metricUnits, @Nullable IntervalOption interval) {
if (interval == null) {
interval = IntervalOption.OPTION_1;
interval = IntervalOption.DEFAULT;
}
lastTrackPointId = null;
@@ -119,6 +119,8 @@ public class IntervalStatisticsModel extends AndroidViewModel {
* Intervals length this view model support.
*/
public enum IntervalOption {
OPTION_0_1(0.1f),
OPTION_0_5(0.5f),
OPTION_1(1),
OPTION_2(2),
OPTION_3(3),
@@ -128,9 +130,11 @@ public class IntervalStatisticsModel extends AndroidViewModel {
OPTION_20(20),
OPTION_50(50);
private final int multiplier;
static IntervalOption DEFAULT = OPTION_1;
IntervalOption(int multiplier) {
private final double multiplier;
IntervalOption(double multiplier) {
this.multiplier = multiplier;
}
@@ -140,13 +144,12 @@ public class IntervalStatisticsModel extends AndroidViewModel {
.multipliedBy(multiplier);
}
public double getMultiplier() {
return multiplier;
}
public boolean sameMultiplier(IntervalOption intervalOption) {
return intervalOption != null && this.multiplier == intervalOption.multiplier;
}
@Override
public String toString() {
return "" + multiplier; //TODO Somehow IntervalsFragment relies on a parsable Integer.
}
}
}
@@ -23,6 +23,7 @@ import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.databinding.IntervalListViewBinding;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.util.StringUtils;
/**
* A fragment to display the intervals from recorded track.
@@ -95,6 +96,7 @@ public class IntervalsFragment extends Fragment {
return viewBinding.getRoot();
}
@Deprecated //TODO This method must be re-implemented.
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -109,11 +111,10 @@ public class IntervalsFragment extends Fragment {
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
TextView v = (TextView) super.getView(position, convertView, parent);
if (metricUnits) {
v.setText(getContext().getString(R.string.value_integer_kilometer, Integer.parseInt(v.getText().toString())));
} else {
v.setText(getContext().getString(R.string.value_integer_mile, Integer.parseInt(v.getText().toString())));
}
IntervalStatisticsModel.IntervalOption option = getItem(position);
String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0);
v.setText(stringValue);
return v;
}
@@ -124,12 +125,19 @@ public class IntervalsFragment extends Fragment {
};
viewBinding.intervalsDropdown.setAdapter(intervalsAdapter);
viewBinding.intervalsDropdown.setOnItemClickListener((parent, view1, position, id) -> updateIntervals(metricUnits, IntervalStatisticsModel.IntervalOption.values()[position]));
viewBinding.intervalsDropdown.setOnItemClickListener((parent, view1, position, id) -> {
updateIntervals(metricUnits, IntervalStatisticsModel.IntervalOption.values()[position]);
viewBinding.intervalsDropdown.setText(
getContext().getString(R.string.value_integer_kilometer, Integer.parseInt(selectedInterval != null ? selectedInterval.toString() : IntervalStatisticsModel.IntervalOption.values()[0].toString())),
false
);
//TODO This duplicates the intervalAdapter code
IntervalStatisticsModel.IntervalOption option = selectedInterval != null ? selectedInterval : IntervalStatisticsModel.IntervalOption.DEFAULT;
String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0);
viewBinding.intervalsDropdown.setText(stringValue, false);
});
//TODO This duplicates the intervalAdapter code
IntervalStatisticsModel.IntervalOption option = selectedInterval != null ? selectedInterval : IntervalStatisticsModel.IntervalOption.DEFAULT;
String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0);
viewBinding.intervalsDropdown.setText(stringValue, false);
}
@Override