Compare commits

..

8 Commits

Author SHA1 Message Date
Dennis Guse 3105afed4e Release: v4.17.8 2025-02-13 22:35:31 +01:00
Vasja Volin eda1815393 Add settings toggles for chart series
Adds toggles to the User Interface section of the app Settings that
allow the user to display or hide the three series available in the
chart: Elevation, Speed/Pace, and Heart Rate. As a user of a heart rate
monitor primarily during strength workouts and combat sports, the
distance and elevation graphs are not helpful to me - in addition, their
scale means that I am not able to easily see my exact heart rate. This
should allow users in a similar situation to better determine exactly
what is most helpful for them to be seen on the graph.

Also updates heart rate series possible intervals - the smallest interval
was 25, which was too low for most zone 1 cardio charts - if your heart
rate goes from 70 to 125, with a 25 interval, most of the chart will be
whitespace.
2025-01-24 07:01:15 +01:00
Dennis Guse ae237bdddc Release: v4.17.7 2025-01-21 17:57:31 +01:00
Ricky Tigg 47705b9b99 Translated using Weblate (Finnish)
Currently translated at 3.2% (5 of 155 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/fi/
2025-01-20 07:56:09 +01:00
mondstern c49e66cd88 Translated using Weblate (Ukrainian)
Currently translated at 92.4% (493 of 533 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/
2025-01-20 07:56:09 +01:00
Kristoffer Grundström 8c017cf942 Translated using Weblate (Swedish)
Currently translated at 9.0% (14 of 155 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/sv/
2025-01-20 07:56:09 +01:00
ovl-1 39e38ead44 Translated using Weblate (Norwegian Bokmål)
Currently translated at 97.1% (518 of 533 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/nb_NO/
2025-01-20 07:56:09 +01:00
josé m baf078870f Translated using Weblate (Galician)
Currently translated at 99.6% (531 of 533 strings)

Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/
2025-01-20 07:56:08 +01:00
23 changed files with 233 additions and 34 deletions
+2 -2
View File
@@ -64,8 +64,8 @@ android {
defaultConfig {
applicationId 'de.dennisguse.opentracks'
versionCode 6022
versionName "v4.17.6"
versionCode 6030
versionName "v4.17.8"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
@@ -0,0 +1,3 @@
v4.17.7: OpenTracks
Release for reproducible build.
@@ -0,0 +1,5 @@
v4.17.8: OpenTracks
Changes:
- Charts: shown data can be configured
@@ -0,0 +1,16 @@
v3.2.0: OpenTracks
Muutokset:
- Vimpain poistettu
- Otettiin käyttöön materiaalisuunnittelun kuvakkeet
- Lumilautailu ja hiihto poistettu (tarvitaan uudet kuvakkeet)
Viankorjaus:
- Kiinteä hakutoiminto
Kehittäjä:
- Korjatut (jotkut) testitapaukset
- Käyttämätön parcel-toiminto poistettu
- Suuri puhdistus ja alustaminen
- Älä käytä lähetystä sovelluksen ja vimpaimen väliseen viestintään
- stats_content.xml ei sisällä muita tiedostoja
@@ -0,0 +1,4 @@
v3.6.1: OpenTracks
Buggfix:
- KMZ-importering: lagra korrekt genväg för bild
@@ -0,0 +1,4 @@
v3.6.2: OpenTracks
Buggfix:
- Diagrammen visades inte korrekt (introducerades i v3.6.0)
@@ -0,0 +1,4 @@
v3.11.1: OpenTracks
Buggfix:
- Röstmeddelanden rapporterade fel statistik
@@ -0,0 +1,4 @@
v3.13.2: OpenTracks
Buggfix:
- Krasch i liggande läge
@@ -0,0 +1,4 @@
v3.14.3: OpenTracks
Buggfix:
- Nedgraderar databasen från nästkommande utgåva v3.15.0
@@ -0,0 +1,7 @@
v3.15.2: OpenTracks
Ändringar:
- Uppdaterade översättningar
Buggfix:
- Krasch vid GPX-exportering
@@ -0,0 +1,4 @@
v4.4.0: OpenTracks
Ändringar:
- Exportera alla spår som en fil
@@ -0,0 +1,4 @@
v4.9.5: OpenTracks
Buggfix:
- inställningen för tomgångsmeddelande fungerar igen
@@ -0,0 +1,4 @@
v4.12.2.: OpenTracks
Buggfix:
- Tillåt att sensorerna startas före inspelningen
@@ -0,0 +1,10 @@
(versionName): OpenTracks
Ändringar:
-
Buggfix:
-
Utvecklare:
-
@@ -86,6 +86,7 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener {
});
}
}
if (PreferencesUtils.isKey(R.string.stats_rate_key, key)) {
boolean reportSpeed = PreferencesUtils.isReportSpeed(activityTypeLocalized);
if (reportSpeed != viewBinding.chartView.getReportSpeed()) {
@@ -99,6 +100,21 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener {
});
}
}
if (PreferencesUtils.isKey(R.string.chart_display_elevation_key, key)) {
viewBinding.chartView.setShowElevation(PreferencesUtils.shouldShowElevation());
refreshChart();
}
if (PreferencesUtils.isKey(R.string.chart_display_pace_or_speed_key, key)) {
viewBinding.chartView.setShowPaceOrSpeed(PreferencesUtils.shouldShowPaceOrSpeed());
refreshChart();
}
if (PreferencesUtils.isKey(R.string.chart_display_heart_rate_key, key)) {
viewBinding.chartView.setShowHeartRate(PreferencesUtils.shouldShowHeartRate());
refreshChart();
}
}
};
@@ -273,4 +289,13 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener {
fragmentActivity.runOnUiThread(runnable);
}
}
private void refreshChart() {
runOnUiThread(() -> {
if (isResumed()) {
viewBinding.chartView.invalidate();
viewBinding.chartView.requestLayout();
}
});
}
}
@@ -86,8 +86,10 @@ public class ChartView extends View {
}
private final List<ChartValueSeries> seriesList = new LinkedList<>();
private final ChartValueSeries elevationSeries;
private final ChartValueSeries speedSeries;
private final ChartValueSeries paceSeries;
private final ChartValueSeries heartRateSeries;
private final LinkedList<ChartPoint> chartPoints = new LinkedList<>();
private final List<Marker> markers = new LinkedList<>();
@@ -123,6 +125,7 @@ public class ChartView extends View {
private boolean chartByDistance = false;
private UnitSystem unitSystem = UnitSystem.defaultUnitSystem();
private boolean reportSpeed = true;
private boolean showPaceOrSpeed = true;
private boolean showPointer = false;
private final GestureDetectorCompat detectorScrollFlingTab = new GestureDetectorCompat(getContext(), new GestureDetector.SimpleOnGestureListener() {
@@ -176,17 +179,17 @@ public class ChartView extends View {
int fontSizeSmall = ThemeUtils.getFontSizeSmallInPx(context);
int fontSizeMedium = ThemeUtils.getFontSizeMediumInPx(context);
seriesList.add(new ChartValueSeries(context,
Integer.MIN_VALUE,
Integer.MAX_VALUE,
new int[]{5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000},
R.string.description_altitude_metric,
R.string.description_altitude_imperial,
R.string.description_altitude_imperial,
R.color.chart_altitude_fill,
R.color.chart_altitude_border,
fontSizeSmall,
fontSizeMedium) {
elevationSeries = new ChartValueSeries(context,
Integer.MIN_VALUE,
Integer.MAX_VALUE,
new int[]{5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000},
R.string.description_altitude_metric,
R.string.description_altitude_imperial,
R.string.description_altitude_imperial,
R.color.chart_altitude_fill,
R.color.chart_altitude_border,
fontSizeSmall,
fontSizeMedium) {
@Override
protected Double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
return chartPoint.altitude();
@@ -196,7 +199,8 @@ public class ChartView extends View {
protected boolean drawIfChartPointHasNoData() {
return false;
}
});
};
seriesList.add(elevationSeries);
speedSeries = new ChartValueSeries(context,
0,
@@ -244,10 +248,15 @@ public class ChartView extends View {
};
seriesList.add(paceSeries);
seriesList.add(new ChartValueSeries(context,
heartRateSeries = new ChartValueSeries(context,
0,
Integer.MAX_VALUE,
new int[]{25, 50},
// For Zone 5 cardio, the 25 value should result in nice visuals, as the values
// will range from ~70 - ~180 (around 4.5 intervals).
// For Zone 1 cardio, the 15 value should result in nice visuals, as the values
// will range from ~70 - ~120 (around 3.5 intervals)
// The fallback of 50 should give appropriate visuals for values outside this range.
new int[]{15, 25, 50},
R.string.description_sensor_heart_rate,
R.string.description_sensor_heart_rate,
R.string.description_sensor_heart_rate,
@@ -264,7 +273,8 @@ public class ChartView extends View {
protected boolean drawIfChartPointHasNoData() {
return false;
}
});
};
seriesList.add(heartRateSeries);
seriesList.add(new ChartValueSeries(context,
0,
@@ -343,9 +353,15 @@ public class ChartView extends View {
setClickable(true);
updateDimensions();
// either speedSeries or paceSeries should be enabled.
speedSeries.setEnabled(reportSpeed);
paceSeries.setEnabled(!reportSpeed);
// Either speedSeries or paceSeries should be enabled, if one is shown.
if (showPaceOrSpeed) {
speedSeries.setEnabled(reportSpeed);
paceSeries.setEnabled(!reportSpeed);
}
// Defaults for our chart series.
heartRateSeries.setEnabled(true);
elevationSeries.setEnabled(true);
}
@Override
@@ -379,6 +395,12 @@ public class ChartView extends View {
}
public boolean applyReportSpeed() {
if (!showPaceOrSpeed) {
paceSeries.setEnabled(false);
speedSeries.setEnabled(false);
return true;
}
if (reportSpeed) {
if (!speedSeries.isEnabled()) {
speedSeries.setEnabled(true);
@@ -396,6 +418,20 @@ public class ChartView extends View {
return false;
}
void setShowElevation(boolean value) {
elevationSeries.setEnabled(value);
}
void setShowPaceOrSpeed(boolean value) {
showPaceOrSpeed = value;
// we want to make sure we show whatever version the user has
// selected when we turn this back on.
applyReportSpeed();
}
void setShowHeartRate(boolean value) {
heartRateSeries.setEnabled(value);
}
public void setShowPointer(boolean value) {
showPointer = value;
}
@@ -644,10 +680,18 @@ public class ChartView extends View {
*/
private void drawSeriesTitles(Canvas canvas) {
Iterator<TitlePosition> tpI = titleDimensions.titlePositions.iterator();
for (ChartValueSeries chartValueSeries : seriesList) {
if (chartValueSeries.isEnabled() && chartValueSeries.hasData() || allowIfEmpty(chartValueSeries)) {
String title = getContext().getString(chartValueSeries.getTitleId(unitSystem));
Paint paint = chartValueSeries.getTitlePaint();
// It is possible for the titlePositions to become empty temporarily, while switching between
// chart screens quickly.
if (!tpI.hasNext()) {
return;
}
TitlePosition tp = tpI.next();
int y = topBorder - spacer - (titleDimensions.lineCount - tp.line) * (titleDimensions.lineHeight + spacer);
canvas.drawText(title, tp.xPos + getScrollX(), y, paint);
@@ -774,7 +818,7 @@ public class ChartView extends View {
//TODO
int markerXPosition = x - spacer;
int index = titleDimensions.titlePositions.size() - 1; // index only onver the visible chart series
int index = titleDimensions.titlePositions.size() - 1; // index only over the visible chart series
final int lastDrawn2ndLineMarkerIndex = getYmarkerCountOn1stLine();
for (int i = seriesList.size()-1; i>=0 ;--i) { // draw markers from the last series to achieve right alignment
ChartValueSeries chartValueSeries = seriesList.get(i);
@@ -318,6 +318,21 @@ public class PreferencesUtils {
return getBoolean(R.string.stats_fullscreen_while_recording_key, DEFAULT);
}
public static boolean shouldShowElevation() {
final boolean DEFAULT = resources.getBoolean(R.bool.chart_display_elevation_default);
return getBoolean(R.string.chart_display_elevation_key, DEFAULT);
}
public static boolean shouldShowPaceOrSpeed() {
final boolean DEFAULT = resources.getBoolean(R.bool.chart_display_pace_or_speed_default);
return getBoolean(R.string.chart_display_pace_or_speed_key, DEFAULT);
}
public static boolean shouldShowHeartRate() {
final boolean DEFAULT = resources.getBoolean(R.bool.chart_display_heart_rate_default);
return getBoolean(R.string.chart_display_heart_rate_key, DEFAULT);
}
public static boolean shouldUseDynamicColors() {
final boolean DEFAULT = resources.getBoolean(R.bool.settings_ui_dynamic_colors_default);
return getBoolean(R.string.settings_ui_dynamic_colors_key, DEFAULT);
+1
View File
@@ -594,4 +594,5 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele
<string name="settings_locale_title">Idioma</string>
<string name="settings_locale_system_default">Predeterminado no sistema</string>
<string name="stats_gain_loss">Ganancia e Perda</string>
<string name="lap_heart_rate">Pulso medio na volta</string>
</resources>
+1
View File
@@ -578,4 +578,5 @@ limitations under the License.
<string name="settings_locale_title">Språk</string>
<string name="settings_locale_system_default">Systemstandard</string>
<string name="stats_gain_loss">Total stigning og nedstigning</string>
<string name="lap_heart_rate">Runde-puls</string>
</resources>
+6 -5
View File
@@ -175,7 +175,7 @@ limitations under the License.
<string name="settings_chart_by_distance">Дистанція</string>
<string name="settings_chart_by_time">Час</string>
<string name="settings_recording_default_activity_title">Тип за умовчанням</string>
<string name="settings_recording_location_frequency_summary">Записувати відрізок через кожні %1$s</string>
<string name="settings_recording_location_frequency_summary">%1$s між перевірками місцезнаходження</string>
<string name="settings_recording_max_recording_distance_summary">Кожні %1$s шляху відміряється новий відрізок</string>
<string name="settings_recording_max_recording_distance_title">Максимальна відстань</string>
<string name="settings_recording_min_recording_distance_title">Відстань відрізка</string>
@@ -326,8 +326,8 @@ limitations under the License.
\n d) вимкніть енергоощадження.
\n
\n Якщо нічого не допомагає, будь ласка, повідомте нам про помилку. </string>
<string name="about_preference_title">Про OpenTracks</string>
<string name="about_url">Веб-сторінка проєкту: <a href="%1$s">%1$s</a></string>
<string name="about_preference_title">Про</string>
<string name="about_url">Веб-сторінка проекту: <a href="%1$s">%1$s</a></string>
<string name="about_version_name">Версія: %1$s</string>
<string name="about_version_code">Код версії: %1$d</string>
<string name="about_libraries">Бібліотеки</string>
@@ -459,14 +459,14 @@ limitations under the License.
<string name="settings_units_category">Одиниця</string>
<string name="settings_import_export_summary">Імпорт, Експорт, Автоэкспорт</string>
<string name="settings_announcements_summary">Час, відстань, швидкість передачі голосу</string>
<string name="settings_import_export_title">Імпорт/Експорт</string>
<string name="settings_import_export_title">Імпорт та експорт</string>
<string name="settings_recording_customize_layout_title">Налаштуйте свій макет запису</string>
<string name="stats_custom_layout_default_layout">Макет за замовчуванням</string>
<string name="custom_layout_select_layout">Виберіть макет</string>
<string name="custom_layout_list_layout_removed">Макет був видалений</string>
<string name="custom_layout_list_edit_already_exists">Ім\'я макета вже існує</string>
<string name="custom_layout_list_edit_name">Введіть ім\'я макета для додавання</string>
<string name="settings_announcements_distance_frequency">Інтервал відстаней</string>
<string name="settings_announcements_distance_frequency">Довжина кола</string>
<string name="settings_announcements_totaltime_frequency">Часовий інтервал</string>
<string name="settings_running_sensor">Рухомий</string>
<string name="settings_generic_sensor">Загальний</string>
@@ -567,4 +567,5 @@ limitations under the License.
<string name="show_on_dashboard_not_installed">Не встановлено програму, що підтримує OpenTracks Dashboard API.</string>
<string name="value_float_knots_recommended">%1$.1f вузлів (рекомендовано)</string>
<string name="sensor_state_power_max">Макс. потужність</string>
<string name="power">Сила</string>
</resources>
+23 -8
View File
@@ -1,14 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Do not translate anything in this file directly. -->
<string name="stats_show_on_lockscreen_while_recording_key" translatable="false">trackdetail_show_on_lockscreen_while_recording</string>
<bool name="stats_show_on_lockscreen_while_recording_default" translatable="false">false</bool>
<string name="stats_keep_screen_on_while_recording_key" translatable="false">trackdetail_keep_screen_on_while_recording</string>
<bool name="stats_keep_screen_on_while_recording_default" translatable="false">false</bool>
<string name="stats_fullscreen_while_recording_key" translatable="false">trackdetail_fullscreen_while_recording</string>
<bool name="stats_fullscreen_while_recording_default" translatable="false">false</bool>
<!-- Main settings -->
<string name="settings_defaults_key" translatable="false">settingsDefaults</string>
@@ -279,9 +271,32 @@
<string name="show_introduction_screen_key" translatable="false">showIntroduction</string>
<bool name="show_introduction_screen_default">true</bool>
<!-- User Interface Settings -->
<string name="settings_ui_dynamic_colors_key" translatable="false">uiDynamicColors</string>
<bool name="settings_ui_dynamic_colors_default" translatable="false">false</bool>
<!-- Recording Settings -->
<string name="stats_show_on_lockscreen_while_recording_key" translatable="false">trackdetail_show_on_lockscreen_while_recording</string>
<bool name="stats_show_on_lockscreen_while_recording_default" translatable="false">false</bool>
<string name="stats_keep_screen_on_while_recording_key" translatable="false">trackdetail_keep_screen_on_while_recording</string>
<bool name="stats_keep_screen_on_while_recording_default" translatable="false">false</bool>
<string name="stats_fullscreen_while_recording_key" translatable="false">trackdetail_fullscreen_while_recording</string>
<bool name="stats_fullscreen_while_recording_default" translatable="false">false</bool>
<!-- Chart Settings -->
<string name="chart_display_elevation_key" translatable="false">chart_display_elevation</string>
<bool name="chart_display_elevation_default" translatable="false">true</bool>
<string name="chart_display_pace_or_speed_key" translatable="false">chart_display_pace_or_speed</string>
<bool name="chart_display_pace_or_speed_default" translatable="false">true</bool>
<string name="chart_display_heart_rate_key" translatable="false">chart_display_heart_rate</string>
<bool name="chart_display_heart_rate_default" translatable="false">true</bool>
<!-- androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode() -->
<string name="locale_key" translatable="false">localeKey</string>
+5
View File
@@ -344,6 +344,11 @@ limitations under the License.
<!-- Settings Chart -->
<string name="settings_chart_by_distance">By distance</string>
<string name="settings_chart_by_time">By time</string>
<string name="settings_charts_title">Charts</string>
<string name="settings_chart_display_elevation_title">Display elevation</string>
<string name="settings_chart_display_pace_or_speed_title">Display pace or speed</string>
<string name="settings_chart_display_heart_rate_title">Display heart rate</string>
<!-- Settings Recording -->
<string name="settings_recording_title">Recording</string>
<string name="settings_theme_switch_restart">Theme changes may require a manual restart.</string>
@@ -58,4 +58,23 @@
android:title="@string/settings_recording_fullscreen_on_while_recording_title" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/settings_charts_title">
<SwitchPreferenceCompat
android:icon="@drawable/ic_activity_climbing_24dp"
android:defaultValue="@bool/chart_display_elevation_default"
android:key="@string/chart_display_elevation_key"
android:title="@string/settings_chart_display_elevation_title" />
<SwitchPreferenceCompat
android:icon="@drawable/ic_activity_snowboarding_24dp"
android:defaultValue="@bool/chart_display_pace_or_speed_default"
android:key="@string/chart_display_pace_or_speed_key"
android:title="@string/settings_chart_display_pace_or_speed_title" />
<SwitchPreferenceCompat
android:icon="@drawable/ic_activity_workout_24dp"
android:defaultValue="@bool/chart_display_heart_rate_default"
android:key="@string/chart_display_heart_rate_key"
android:title="@string/settings_chart_display_heart_rate_title" />
</PreferenceCategory>
</PreferenceScreen>