From 023a5aa221234843f1de0dc1158c52e746d61a85 Mon Sep 17 00:00:00 2001 From: Jeff Shelley Date: Tue, 28 Oct 2025 09:44:34 -0500 Subject: [PATCH 01/13] added new UI component which shows elapsed segment time --- .../opentracks/settings/PreferencesUtils.java | 3 ++- .../viewmodels/GenericStatisticsViewHolder.java | 11 +++++++++++ .../dennisguse/opentracks/viewmodels/Mapping.java | 1 + src/main/res/values/settings.xml | 15 ++++++++++----- src/main/res/values/strings.xml | 1 + 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index d6d70d7ea..79f5d4f7f 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -829,7 +829,8 @@ public class PreferencesUtils { R.array.stats_custom_layout_fields_default_value_16, R.array.stats_custom_layout_fields_default_value_17, R.array.stats_custom_layout_fields_default_value_18, - R.array.stats_custom_layout_fields_default_value_19 + R.array.stats_custom_layout_fields_default_value_19, + R.array.stats_custom_layout_fields_default_value_20 ).map(id -> resources.obtainTypedArray(id)) .toList(); } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 6559739b2..32f592687 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -216,6 +216,17 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolderaverage_moving_pace average_pace average_segment_pace + elapsed_segment_time fastest_pace coordinates heart_rate @@ -427,26 +428,30 @@ 0,0,0 - @string/stats_custom_layout_fastest_pace_key + @string/stats_custom_layout_elapsed_segment_time_key 0,0,0 + @string/stats_custom_layout_fastest_pace_key + 0,0,0 + + @string/stats_custom_layout_coordinates_key 0,0,1 - + @string/stats_custom_layout_heart_rate_key 0,0,0 - + @string/stats_custom_layout_cadence_key 0,0,0 - + @string/stats_custom_layout_power_key 0,0,0 - + @string/stats_custom_layout_clock_key 0,0,0 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 59c657071..149b446e0 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -455,6 +455,7 @@ limitations under the License. Avg moving speed Avg pace Avg Segment pace + Elapsed Segment time Avg speed Elevation Fastest pace From daa4689f44ecd87fbf4e34bb1f7deeb6be027e8f Mon Sep 17 00:00:00 2001 From: Jeff Shelley Date: Tue, 28 Oct 2025 09:45:49 -0500 Subject: [PATCH 02/13] Allow adding newly developed UI Components to existing custom layouts. Fixes #2176. --- .../opentracks/settings/PreferencesUtils.java | 15 +++++++++++ .../RecordingLayoutIO.java | 26 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 79f5d4f7f..263cfcce4 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -52,6 +52,7 @@ import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; import de.dennisguse.opentracks.sensors.SensorType; import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; +import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; @@ -850,6 +851,20 @@ public class PreferencesUtils { return resources.getString(R.string.stats_custom_layout_default_layout); } + /** + * @return List of all available field keys with their default visibility settings + */ + @SuppressLint("ResourceType") + public static List getAllAvailableFields() { + List fieldsArrays = getLayoutDataFields(); + return fieldsArrays.stream() + .map(i -> { + String fieldKey = i.getString(0); + return new DataField(fieldKey, false, false, fieldKey.equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); + }) + .toList(); + } + /** * @return custom layout selected or the first one if any has been selected or the one selected is not exists anymore. */ diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java index fd30e6610..e85fff22f 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java @@ -6,6 +6,7 @@ import android.util.Log; import androidx.annotation.NonNull; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import de.dennisguse.opentracks.R; @@ -34,9 +35,34 @@ public class RecordingLayoutIO { } recordingLayout.addField(fromCSV(fieldParts, resources)); } + + // Add any new fields that have been added to the codebase since this layout was saved + addAllInvisibleDataFields(recordingLayout, resources); + return recordingLayout; } + /** + * Adds any missing fields to the layout as hidden fields. + * This ensures that new fields added to the codebase appear in existing layouts. + */ + private static void addAllInvisibleDataFields(@NonNull RecordingLayout recordingLayout, @NonNull Resources resources) { + // Get all field keys currently in the layout + Set existingFieldKeys = recordingLayout.getFields().stream() + .map(DataField::getKey) + .collect(Collectors.toSet()); + + // Get all available fields from the codebase + List allAvailableFields = PreferencesUtils.getAllAvailableFields(); + + // Add any missing fields as hidden + for (DataField dataField : allAvailableFields) { + if (!existingFieldKeys.contains(dataField.getKey())) { + recordingLayout.addField(dataField); + } + } + } + public static String toCSV(List recordingLayouts) { return recordingLayouts.stream().map(RecordingLayout::toCsv).collect(Collectors.joining(CsvLayoutUtils.LINE_SEPARATOR)); } From 4f0ab7150359efb35d20fd32af4605a984efbc87 Mon Sep 17 00:00:00 2001 From: ghose Date: Sat, 25 Oct 2025 14:31:50 +0000 Subject: [PATCH 03/13] Translated using Weblate (Galician) Currently translated at 100.0% (541 of 541 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/ --- src/main/res/values-gl/strings.xml | 158 ++++++++++++++--------------- 1 file changed, 78 insertions(+), 80 deletions(-) diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 3b3afb53b..e7c6d3463 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -30,27 +30,25 @@ limitations under the License. \n* funciona sen precisar conexión á rede \n* mostra as rutas nun mapa (ver abaixo) Como mostrar a ruta no mapa\? - Usa a icona do mapa pequeno. \n a) (actualizacións en directo) Instala OSMDashboard. Proporciona mapas en liña ou sen conexión grazas a OpenStreetMap. \n En realidade, OSMDashboard é unha aplicación independente que só pode acceder (temporalmente) aos datos das pistas que se amosarán. \n b) A través dunha aplicación de mapa normal (por exemplo, OsmAnd e MAPS.ME). Estas aplicacións precisan admitir o formato de ficheiro KMZ (só localizacións e marcas de tempo). De feito, unha aplicación ten que admitir ACTION_VIEW con MIME application/vnd.google-earth.kmz. + Usa a icona pequena do mapa (abaixo). \n a) (actualizacións no momento) Instala OSMDashboard. Proporciona mapas en liña ou sen conexión grazas a OpenStreetMap. \n En realidade, OSMDashboard é unha aplicación independente que só pode acceder (temporalmente) aos datos das rutas que se van mostrar. \n b) Usando dunha aplicación de mapa normal (por exemplo, OsmAnd e MAPS.ME). Estas aplicacións precisan admitir o formato de ficheiro KMZ (só localizacións e marcas de tempo). De feito, unha aplicación ten que admitir ACTION_VIEW con MIME application/vnd.google-earth.kmz. De que xeito garda OpenTracks as fotos tomadas como marcadores\? Gárdanse na almacenaxe interna da app (só accesible desde OpenTracks). De que xeito exporto/importo as rutas gravadas\? - As rutas pódense exportar desde os Axustes como KMZ, KML ou GPX. KMZ/KML inclúe todos os datos; GPX só localización. As rutas compartidas a través da icona compartir compártense como KMZ. + As rutas pódense exportar desde os Axustes como KMZ, KML ou GPX. KMZ/KML inclúe todos os datos; No formato GPX só inclúe a localización. As rutas compartidas a través da icona compartir compártense como KMZ. OpenTracks precisa/utiliza Google Play Service\? Como grava OpenTracks os datos\? - -OpenTracks usa o sensor GPS do dispositivo para gravar a localización de xeito contínuo. -Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, elevación), OpenTracks non pode facer nada ao respecto. + OpenTracks usa o sensor GPS do dispositivo para gravar a localización de xeito contínuo. Se o sensor GPS envía datos pouco precisos (ex.: localización, velocidade, elevación), OpenTracks non pode facer nada ao respecto. De que xeito garda OpenTracks os datos dos sensores\? - Os datos dos sensores gárdanse asociados á localización. Respecto do ritmo cardíaco, significa que só se garda unha medida asociada a unha localización. Se te detés ou estás en interiores, non se gardarán datos do sensor (mais serán mostrados). + Os datos dos sensores gárdanse asociados á localización. Respecto do ritmo cardíaco, significa que só se garda unha medida asociada a unha localización. Se te detés ou estás en interiores, non se gardarán datos do sensor (mais serán mostrados no momento). OpenTracks non grava as localizacións\? - Podes intentar: \n a) mira que o GPS esté activado, \n b) mellora a recepción GPS (ex. sae ao exterior), \n c) comprobaa coa app GPSTest, e \n d) desactiva o aforro de enerxía. \n \n Se isto non axuda, infórmanos do problema. + Podes intentar: \n a) comproba que o GPS esté activado, \n b) mellora a recepción GPS (ex. sae ao exterior), \n c) comprobaa coa app GPSTest, e \n d) desactiva o aforro de enerxía. \n \n Se isto non axuda, infórmanos do problema. Como podo axudar a OpenTracks\? Podes: \n a) falar de OpenTracks coas túas amizades, \n b) propoñer novas funcións, \n c) informar de fallos, \n d) axudar no desenvolvemento, \n e) mercar a app na Google Play Store, \n f) facer unha doazón, e \n g) calquera cousa que estimes axuda a OpenTracks. Abrir como %1$s avión Quad - ir en bici + ciclismo recreativo dirixible barco escalada @@ -73,7 +71,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele globo aerostático navegación polo xeo patinaxe en liña - kayak + caiac kitesurf carrovelismo tipo mixto @@ -82,7 +80,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele ciclismo de montaña sendeirismo libre outra - remo + padexar parapente Avión de radiocontrol Barco de radiocontrol @@ -107,7 +105,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele ciclismo en pista atletismo sendeirismo - correr polas montañas + correr por camiños tren ultimate frisbee descoñecida @@ -117,24 +115,24 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele windsurf Tipo de actividade: %1$s - Ritmo de desprazamento medio: %1$s min/km (%2$s min/mi) - Velocidade de desprazamento media: %1$.2f km/h (%2$.1f mi/h) + Ritmo medio en movemento: %1$s min/km (%2$s min/mi) + Velocidade media en movemento: %1$.2f km/h (%2$.1f mi/h) Ritmo medio: %1$s min/km (%2$s min/mi) Velocidade media: %1$.2f km/h (%2$.1f min/mi) - Desnivel: %1$d m (%2$d pés) - Elevación (pés) - Elevación (m) + Desnivel+ : %1$d m (%2$d ft) + Atitude (ft) + Altitude (m) Ritmo máis rápido: %1$s min/km (%2$s min/mi) - Elevación máxima: %1$d m (%2$d pés) + Altitude máxima: %1$d m (%2$d ft) Velocidade máxima: %1$.2f km/h (%2$.1f mi/h) - Elevación mínima: %1$d m (%2$d pés) - Tempo de desprazamento: %1$s + Altitude mínima: %1$d m (%2$d ft) + Tempo en movemento: %1$s Ritmo (min/mi) Ritmo (min/km) Hora da gravación: %1$s Velocidade (m/s) Cadencia (rpm) - Pulso cardíaco (latexos por minuto) + Pulso cardíaco (por minuto) Potencia (W) Por tipo de actividade Velocidade (mi/h) @@ -169,9 +167,9 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Marcador de fotos Gravar Deter - Traxecto + Ruta - Importando de %1$s… + Importando desde %1$s… Non se pode inserir un marcador. Non hai sinal de GPS. Téntao de novo. Inseriuse un marcador @@ -183,23 +181,23 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Marcador %1$d - Tipo de marcador (por exemplo, fervenza) + Tipo de marcador (ex.: fervenza) Non tes marcadores - Estatísticas globais + Estatísticas totais Eliminar Editar Exportar todo (un ficheiro por ruta) Axuda Importar todo - Inserir marcador - Inserir foto - Insertar imaxe da galería + Engadir marcador + Engadir foto + Engadir imaxe da galería Marcadores Busca Seleccionar todo - Configuración + Axustes Compartir Amosar no mapa Retomar gravación @@ -246,22 +244,22 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Circunferencia da roda (mm) Indicador preferido - Imperiais (millas, pés) - Unidades (km, m) + Imperial (mi, ft) + Métrico (km, m) Unidades preferidas Creo que che pode interesar esta ruta. \n \n%1$s - Gustaríame compartir un traxecto contigo + Gustaríame compartir unha ruta contigo - Ritmo de desprazamento medio - Velocidade de desprazamento media + Ritmo medio en movemento + Velocidade media en movemento Ritmo medio Velocidade media - Elevación + Altitude Ritmo máis rápido - Desnivel + Gañancia Velocidade máxima Tempo en movemento Ritmo @@ -280,26 +278,26 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Estatísticas - Tipo de actividade (por exemplo, sendeirismo) + Tipo de actividade (ex: sendeirismo) Tipo de actividade - Empeza a gravar aquí a túa próxima aventura + Grava aquí a túa próxima aventura Grava a túa primeira ruta para ver estatísticas - m + ft km km/h m - km + mi mph min/km - min/km + min/mi - %1$d m (GPS excelente) - %1$d m (recomendado) + %1$d ft (GPS excelente) + %1$d ft (recomendado) %1$d km/h %1$d m (GPS excelente) %1$d m (GPS deficiente) @@ -322,7 +320,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele área de cámping igrexa cafetaría - tenda de barrio + tenda de proximidade auga potable desprendementos transbordador @@ -343,37 +341,37 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele mercado punto de encontro ópera - aparcadoiro + estacionamento comisaría de policía oficina de correos cova paso a nivel restaurante - compras + mercas vista tenda piscina teléfono teatro - lavabo + aseo información turística árbore túnel fervenza fonte de auga - Punto de referencia + punto de referencia Quixera compartir unha imaxe contigo Creo que che podería gustar esta imaxe. - Mantén preso para deter + Mantén premido para deter facelo para todos os conflitos Non se exportaron ficheiros Omitir / Mostrar erros Completado - Preme ir atrás para cancelar - Formato do ficheiro non soportado + Preme en Volver para cancelar + Formato do ficheiro incompatible Erro do intérprete: %1$s Non se puido importar: %1$s %1$s: %2$s @@ -383,7 +381,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Noite Intervalo parcial Intervalos - Exportación instantánea tras o adestramento + Exportación instantánea após a actividade Directorio onde exportar as rutas O ficheiro %1$s xa existe no directorio de destino. Sobrescribir @@ -391,7 +389,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Completado cun erro Completado con %1$d erros - Decorado IU + Decorado da interface Sistema Aínda non hai intervalos Rematou a exportación da ruta á almacenaxe tras a gravación @@ -399,28 +397,28 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Exportados os novos ficheiros Non se atopou ficheiro kml en KMZ Perda - Perda de altitude: %1$d m (%2$d ft) + Desnivel- : %1$d m (%2$d ft) Fallou a exportación, comproba o directorio de exportación. - Previr a reimportación de rutas + Evitar a reimportación de rutas Ficheiros sobrescritos Ficheiros omitidos Erros Abrir a Ruta - Estableceches previr a reimportación da ruta + Configuraches evitar a reimportación da ruta Ficheiros importados Xa existe Erros Cadencia media - Max Cadencia + Cadencia máx Pulso medio Pulso máximo Potencia media Distancia: %1$s Ritmo: %1$s Velocidade: %1$s - Datos de terceiros alleos + Datos de terceiras partes Velocidade da voz - Esta pista non se pode eliminar porque está a funcionar a gravación. + Esta pista non se pode eliminar porque aínda está gravando. Distancia e Velocidade Cadencia Distancia, Velocidade e Cadencia @@ -453,16 +451,16 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Tes que permitirlle a OpenTracks nos axustes do sistema que acceda a Dispositivos Próximos. %1$.1f km/h %1$.1f km/h - %1$.1f km/h (recomendado) + %1$.1f mi/h (recomendado) %1$.1f km/h (recomendado) Reloxo Unidades preferidas, Actividade por defecto, Nome da ruta - A Distancia, Tempo, Voz Velocidade + Distancia, Tempo, Velocidade da voz Unidades e Actividade por defecto Interface da app - Aparencia, Gravación, Deseño, Tema + Aparencia, Disposición na gravación, Decorado GPS - Intervalo de tempo, Distancia intervalo, Max Distancia, Precisión + Intervalo de tempo, Intervalo de distancia, Max Distancia, Precisión Sensores Sensores de ciclismo, Circunferencia da roda, Sensores de carreira Indicacións por Voz @@ -470,7 +468,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Importación, Exportación, Auto Exportación Unidades Valores por defecto - Restablecer Axustes dos Valores + Restablecer Axustes por defecto Elixe disposición Disposicións Escribe o nome da nova disposición @@ -508,7 +506,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Vel. media en movemento Pulso medio Pulso actual - nadando + nadar nadar en augas abertas adestramento Desbotar @@ -517,14 +515,14 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Formato do nome do ficheiro Pulso durante a volta Pulso cardíaco medio - Descartar + Desbotar Velocidade/ritmo medio Velocidade/ritmo da volta - Desbotando Ruta + Desbotando a Ruta Comparte o informe do fallo Ritmo (min/NM) Velocidade (nós) - Náutica (NM, ft) + Náutico (NM, ft) NM kn min/NM @@ -532,7 +530,7 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele %1$.1f nós %1$.1f nós (recomendado) por milla náutica - Non hai ningunha aplicación instalada con soporte para a API de OpenTracks. + Non hai ningunha aplicación instalada compatible coa API de OpenTracks. Sempre %1$s fallou Informar do problema @@ -544,9 +542,9 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Control remoto e API de estatísticas para outras apps Usar o altofalante do dispositivo Exportar todo (un ficheiro con todas as rutas) - Non hai unha aplicación de galería compatible instalada + Non hai unha aplicación de galería compatible dispoñible Ignórase a localización se a exactitude é maior de %1$s - Non hai unha aplicación de cámara compatible + Non hai unha aplicación de cámara compatible dispoñible Filtrar Dispositivos Bluetooth Mostrar todos os dispositivos Bluetooth dispoñibles Imperial (mi, m) @@ -559,16 +557,16 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele {n, plural, =1 {1 segundo} other {{n,number} segundos} } {n, plural, =1 {1 milla por hora} other {{n,number,#.0} millas por hora} } {n, plural, =1 {1 milla náutica} other {{n,number,#.0} millas náuticas} } - ppm + rpm lpm W Taboleiro da API OpenTracks Potencia Máx vespino Anuncios de Parada - Deterse. + Deténdose. Parada - Límite da parada + Limiar da parada %1$d s (recomendado) Cores Dinámicas Ao gravar @@ -590,19 +588,19 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele Non se creou o marcador. Inténtao outra vez. Idioma Predeterminado no sistema - Ganancia e Perda + Gañancia e Perda Pulso medio na volta - Mostrar elevación + Mostrar altitude Mostrar velocidade ou ritmo - Mostrar ritmo cardíaco + Mostrar frecuencia cardíaca Gráficos Aviso do GPS desactivado Ao gravar, mostrar aviso se o GPS está desactivado. %1$d de %2$d: %3$s Diferenza de Zona horaria - Sistema (DynamicColor) - Día (DynamicColor) - Noite (DynamicColor) - para OLED (DynamicColor) + Sistema (Cores Dinámicas) + Día (Cores Dinámicas) + Noite (Cores Dinámicas) + para OLED (Cores Dinámicas) voiceAnnounceLapPower From 466719fbc80adf32809d61fc369f55c3395d2827 Mon Sep 17 00:00:00 2001 From: ghose Date: Sun, 26 Oct 2025 08:00:22 +0000 Subject: [PATCH 04/13] Translated using Weblate (Galician) Currently translated at 100.0% (543 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/ --- src/main/res/values-gl/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index e7c6d3463..a30c2bb59 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -603,4 +603,6 @@ limitations under the License. Noite (Cores Dinámicas) para OLED (Cores Dinámicas) voiceAnnounceLapPower + Velocidade/Ritmo medios (Segmento) + Ritmo medio no Segmento From b8c7fba7d896b5fa95cd0938c6ca61a3ca93b526 Mon Sep 17 00:00:00 2001 From: SomeTr Date: Sun, 26 Oct 2025 13:16:25 +0000 Subject: [PATCH 05/13] Translated using Weblate (Ukrainian) Currently translated at 94.2% (512 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/ --- src/main/res/values-uk/strings.xml | 60 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index e351dbee4..e432b91b1 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -122,8 +122,8 @@ limitations under the License. Шляхи Запуск GPS - Очікується кращий GPS-сигналу - Очікується GPS-сигнал + Очікування кращого сигналу GPS + Очікування сигналу GPS Стрілка Кількість маркерів @@ -136,7 +136,7 @@ limitations under the License. Неможливо вставити маркер, оскільки відсутній сигнал GPS. Повторіть спробу. Маркер вставлено - Скасовано, не додано маркер + Скасовано, маркер не додано Маркер буде назавжди видалено з пам’яті пристрою Видалити маркер? Вибрані маркери буде назавжди видалено з пам’яті пристрою @@ -195,9 +195,7 @@ limitations under the License. Метрична (км, м) Одиниці вимірювання - Цей шлях може вас зацікавити. -\n -\n%1$s + Гадаю, цей маршрут може вас зацікавити. \n \n%1$s Я хочу поділитися з вами інформацією про шлях Середній темп руху @@ -215,7 +213,7 @@ limitations under the License. Загальний час Шлях %1$d - Маркери шляху \"%1$s\" + Маркери треку «%1$s» Шлях і його маркери буде остаточно видалено з пристрою. Видалити шлях? @@ -292,9 +290,9 @@ limitations under the License. залізничний переїзд ресторан покупки - місце + пам’ятка магазин - плавальний басейн + басейн телефон театр туалет @@ -313,7 +311,7 @@ limitations under the License. Точність місцеположення: %1$s Інтервали Ще немає інтервалу - Думаю, вам може бути цікаво це зображення. + Гадаю, це зображення може вас зацікавити. Експорт треку в сховище після завершення запису Миттєвий експорт після тренування Що ви можете зробити: @@ -323,19 +321,19 @@ limitations under the License. \n d) вимкніть енергоощадження. \n \n Якщо нічого не допомагає, будь ласка, повідомте нам про помилку. - Про - Веб-сторінка проекту: %1$s + Про OpenTracks + Вебсторінка проєкту: %1$s Версія: %1$s Код версії: %1$d Бібліотеки - OpenTracks має такі особливості: - Як OpenTracks зберігає зображення зроблені за допомогою маркувань\? - Вони зберігаються у внутрішній пам\'яті застосунку (тобто, доступні тільки для OpenTracks). - Чи потрібен/використовує OpenTrack Google Play Service\? + OpenTracks забезпечує такі можливості: + Як OpenTracks зберігає зображення, використані в якості маркерів? + Вони зберігаються у внутрішній пам’яті застосунку (тобто, доступні тільки для OpenTracks). + Чи потребує/використовує OpenTracks службу Google Play? Як показати трек на мапі\? Як OpenTracks зберігає дані з датчиків\? Як OpenTracks записує дані\? - Як я можу експортувати/поширювати записані треки\? + Як я можу експортувати записані треки і ділитися ними? Тема UI OpenTracks не записує моє місцеположення\? Як я можу підтримати OpenTracks\? @@ -371,21 +369,16 @@ limitations under the License. Файл kml не знайдено в KMZ Файли не імпортовано %1$s:%2$s - Скасовано, фото-маркування не додано + Скасовано, фотомаркер не додано Додати зображення з галереї Відновити трек OpenTracks потребує дозволу на використання GPS. Системна - OpenTracks - це застосунок для відстеження спортивної діяльності, який поважає вашу приватність. - OpenTracks це відгалуження застосунку Google\'s MyTracks (закритого в 2016р). - * створення GPS треків -\n* використання датчика серцевого ритму (тільки Bluetooth LE) -\n* голосовий путівник (за часом або відстанню) -\n* створення маркувань (включаючи зображення) -\n* повноцінний автономний режим -\n* відображення треків на мапі (див. нижче) - Треки можна експортувати з налаштувань у форматах KMZ, KML або GPX. KMZ/KML всі дані, а GPX тільки розташування. Треки, опубліковані за допомогою значка поширення, експортуються як KMZ. - OpenTracks використовує GPS датчик пристрою для безперервного запису місцезнаходження. Якщо GPS пристрій повідомляє неточні дані (наприклад, місцеперебування, швидкість, висота), OpenTracks нічого не може з цим вдіяти. + OpenTracks — застосунок для відстеження спортивної діяльності, який поважає вашу конфіденційність. + OpenTracks — це відгалуження застосунку Google\'s MyTracks (закритого в 2016 р.). + * створення GPS-треків\n* використання датчика серцевого ритму (тільки Bluetooth LE)\n* голосові сповіщення (за часом або відстанню)\n* створення маркерів (у т.ч. із зображеннями)\n* повноцінний автономний режим\n* відображення треків на мапі (див. нижче) + Треки можна експортувати з Налаштувань у форматах KMZ, KML або GPX (KMZ/KML — усі дані, а GPX — тільки розташування). При використанні значка «Поділитися» треки експортуються у форматі KMZ. + OpenTracks використовує GPS-датчик пристрою для безперервного запису місцезнаходження. Якщо GPS-пристрій повідомляє неточні дані (наприклад, місцезнаходження, швидкість, висоту), OpenTracks нічого не може з цим вдіяти. Дані датчика зиписуються в кожному зареєстрованому місці. Що стосується датчика частоти серцевих скорочень для кожного місцезнаходження зберігається тільки одне вимірювання частоти. Якщо ви зупинилися або перебуваєте в приміщенні, дані датчика не будуть записані (але будуть відображатися). Ви можете: \n а) поширювати інформацію про OpenTracks, @@ -407,7 +400,7 @@ limitations under the License. Формат файла експорту/обміну Під час запису показувати статистику без розблокування пристрою. Втрачено - Я хотів би поділитися з вами зображенням + Я хочу поділитися з вами зображенням Каталог експорту треків Використовуйте маленьку піктограму мапи. \n a) (оновлення в реальному часі) Встановіть застосунок OSMDashboard. Він дозволяє дивитися карти онлайн чи офлайн завдяки OpenStreetMap. @@ -461,8 +454,8 @@ limitations under the License. Макет за замовчуванням Виберіть макет Макет видалено - Ім\'я макета вже існує - Введіть ім\'я макета для додавання + Назва макета вже існує + Уведіть назву макета для додавання Довжина кола Часовий інтервал Біг @@ -582,4 +575,9 @@ limitations under the License. {n, plural, =1 {1 } other {{n,number,#.0}} } Потужність {x, plural, =1 {1 ват} few {# вати} other {# ват} } %1$s аварійно завершив роботу + Середня швидкість/темп (відрізок) + Середній темп відрізка + Надіcлати звіт про збій + Пульс за коло + Потужність за коло From b77de1e10dfd1a38b94ad41d7b03938394b84f6b Mon Sep 17 00:00:00 2001 From: SomeTr Date: Sun, 26 Oct 2025 16:21:29 +0000 Subject: [PATCH 06/13] Translated using Weblate (Ukrainian) Currently translated at 94.2% (512 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/ --- src/main/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index e432b91b1..6ff03b45b 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -375,7 +375,7 @@ limitations under the License. OpenTracks потребує дозволу на використання GPS. Системна OpenTracks — застосунок для відстеження спортивної діяльності, який поважає вашу конфіденційність. - OpenTracks — це відгалуження застосунку Google\'s MyTracks (закритого в 2016 р.). + OpenTracks — це відгалуження застосунку Google My Tracks, закритого в 2016 р. * створення GPS-треків\n* використання датчика серцевого ритму (тільки Bluetooth LE)\n* голосові сповіщення (за часом або відстанню)\n* створення маркерів (у т.ч. із зображеннями)\n* повноцінний автономний режим\n* відображення треків на мапі (див. нижче) Треки можна експортувати з Налаштувань у форматах KMZ, KML або GPX (KMZ/KML — усі дані, а GPX — тільки розташування). При використанні значка «Поділитися» треки експортуються у форматі KMZ. OpenTracks використовує GPS-датчик пристрою для безперервного запису місцезнаходження. Якщо GPS-пристрій повідомляє неточні дані (наприклад, місцезнаходження, швидкість, висоту), OpenTracks нічого не може з цим вдіяти. From 901c548d13278204439776f543b8d64c29d907ba Mon Sep 17 00:00:00 2001 From: SomeTr Date: Sun, 26 Oct 2025 20:45:54 +0000 Subject: [PATCH 07/13] Translated using Weblate (Ukrainian) Currently translated at 94.4% (513 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/ --- src/main/res/values-uk/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 6ff03b45b..7bb9b77fe 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -580,4 +580,5 @@ limitations under the License. Надіcлати звіт про збій Пульс за коло Потужність за коло + %1$s (%2$s) From c31b8a5802259a4f93a054e86f5d991aae916a53 Mon Sep 17 00:00:00 2001 From: Claudinux Date: Mon, 27 Oct 2025 14:02:03 +0000 Subject: [PATCH 08/13] Translated using Weblate (Italian) Currently translated at 100.0% (543 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/it/ --- src/main/res/values-it/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index e42c20c3b..5bd74f542 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -621,4 +621,6 @@ Infatti, un\'applicazione deve supportare ACTION_VIEW con MIME applica Notte (colore dinamico) Adatto per OLED (colore dinamico) Passaggio a inattivo. + Velocità/Ritmo medi (segmento) + Ritmo medio nel segmento From 9c902b89ed07210deefdbc5b875bf9a91fcd7f37 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Mon, 27 Oct 2025 12:30:03 +0000 Subject: [PATCH 09/13] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (543 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/zh_Hans/ --- src/main/res/values-zh/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 61a1a66f5..80ca52dd6 100644 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -589,8 +589,8 @@ limitations under the License. 精度不足 %1$s 的位置会被忽略 心率区间:最大心率(bpm) 给其他应用使用的远程控制和统计 API - rpm - bpm + RPM + BPM 瓦 显示所有可发现的蓝牙设备 不使用 @@ -636,4 +636,6 @@ limitations under the License. ‌夜间模式(动态配色) OLED 优化模式(动态配色) 时区偏移 + 平均速度/配速(路段) + 平均路段配速 From cabf5d238eef973d41fb14d30a95bb3ab79e3174 Mon Sep 17 00:00:00 2001 From: SomeTr Date: Tue, 28 Oct 2025 06:33:13 +0000 Subject: [PATCH 10/13] Translated using Weblate (Ukrainian) Currently translated at 94.6% (514 of 543 strings) Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/uk/ --- src/main/res/values-uk/strings.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 7bb9b77fe..6297d00fb 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -134,7 +134,7 @@ limitations under the License. Імпорт із %1$s… - Неможливо вставити маркер, оскільки відсутній сигнал GPS. Повторіть спробу. + Неможливо вставити маркер, оскільки відсутній сигнал GPS. Спробуйте ще раз. Маркер вставлено Скасовано, маркер не додано Маркер буде назавжди видалено з пам’яті пристрою @@ -368,7 +368,7 @@ limitations under the License. Помилка парсера: %1$s Файл kml не знайдено в KMZ Файли не імпортовано - %1$s:%2$s + %1$s: %2$s Скасовано, фотомаркер не додано Додати зображення з галереї Відновити трек @@ -581,4 +581,5 @@ limitations under the License. Пульс за коло Потужність за коло %1$s (%2$s) + Неможливо створити маркер. Спробуйте ще раз. From 4b59660ea16df592529f1971d3716a1e2e07405f Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 29 Oct 2025 22:14:12 +0100 Subject: [PATCH 11/13] Revert "Allow adding newly developed UI Components to existing custom layouts." This reverts commit daa4689f44ecd87fbf4e34bb1f7deeb6be027e8f. --- .../opentracks/settings/PreferencesUtils.java | 15 ----------- .../RecordingLayoutIO.java | 26 ------------------- 2 files changed, 41 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 263cfcce4..79f5d4f7f 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -52,7 +52,6 @@ import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; import de.dennisguse.opentracks.sensors.SensorType; import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; -import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; @@ -851,20 +850,6 @@ public class PreferencesUtils { return resources.getString(R.string.stats_custom_layout_default_layout); } - /** - * @return List of all available field keys with their default visibility settings - */ - @SuppressLint("ResourceType") - public static List getAllAvailableFields() { - List fieldsArrays = getLayoutDataFields(); - return fieldsArrays.stream() - .map(i -> { - String fieldKey = i.getString(0); - return new DataField(fieldKey, false, false, fieldKey.equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); - }) - .toList(); - } - /** * @return custom layout selected or the first one if any has been selected or the one selected is not exists anymore. */ diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java index e85fff22f..fd30e6610 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java @@ -6,7 +6,6 @@ import android.util.Log; import androidx.annotation.NonNull; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import de.dennisguse.opentracks.R; @@ -35,34 +34,9 @@ public class RecordingLayoutIO { } recordingLayout.addField(fromCSV(fieldParts, resources)); } - - // Add any new fields that have been added to the codebase since this layout was saved - addAllInvisibleDataFields(recordingLayout, resources); - return recordingLayout; } - /** - * Adds any missing fields to the layout as hidden fields. - * This ensures that new fields added to the codebase appear in existing layouts. - */ - private static void addAllInvisibleDataFields(@NonNull RecordingLayout recordingLayout, @NonNull Resources resources) { - // Get all field keys currently in the layout - Set existingFieldKeys = recordingLayout.getFields().stream() - .map(DataField::getKey) - .collect(Collectors.toSet()); - - // Get all available fields from the codebase - List allAvailableFields = PreferencesUtils.getAllAvailableFields(); - - // Add any missing fields as hidden - for (DataField dataField : allAvailableFields) { - if (!existingFieldKeys.contains(dataField.getKey())) { - recordingLayout.addField(dataField); - } - } - } - public static String toCSV(List recordingLayouts) { return recordingLayouts.stream().map(RecordingLayout::toCsv).collect(Collectors.joining(CsvLayoutUtils.LINE_SEPARATOR)); } From 361ae909e7d45653bc4c6d62fb66207bb7b5088e Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 27 Oct 2025 22:16:20 +0100 Subject: [PATCH 12/13] Bugfix: post-recording workout crashes. Fixes #2180. Introduced in 02a77e5ce7613f1c7a89f688d68df2bb4978d494 --- .../de/dennisguse/opentracks/io/file/exporter/ExportUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportUtils.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportUtils.java index 714b7ec42..10e34bd50 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportUtils.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportUtils.java @@ -44,7 +44,7 @@ public class ExportUtils { WorkRequest exportRequest = new OneTimeWorkRequest.Builder(ExportWorker.class) .setInputData(new Data.Builder() .putLongArray(ExportWorker.TRACKIDS_KEY, new long[]{trackId.id()}) - .putString(ExportWorker.DIRECTORY_URI_KEY, directory.toString()) + .putString(ExportWorker.DIRECTORY_URI_KEY, directory.getUri().toString()) .putString(ExportWorker.TRACKFILEFORMAT_KEY, trackFileFormat.toString()) .putString(ExportWorker.FILENAME_KEY, null) .build()) From 5746a419050c64e9b8fba966e5f70e8c98f69984 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 30 Oct 2025 07:48:12 +0100 Subject: [PATCH 13/13] Release: v4.23.1 --- build.gradle | 4 ++-- fastlane/metadata/android/en-US/changelogs/6353.txt | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/6353.txt diff --git a/build.gradle b/build.gradle index 59bdf4668..bfc98aa4e 100644 --- a/build.gradle +++ b/build.gradle @@ -46,8 +46,8 @@ android { defaultConfig { applicationId 'de.dennisguse.opentracks' - versionCode 6338 - versionName "v4.23.0" + versionCode 6353 + versionName "v4.23.1" buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\"" diff --git a/fastlane/metadata/android/en-US/changelogs/6353.txt b/fastlane/metadata/android/en-US/changelogs/6353.txt new file mode 100644 index 000000000..95b03dd44 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/6353.txt @@ -0,0 +1,7 @@ +v4.23.1: OpenTracks + +Changes: +- New UI component to show elapsed time in the current segment + +Bugfix: +- Instant post-workout export crashed (introduced in v4.23.0)