Compare commits

...

39 Commits

Author SHA1 Message Date
Dennis Guse a90c7deb32 Release: v4.12.4 2024-05-25 22:03:52 +02:00
ovl-1 c3601e41cd Translated using Weblate (Norwegian Bokmål)
Currently translated at 94.9% (504 of 531 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/
2024-05-25 21:50:11 +02:00
Ghost of Sparta b3d98340dc Translated using Weblate (Hungarian)
Currently translated at 98.4% (523 of 531 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/hu/
2024-05-25 21:50:11 +02:00
josé m ebbd9c1535 Translated using Weblate (Galician)
Currently translated at 99.6% (529 of 531 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/
2024-05-25 21:50:11 +02:00
ken-der-guru 14fc605c45 Translated using Weblate (German)
Currently translated at 98.4% (523 of 531 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/de/
2024-05-25 21:50:11 +02:00
Stephan Paternotte c5ca6644f4 Translated using Weblate (Dutch)
Currently translated at 99.8% (530 of 531 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/nl/
2024-05-25 21:50:11 +02:00
Ghost of Sparta e15c729c00 Translated using Weblate (Hungarian)
Currently translated at 98.1% (521 of 531 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/hu/
2024-05-25 21:50:11 +02:00
Fjuro 93c89690c9 Translated using Weblate (Czech)
Currently translated at 99.8% (530 of 531 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/cs/
2024-05-25 21:50:11 +02:00
Luna f3f05512c9 Translated using Weblate (Chinese (Traditional))
Currently translated at 96.4% (512 of 531 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/zh_Hant/
2024-05-25 21:50:11 +02:00
Luna d2fc2598d1 Translated using Weblate (Japanese)
Currently translated at 48.3% (257 of 531 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/ja/
2024-05-25 21:50:11 +02:00
Luna fd2d2c5820 Translated using Weblate (Finnish)
Currently translated at 88.5% (470 of 531 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/fi/
2024-05-25 21:50:11 +02:00
Luna 01f10bce24 Translated using Weblate (Basque)
Currently translated at 78.7% (418 of 531 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/eu/
2024-05-25 21:50:11 +02:00
Luna fd963b0fdb Translated using Weblate (German)
Currently translated at 97.1% (516 of 531 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/de/
2024-05-25 21:50:11 +02:00
Luna 0947405563 Translated using Weblate (English)
Currently translated at 99.8% (530 of 531 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/en/
2024-05-25 21:50:11 +02:00
Dennis Guse f595bc4d1e Bugfix: delete markers from list was broken.
Fixes #1915.
2024-05-25 21:50:05 +02:00
dependabot[bot] 4b26583c27 ---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-21 06:30:56 +02:00
Quentin 734d4e08e9 Translated using Weblate (French)
Currently translated at 93.1% (491 of 527 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/fr/
2024-05-13 07:10:12 +02:00
josé m 6615034314 Translated using Weblate (Galician)
Currently translated at 99.8% (526 of 527 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/
2024-05-13 07:10:12 +02:00
Stephan Paternotte 039495d107 Translated using Weblate (Dutch)
Currently translated at 100.0% (139 of 139 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-05-13 07:10:12 +02:00
Stephan Paternotte 1d926d72a7 Translated using Weblate (Dutch)
Currently translated at 99.8% (526 of 527 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/nl/
2024-05-13 07:10:12 +02:00
josé m d1af0fa072 Translated using Weblate (Galician)
Currently translated at 99.4% (524 of 527 strings)

Co-authored-by: josé m <correoxm@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/
Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
2024-05-13 07:10:12 +02:00
gallegonovato ef802d1948 Translated using Weblate (Spanish)
Currently translated at 99.4% (524 of 527 strings)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/es/
Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
2024-05-13 07:10:12 +02:00
Fjuro 322e91bc22 Translated using Weblate (Czech)
Currently translated at 99.8% (526 of 527 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (139 of 139 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
Translate-URL: https://hosted.weblate.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/cs/
Translation: OpenTracks/App store metadata files
Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
2024-05-13 07:10:12 +02:00
dependabot[bot] 055f2beb1e Bump org.mockito:mockito-android from 5.11.0 to 5.12.0
Bumps [org.mockito:mockito-android](https://github.com/mockito/mockito) from 5.11.0 to 5.12.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.11.0...v5.12.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-android
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 07:09:53 +02:00
Peter Hercek 6cfc05af82 support for lap cycling power in the announcer
Implements #1806
2024-05-12 15:32:23 +02:00
dependabot[bot] 70a2040142 Bump com.google.android.material:material from 1.11.0 to 1.12.0
Bumps [com.google.android.material:material](https://github.com/material-components/material-components-android) from 1.11.0 to 1.12.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.11.0...1.12.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-03 12:43:02 +02:00
dependabot[bot] 181e1a503c Bump androidx.core:core from 1.13.0 to 1.13.1
Bumps androidx.core:core from 1.13.0 to 1.13.1.

---
updated-dependencies:
- dependency-name: androidx.core:core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-02 07:30:35 +02:00
Dennis Guse b08302237f READMEs: added reference to NoTrustIssues. 2024-05-01 20:02:43 +02:00
Dennis Guse 881f68c580 Upgrade to Gradlew 8.7.0 2024-05-01 19:52:58 +02:00
dm1cael a8a5aa4268 Announcements: add toggle to distance/speed unit announcement
Fixes #1805.
2024-05-01 19:23:26 +02:00
dependabot[bot] 9c8b9ca05d Bump com.android.tools.build:gradle from 8.3.2 to 8.4.0
Bumps com.android.tools.build:gradle from 8.3.2 to 8.4.0.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-01 09:21:00 +02:00
Dennis Guse b70241c967 Upgrade to Gradlew 8.7.0 2024-05-01 09:11:12 +02:00
Dennis Guse a6f3c05e82 ExifTool now supports OpenTracks's GPX. 2024-04-29 07:53:25 +02:00
Stephan Paternotte f9640b0fb1 Translated using Weblate (Dutch)
Currently translated at 100.0% (138 of 138 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-04-28 11:09:07 +02:00
Fjuro 80a48563d3 Translated using Weblate (Czech)
Currently translated at 100.0% (138 of 138 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
2024-04-28 11:09:07 +02:00
Dennis Guse 9e496f97c1 Release: v4.12.3 2024-04-28 11:02:07 +02:00
Dennis Guse 455c2fcf75 Bugfix: idle time should start also if the first trackpoint with a location is stored.
Identified in #1898.
2024-04-28 10:50:56 +02:00
Dennis Guse e590e4e07e Bugfix: overestimated distance.
A combination of idle trackpoint and stale GPS data, resulted in recording lat=0.0 and lng=0.0; and thus inflating distance as well as GPS-based speed.

Fixes #1898.

Introduced in dfdbc373ff
2024-04-28 10:50:56 +02:00
dependabot[bot] 36474e8541 Bump androidx.core:core from 1.12.0 to 1.13.0
Bumps androidx.core:core from 1.12.0 to 1.13.0.

---
updated-dependencies:
- dependency-name: androidx.core:core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-18 06:44:20 +02:00
39 changed files with 415 additions and 175 deletions
+3 -1
View File
@@ -70,7 +70,7 @@ hosted.weblate.org</a>.
* export automatically after each recording (e.g., to sync via [Nextcloud](https://nextcloud.com/))
* avoid duplication: each exported file contain a random unique identifier (i.e., `opentracks:trackid`)
* __Altitude:__
* gain/loss via barometric sensor (if present)
* gain/loss via barometric sensor (internal if present or via Bluetooth's Environmental Sensing Service)
* shown in EGM2008 (above mean sea level); exported as WGS84
* __Bluetooth LE sensors:__
* heart rate
@@ -133,6 +133,8 @@ The Public API is disabled by default to protect the user's privacy, but it can
| [OsmAnd](https://github.com/osmandapp/OsmAnd) | ? | [no](https://github.com/osmandapp/OsmAnd/issues/15271) | [no](https://github.com/osmandapp/OsmAnd/issues/15271) |
| [FitTrackee](https://github.com/SamR1/FitTrackee) | yes | n/a | n/a |
| [SportsTracker](https://github.com/ssaring/sportstracker) | yes, [single tracks only](https://github.com/ssaring/sportstracker/issues/260) | no | no |
| [ExifTool](https://exiftool.org) | [yes](https://exiftool.org/forum/index.php?topic=15972.0) | no | no |
## Dashboard API (incl. map)
+9 -1
View File
@@ -60,7 +60,15 @@ We do not support type of movement (i.e., walking vs running).
* Stryd (incl. power)
* Wahoo Tickr X (Cadence appears to be reported in SPM rather than RPM)
## Tested Barometric Sensor Smartphones
## Barometer (gain/loss)
### 0x2A6D: Environmental Sensing Service
Sadly, Bluetooth sensors providing _air pressure_ via Environmental Sensing Service seem to be very rare.
* NoTrustIssues: https://github.com/OpenTracksApp/NoTrustIssues
An Android app that exposes the internal barometer via Environmental Sensing Service.
### Internal: tested Barometric Sensor Smartphones
OpenTracks derives the altitude gain and altitude loss using the internal barometric sensor of a device (if present).
However, barometric sensor seem to be prone to a lot of noise.
+6 -6
View File
@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.3.2'
classpath 'com.android.tools.build:gradle:8.4.1'
}
}
@@ -64,8 +64,8 @@ android {
defaultConfig {
applicationId "de.dennisguse.opentracks"
versionCode 5749
versionName "v4.12.2."
versionCode 5788
versionName "v4.12.4"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
@@ -131,9 +131,9 @@ dependencies {
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.google.android.material:material:1.11.0'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.core:core:1.12.0'
implementation 'androidx.core:core:1.13.1'
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.7.0'
@@ -142,7 +142,7 @@ dependencies {
androidTestImplementation 'androidx.test:rules:1.5.0'
androidTestImplementation 'androidx.test:runner:1.5.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'org.mockito:mockito-android:5.11.0'
androidTestImplementation 'org.mockito:mockito-android:5.12.0'
androidTestUtil 'androidx.test:orchestrator:1.4.2'
}
@@ -0,0 +1,4 @@
v4.12.2.: OpenTracks
Oprava chyvy:
- Umožnění spuštění senzorů před začátkem záznamu
@@ -0,0 +1,8 @@
v4.12.3: OpenTracks
Opraveny chyby:
- Používání funkcionality IDLE a GPS ukládalo souřadnice 0.0/0.0 a tím pádem přeceňovalo všechny statistiky (vzdálenost >10 000 km). (Vzniklo ve v4.12.0)
- Nečinnost: také spustit, pokud byla obdržena pouze jedna lokace.
Ohledně chyby přeceňování vzdálenosti: uložená data nebudou v OpenTracks opravena.
Doporučení: exportujte záznamy do KML/KMZ a nahraďte neplatné souřadnice.
@@ -0,0 +1,8 @@
v4.12.3: OpenTracks
Bugfix:
- Using GPS and IDLE functionality stored coordinates 0.0/0.0 and thus overestimating all statistics (distance >10.000 km). (Introduced in v4.12.0)
- Idle: also trigger if only one location was received.
Regarding the overestimating distance bug: the stored data will not be fixed within OpenTracks.
Recommendation: export the as KML/KMZ and replace the invalid coordinates.
@@ -0,0 +1,8 @@
v4.12.4: OpenTracks
Changes:
- Announcements: units can be omitted
- Announcements: added lap cycling power
Bugfix:
- Delete markers from list crashed
@@ -0,0 +1,4 @@
v4.12.2 .: OpenTracks
Bugfix:
- Toestaan dat sensoren voor de opname worden gestart
@@ -0,0 +1,8 @@
v4.12.3: OpenTracks
Bugfix:
- Gebruikmakend van GPS- en IDLE-functionaliteit opgeslagen coördinaten 0.0 / 0.0 en overschat zo alle statistieken (afstand >10.000 km). (Ingevoerd in v4.12.0)
- Idle: ook trigger als er maar één locatie is ontvangen.
Met betrekking tot de bug rond de overschatting van afstand: de opgeslagen gegevens worden niet binnen OpenTracks gecorrigeerd.
Aanbeveling: exporteer de als KML / KMZ en vervang de ongeldige coördinaten.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+10 -10
View File
@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@@ -10,6 +10,7 @@ import android.os.Looper;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
import androidx.test.rule.GrantPermissionRule;
import androidx.test.rule.ServiceTestRule;
import org.junit.AfterClass;
@@ -20,12 +21,14 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.TestUtil;
import de.dennisguse.opentracks.content.data.TestDataUtil;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.models.AltitudeGainLoss;
@@ -54,6 +57,9 @@ public class TrackRecordingServiceRecordingTest {
@Rule
public final ServiceTestRule mServiceRule = ServiceTestRule.withTimeout(5, TimeUnit.SECONDS);
@Rule
public GrantPermissionRule mGrantPermissionRule = TestUtil.createGrantPermissionRule();
private final Context context = ApplicationProvider.getApplicationContext();
private ContentProviderUtils contentProviderUtils;
@@ -127,6 +133,47 @@ public class TrackRecordingServiceRecordingTest {
), TestDataUtil.getTrackPoints(contentProviderUtils, trackId));
}
/**
* Test that an IDLE event, doesn't store invalid GPS-provided data.
*/
@MediumTest
@Test
public void recording_startIdle() throws InterruptedException {
// given
TrackPointCreator trackPointCreator = service.getTrackPointCreator();
String startTime = "2020-02-02T02:02:02Z";
trackPointCreator.setClock(startTime);
Track.Id trackId = service.startNewTrack();
String gps1 = "2020-02-02T02:02:03Z";
TrackRecordingServiceTestUtils.sendGPSLocation(trackPointCreator, gps1, 45.0, 35.0, 1, 15);
String gps2 = "2020-02-02T02:02:04Z";
TrackRecordingServiceTestUtils.sendGPSLocation(trackPointCreator, gps2, 45.0, 35.0, 1, 15);
// when
String idleTime = "2020-02-02T02:02:17Z";
trackPointCreator.setClock("2020-02-02T02:02:17Z");
Thread.sleep(Duration.ofSeconds(15).toMillis());
// then
new TrackPointAssert().assertEquals(List.of(
new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)),
new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.parse(gps1))
.setLatitude(45)
.setLongitude(35)
.setHorizontalAccuracy(Distance.of(1))
.setSpeed(Speed.of(15)),
new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.parse(gps2))
.setLatitude(45)
.setLongitude(35)
.setHorizontalAccuracy(Distance.of(1))
.setSpeed(Speed.of(15)),
new TrackPoint(TrackPoint.Type.IDLE, Instant.parse(idleTime))
), TestDataUtil.getTrackPoints(contentProviderUtils, trackId));
}
@MediumTest
@Test
public void testRecording_startPauseResume() {
@@ -44,7 +44,7 @@ public abstract class Aggregator<Input, Output> {
public Output getValue() {
if (!hasValue()) {
return null;
return null; //TODO Check if this is a good idea!
}
if (isRecent()) {
return value;
@@ -4,7 +4,10 @@ import android.location.Location;
import androidx.annotation.NonNull;
public class AggregatorGPS extends Aggregator<Location, Location> {
import java.util.Optional;
public class AggregatorGPS extends Aggregator<Location, Optional<Location>> {
public AggregatorGPS(String sensorAddress) {
super(sensorAddress);
@@ -12,7 +15,7 @@ public class AggregatorGPS extends Aggregator<Location, Location> {
@Override
protected void computeValue(Raw<Location> current) {
value = current.value();
value = Optional.of(current.value());
}
@Override
@@ -22,7 +25,7 @@ public class AggregatorGPS extends Aggregator<Location, Location> {
@NonNull
@Override
protected Location getNoneValue() {
return new Location("none");
protected Optional<Location> getNoneValue() {
return Optional.empty();
}
}
@@ -152,7 +152,8 @@ public final class SensorDataSet {
public void fillTrackPoint(TrackPoint trackPoint) {
if (gps != null && gps.hasValue()) {
trackPoint.setLocation(gps.getValue());
gps.getValue()
.ifPresent(trackPoint::setLocation);
}
if (getHeartRate() != null) {
@@ -197,6 +197,9 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
if (trackPoint.hasLocation() && lastStoredTrackPointWithLocation == null) {
insertTrackPoint(trackPoint, true);
handler.removeCallbacks(ON_IDLE);
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
return true;
}
@@ -4,9 +4,11 @@ import static android.text.Spanned.SPAN_INCLUSIVE_EXCLUSIVE;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceAverageHeartRate;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceAverageSpeedPace;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceLapHeartRate;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceLapPower;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceLapSpeedPace;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceMovingTime;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceTotalDistance;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceUnit;
import android.content.Context;
import android.icu.text.MessageFormat;
@@ -22,11 +24,13 @@ import java.util.Map;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.Power;
import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.settings.UnitSystem;
import de.dennisguse.opentracks.stats.SensorStatistics;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.ui.intervals.IntervalStatistics;
import de.dennisguse.opentracks.util.StringUtils;
class VoiceAnnouncementUtils {
@@ -44,34 +48,37 @@ class VoiceAnnouncementUtils {
Speed averageMovingSpeed = trackStatistics.getAverageMovingSpeed();
Speed currentDistancePerTime = currentInterval != null ? currentInterval.getSpeed() : null;
int perUnitStringId;
int distanceId;
int speedId;
String unitDistanceTTS;
String unitSpeedTTS;
switch (unitSystem) {
case METRIC -> {
perUnitStringId = R.string.voice_per_kilometer;
distanceId = R.string.voiceDistanceKilometersPlural;
speedId = R.string.voiceSpeedKilometersPerHourPlural;
unitDistanceTTS = "kilometer";
unitSpeedTTS = "kilometer per hour";
int perUnitStringId = R.string.empty;
int distanceId = R.string.voiceDistance;
int speedId = R.string.voiceSpeed;
String unitDistanceTTS = StringUtils.EMPTY;
String unitSpeedTTS = StringUtils.EMPTY;
if(shouldVoiceAnnounceUnit()) {
switch (unitSystem) {
case METRIC -> {
perUnitStringId = R.string.voice_per_kilometer;
distanceId = R.string.voiceDistanceKilometersPlural;
speedId = R.string.voiceSpeedKilometersPerHourPlural;
unitDistanceTTS = "kilometer";
unitSpeedTTS = "kilometer per hour";
}
case IMPERIAL_FEET, IMPERIAL_METER -> {
perUnitStringId = R.string.voice_per_mile;
distanceId = R.string.voiceDistanceMilesPlural;
speedId = R.string.voiceSpeedMilesPerHourPlural;
unitDistanceTTS = "mile";
unitSpeedTTS = "mile per hour";
}
case NAUTICAL_IMPERIAL -> {
perUnitStringId = R.string.voice_per_nautical_mile;
distanceId = R.string.voiceDistanceNauticalMilesPlural;
speedId = R.string.voiceSpeedMKnotsPlural;
unitDistanceTTS = "nautical mile";
unitSpeedTTS = "knots";
}
default -> throw new RuntimeException("Not implemented");
}
case IMPERIAL_FEET, IMPERIAL_METER -> {
perUnitStringId = R.string.voice_per_mile;
distanceId = R.string.voiceDistanceMilesPlural;
speedId = R.string.voiceSpeedMilesPerHourPlural;
unitDistanceTTS = "mile";
unitSpeedTTS = "mile per hour";
}
case NAUTICAL_IMPERIAL -> {
perUnitStringId = R.string.voice_per_nautical_mile;
distanceId = R.string.voiceDistanceNauticalMilesPlural;
speedId = R.string.voiceSpeedMKnotsPlural;
unitDistanceTTS = "nautical mile";
unitSpeedTTS = "knots";
}
default -> throw new RuntimeException("Not implemented");
}
double distanceInUnit = totalDistance.toKM_Miles(unitSystem);
@@ -154,6 +161,19 @@ class VoiceAnnouncementUtils {
builder.append(".");
}
if (shouldVoiceAnnounceLapPower() && currentInterval != null && currentInterval.hasAveragePower()) {
int currentPower = Math.round(currentInterval.getAveragePower().getW());
if(shouldVoiceAnnounceUnit()) {
String template = context.getResources().getString(R.string.power_x_watt);
builder.append(" ")
.append(MessageFormat.format(template, Map.of("x", currentPower)));
} else {
builder.append(" ").append(context.getString(R.string.power)).append(" ");
builder.append(String.valueOf(currentPower));
}
builder.append(".");
}
return builder;
}
@@ -333,6 +333,10 @@ public class PreferencesUtils {
return getBoolean(R.string.voice_announce_idle_key, true);
}
public static boolean shouldVoiceAnnounceUnit() {
return getBoolean(R.string.voice_announce_unit_key, true);
}
public static Duration getVoiceAnnouncementFrequency() {
final int DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_frequency_default));
int value = getInt(R.string.voice_announcement_frequency_key, DEFAULT);
@@ -430,6 +434,10 @@ public class PreferencesUtils {
return getBoolean(R.string.voice_announce_lap_heart_rate_key, false);
}
public static boolean shouldVoiceAnnounceLapPower() {
return getBoolean(R.string.voice_announce_lap_power_key, false);
}
@VisibleForTesting
public static void setVoiceAnnounceLapHeartRate(boolean value) {
setBoolean(R.string.voice_announce_lap_heart_rate_key, value);
@@ -26,6 +26,7 @@ import java.time.Instant;
import de.dennisguse.opentracks.data.models.Altitude;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.HeartRate;
import de.dennisguse.opentracks.data.models.Power;
import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.data.models.TrackPoint;
@@ -60,6 +61,7 @@ public class TrackStatistics {
private Float totalAltitudeLoss_m = null;
// The average heart rate seen on this track
private HeartRate avgHeartRate = null;
private Power avgPower = null;
private boolean isIdle;
@@ -83,6 +85,7 @@ public class TrackStatistics {
totalAltitudeGain_m = other.totalAltitudeGain_m;
totalAltitudeLoss_m = other.totalAltitudeLoss_m;
avgHeartRate = other.avgHeartRate;
avgPower = other.avgPower;
isIdle = other.isIdle;
}
@@ -129,6 +132,19 @@ public class TrackStatistics {
}
}
if (avgPower == null) {
avgPower = other.avgPower;
} else {
if (other.avgPower != null) {
// Using total time as weights for the averaging.
// Important to do this before total time is updated
avgPower = Power.of(
(totalTime.getSeconds() * avgPower.getW() + other.totalTime.getSeconds() * other.avgPower.getW())
/ (totalTime.getSeconds() + other.totalTime.getSeconds())
);
}
}
totalDistance = totalDistance.plus(other.totalDistance);
totalTime = totalTime.plus(other.totalTime);
movingTime = movingTime.plus(other.movingTime);
@@ -270,6 +286,15 @@ public class TrackStatistics {
return avgHeartRate;
}
public boolean hasPower() {
return avgPower != null;
}
@Nullable
public Power getAveragePower() {
return avgPower;
}
/**
* Gets the average speed.
* This calculation only takes into account the displacement until the last point that was accounted for in statistics.
@@ -333,6 +358,12 @@ public class TrackStatistics {
}
}
public void setAveragePower(Power power) {
if (power != null) {
avgPower = power;
}
}
public boolean hasTotalAltitudeGain() {
return totalAltitudeGain_m != null;
}
@@ -23,6 +23,7 @@ import java.util.List;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.HeartRate;
import de.dennisguse.opentracks.data.models.Power;
import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.data.models.TrackPoint;
@@ -43,6 +44,8 @@ public class TrackStatisticsUpdater {
private float averageHeartRateBPM;
private Duration totalHeartRateDuration = Duration.ZERO;
private float averagePowerW;
private Duration totalPowerDuration = Duration.ZERO;
// The current segment's statistics
private final TrackStatistics currentSegment;
@@ -125,6 +128,17 @@ public class TrackStatisticsUpdater {
currentSegment.setAverageHeartRate(HeartRate.of(averageHeartRateBPM));
}
// Update power
if (trackPoint.hasPower() && lastTrackPoint != null) {
Duration trackPointDuration = Duration.between(lastTrackPoint.getTime(), trackPoint.getTime());
Duration newTotalDuration = totalPowerDuration.plus(trackPointDuration);
averagePowerW = (totalPowerDuration.toMillis() * averagePowerW + trackPointDuration.toMillis() * trackPoint.getPower().getW()) / newTotalDuration.toMillis();
totalPowerDuration = newTotalDuration;
currentSegment.setAveragePower(Power.of(averagePowerW));
}
{
// Update total distance
Distance movingDistance = null;
@@ -9,6 +9,7 @@ import java.util.List;
import de.dennisguse.opentracks.data.TrackPointIterator;
import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.HeartRate;
import de.dennisguse.opentracks.data.models.Power;
import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.data.models.TrackPoint;
import de.dennisguse.opentracks.stats.TrackStatistics;
@@ -103,6 +104,7 @@ public class IntervalStatistics {
private Float gain_m;
private Float loss_m;
private HeartRate avgHeartRate;
private Power avgPower;
public Interval() {
}
@@ -118,6 +120,7 @@ public class IntervalStatistics {
gain_m = i.gain_m;
loss_m = i.loss_m;
avgHeartRate = i.avgHeartRate;
avgPower = i.avgPower;
}
public Interval(Interval i) {
@@ -126,6 +129,7 @@ public class IntervalStatistics {
gain_m = i.gain_m;
loss_m = i.loss_m;
avgHeartRate = i.avgHeartRate;
avgPower = i.avgPower;
}
public Distance getDistance() {
@@ -160,12 +164,21 @@ public class IntervalStatistics {
return avgHeartRate;
}
public boolean hasAveragePower() {
return avgPower != null;
}
public Power getAveragePower() {
return avgPower;
}
private void add(TrackStatistics trackStatistics, @Nullable TrackPoint lastTrackPoint) {
distance = distance.plus(trackStatistics.getTotalDistance());
time = time.plus(trackStatistics.getTotalTime());
gain_m = trackStatistics.hasTotalAltitudeGain() ? trackStatistics.getTotalAltitudeGain() : gain_m;
loss_m = trackStatistics.hasTotalAltitudeLoss() ? trackStatistics.getTotalAltitudeLoss() : loss_m;
avgHeartRate = trackStatistics.getAverageHeartRate();
avgPower = trackStatistics.getAveragePower();
if (lastTrackPoint == null) {
return;
}
@@ -183,6 +196,7 @@ public class IntervalStatistics {
gain_m = trackStatistics.hasTotalAltitudeGain() ? trackStatistics.getTotalAltitudeGain() : gain_m;
loss_m = trackStatistics.hasTotalAltitudeLoss() ? trackStatistics.getTotalAltitudeLoss() : loss_m;
avgHeartRate = trackStatistics.getAverageHeartRate();
avgPower = trackStatistics.getAveragePower();
}
}
}
@@ -24,6 +24,7 @@ import android.view.MenuItem;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -48,7 +49,7 @@ import de.dennisguse.opentracks.util.IntentUtils;
*
* @author Leif Hendrik Wilden
*/
public class MarkerListActivity extends AbstractActivity {
public class MarkerListActivity extends AbstractActivity implements DeleteMarkerDialogFragment.DeleteMarkerCaller {
public static final String EXTRA_TRACK_ID = "track_id";
@@ -262,6 +263,7 @@ public class MarkerListActivity extends AbstractActivity {
}
}
@UiThread
private void loadData() {
viewBinding.markerListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.menu_markers)));
@@ -281,4 +283,9 @@ public class MarkerListActivity extends AbstractActivity {
private void onRecordingStatusChanged(RecordingStatus status) {
recordingStatus = status;
}
@Override
public void onMarkerDeleted() {
runOnUiThread(this::loadData);
}
}
@@ -57,6 +57,7 @@ import de.dennisguse.opentracks.settings.UnitSystem;
public class StringUtils {
private static final String TAG = StringUtils.class.getSimpleName();
public static final String EMPTY = "";
private StringUtils() {
}
+9 -2
View File
@@ -37,12 +37,12 @@ limitations under the License.
<string name="help_storage_pictures_title">Jak ukládá OpenTracks obrázky pořízené jako značky na cestě\?</string>
<string name="help_storage_pictures_content">Jsou uloženy v interním úložišti aplikace (tj. přístupné pouze v rámci OpenTracks).</string>
<string name="help_track_export_title">Jak mohu exportovat/sdílet zaznamenané stopy\?</string>
<string name="help_track_export_content"> \u0020Trasy lze exportovat z Nastavení jako KMZ, KML nebo GPX. \u0020KMZ a KML obsahuje všechna data, GPX pouze polohu. \u0020Trasy sdílené pomocí <i>ikony sdílení</i> jsou sdíleny jako KMZ. \u0020</string>
<string name="help_track_export_content"> Trasy lze exportovat z Nastavení jako KMZ, KML nebo GPX. KMZ a KML obsahuje všechna data, GPX pouze polohu. Trasy sdílené pomocí <i>ikony sdílení</i> jsou sdíleny jako KMZ. </string>
<string name="help_data_google_play_services_title">Vyžaduje/používá OpenTracks službu Google Play\?</string>
<string name="help_recording_title">Jak OpenTracks zaznamenává data?</string>
<string name="help_recording_content">OpenTracks používá GPS senzor zařízení k nepřetržitému zaznamenávání polohy. Pokud zařízení GPS hlásí nepřesná data (např. polohu, rychlost, nadmořskou výšku), OpenTracks s tím nemůže nic udělat.</string>
<string name="help_data_storage_title">Jak OpenTracks ukládá data ze senzorů\?</string>
<string name="help_data_storage_content"> \u0020Data senzoru se ukládají na zaznamenané místo. \u0020Pokud jde o snímač srdeční frekvence, znamená to, že na každé místo je uloženo pouze <i> jedno </i> měření srdeční frekvence. \u0020Pokud stojíte v klidu nebo jste uvnitř, nebudou zaznamenána žádná data ze senzorů (ale budou zobrazena). \u0020</string>
<string name="help_data_storage_content"> Data senzorů se ukládají na zaznamenané místo. Pokud jde o snímač srdeční frekvence, znamená to, že na každé místo je uloženo pouze <i>jedno</i> měření srdeční frekvence. Pokud stojíte v klidu nebo jste uvnitř, nebudou zaznamenána žádná data ze senzorů (ale budou zobrazena). </string>
<string name="help_gps_troubleshooting_title">OpenTracks nezaznamenává místa?</string>
<string name="help_gps_troubleshooting_content"> \u0020Co můžete udělat:
\n \u0020a) zkontrolujte zda je zapnuta GPS,
@@ -601,4 +601,11 @@ limitations under the License.
<string name="settings_recording_location_distance_summary">%1$s mezi zaznamenanými polohami</string>
<string name="settings_theme_switch_restart">Změna motivu může vyžadovat ruční restart.</string>
<string name="settings_night_mode_option_night_oled">Noční (OLED)</string>
<string name="settings_announcements_unit">Jednotka vzdálenosti/rychlosti</string>
<string name="voiceSpeed">{n, plural, =1 {1} few {{n,number}} other {{n,number,#.0}} }</string>
<string name="voiceDistance">{n, plural, =1 {1 } few {{n,number}} other {{n,number,#.0}} }</string>
<string name="voice_announce_lap_power_key">voiceAnnounceLapPower</string>
<string name="power">Výkon</string>
<string name="settings_announcements_lap_power">Výkon kola</string>
<string name="power_x_watt">Výkon {x, plural, =1 {1 watt} few {# watty} other {# wattů} }</string>
</resources>
+10 -7
View File
@@ -23,13 +23,12 @@ limitations under the License.
<string name="about_libraries">Bibliotheken</string>
<!-- Help -->
<string name="help_feature_title">OpenTracks hat die folgenden Funktionen:</string>
<string name="help_feature_content">
* GPS-Tracks erstellen\n
* einen Herzfrequenzsensor verwenden (nur Bluetooth LE)\n
* Sprachansagen (nach Zeit oder Entfernung)\n
* Markierungen erstellen (inkl. Bilder)\n
* arbeitet vollständig offline\n
* Tracks auf einer Karte anzeigen (siehe unten)</string>
<string name="help_feature_content">* GPS-Tracks erstellen
\n* einen Herzfrequenzsensor verwenden (nur Bluetooth LE)
\n* Sprachansagen (nach Zeit oder Entfernung)
\n* Markierungen erstellen (inkl. Bilder)
\n* arbeitet vollständig offline
\n* Tracks auf einer Karte anzeigen (siehe unten)</string>
<string name="help_track_map_title">Wie wird ein Track auf einer Karte angezeigt?</string>
<string name="help_track_map_content"> Verwende das kleine Kartensymbol.
\n a) (Live-Aktualisierungen) Installiere <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. OSMDashboard stellt Online- oder Offline-Karten über <a href="https://www.openstreetmap.org">OpenStreetMap</a>.
@@ -638,4 +637,8 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="activity_type_kickscooter">Roller</string>
<string name="settings_recording_location_distance_summary">%1$s zwischen aufgezeichneten Orten</string>
<string name="voiceSpeedMKnotsPlural">{n, plural, =1 {1 Knoten} other {{n,number,#.0} Knoten} }</string>
<string name="voiceSpeed">{n, plural, =1 {1} other {{n,number,#.0}} }</string>
<string name="settings_announcements_unit">Distanz/Geschwindigkeits Einheit</string>
<string name="power_x_watt">Leistung {x, plural, =1 {1 Watt} other {# Watt} }</string>
<string name="power">Leistung</string>
</resources>
+1
View File
@@ -656,4 +656,5 @@ limitations under the License.
<string name="settings_recording_location_distance_summary">%1$s entre lugares registrados</string>
<string name="settings_theme_switch_restart">Los cambios del tema pueden requerir un reinicio manual.</string>
<string name="settings_night_mode_option_night_oled">Oscuro (compatible con OLED)</string>
<string name="settings_announcements_unit">Unidad de distancia/velocidad</string>
</resources>
+6 -7
View File
@@ -23,13 +23,12 @@ limitations under the License.
<string name="about_libraries">Liburutegiak</string>
<!-- Help -->
<string name="help_feature_title">OpenTracks ek ezaugarri hauek ditu:</string>
<string name="help_feature_content">
* GPS ibilbideak sortu\n
* erabili bihotz-maiztasuneko sentsorea (Bluetooth LE soilik)\n
* ahots iragarpenak (denboraren edo distantziaren arabera)\n
* Sortu markatzaileak (irudiak barne)\n
* guztiz lineaz kanpo funtzionatzen du\n
* Erakutsi ibilbideak mapa batean (ikusi azpian)</string>
<string name="help_feature_content">* GPS ibilbideak sortu
\n * erabili bihotz-maiztasuneko sentsorea (Bluetooth LE soilik)
\n * ahots iragarpenak (denboraren edo distantziaren arabera)
\n * Sortu markatzaileak (irudiak barne)
\n * guztiz lineaz kanpo funtzionatzen du
\n * Erakutsi ibilbideak mapa batean (ikusi azpian)</string>
<string name="help_track_map_title">Nola erakutsi pista batean mapa batean?</string>
<string name="help_track_map_content"> Erabili maparen ikono txikia.
\n a) (zuzeneko eguneratzeak) Instalatu <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. Lineako edo lineaz kanpoko mapak eskaintzen ditu <a href="https://www.openstreetmap.org">OpenStreetMap</a>.
+6 -7
View File
@@ -23,13 +23,12 @@ limitations under the License.
<string name="about_libraries">Kirjastot</string>
<!-- Help -->
<string name="help_feature_title">OpenTracksissa on seuraavat ominaisuudet:</string>
<string name="help_feature_content">
* luo GPS-reittejä\n
* käytä sykeanturia (vain Bluetooth LE)\n
* ääni-ilmoitukset (ajan tai etäisyyden perusteella)\n
* luo merkkejä (mukaan lukien kuvia)\n
* toimii täysin ilman verkkoyhteyttä\n
* näytä jäljet kartalla (ks. alla)</string>
<string name="help_feature_content">* luo GPS-reittejä
\n * käytä sykeanturia (vain Bluetooth LE)
\n * ääni-ilmoitukset (ajan tai etäisyyden perusteella)
\n * luo merkkejä (mukaan lukien kuvia)
\n * toimii täysin ilman verkkoyhteyttä
\n * näytä jäljet kartalla (ks. alla)</string>
<string name="help_track_map_title">Miten näyttää rata kartalla\?</string>
<string name="help_track_map_content"> Käytä pientä karttakuvaketta.
\n a) (live-päivityksiä) Asenna <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. Se tarjoaa online-tai offline-karttoja kautta <a href="https://www.openstreetmap.org">OpenStreetMap</a>.
+26 -5
View File
@@ -143,8 +143,8 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="description_max_speed">Vitesse max. : %1$.2f km/h (%2$.1f mi/h)</string>
<string name="description_min_altitude">Élévation min. : %1$d m (%2$d pi)</string>
<string name="description_moving_time">Durée en déplacement : %1$s</string>
<string name="description_pace_imperial">Vitesse (min/mi)</string>
<string name="description_pace_metric">Vitesse (min/km)</string>
<string name="description_pace_imperial">Allure (min/mi)</string>
<string name="description_pace_metric">Allure (min/km)</string>
<string name="description_recorded_time">Date d\'enregistrement : %1$s</string>
<string name="description_speed_ms">Vitesse (m/s)</string>
<string name="description_sensor_cadence">Cadence (tr/min)</string>
@@ -410,7 +410,7 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<!-- Share image -->
<string name="share_image_subject">J aimerais partager une image avec vous</string>
<string name="share_image_body">Je pense que cette image pourrait vous intéresser.</string>
<string name="track_pace_notification">Vitesse : %1$s</string>
<string name="track_pace_notification">Allure : %1$s</string>
<string name="track_speed_notification">Vitesse : %1$s</string>
<string name="track_detail_intervals_tab">Intervalles</string>
<string name="interval_list_empty_message">Il n\'y a pas encore d\'intervalle</string>
@@ -494,12 +494,12 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="settings_announcements_totaltime_frequency">Intervalle de temps</string>
<string name="settings_announcements_distance_frequency">Intervalle de distance</string>
<string name="settings_layout_reset_confirm_title">Réinitialiser vos dispositions \?</string>
<string name="settings_layout_reset_done">Tous les paramètres pas défaut sont revenus à leur valeur par défaut</string>
<string name="settings_layout_reset_done">Tous les paramètres par défaut sont revenus à leur valeur par défaut</string>
<string name="settings_all_reset">Réinitialiser</string>
<string name="location_coordinate">%1$s°</string>
<string name="location_latitude_longitude">%1$s, %2$s</string>
<string name="permission_bluetooth_failed">OpenTracks a besoin de la permission d\'utiliser le Bluetooth.</string>
<string name="settings_recording_customize_layout_select_columns">Champs de données pas rangée</string>
<string name="settings_recording_customize_layout_select_columns">Champs de données par rangée</string>
<string name="field_set_primary">Principal</string>
<string name="value_float_kilometer_hour_recommended">%1$.1f km/h (recommandé)</string>
<string name="value_float_mile_hour">%1$.1f mi/h</string>
@@ -637,4 +637,25 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="settings_sensor_heart_rate_max">Zones : fréquence cardiaque maximale (bpm)</string>
<string name="settings_sensor_bluetooth_service_filter_title">Filtrer les périphériques Bluetooth</string>
<string name="settings_sensor_bluetooth_service_filter_off">Afficher tout les périphériques Bluetooth découverts</string>
<string name="settings_recording_location_distance_summary">%1$s entre chaque localisation enregistrée</string>
<string name="sensor_state_pressure">Baromètre</string>
<string name="sensor_state_power_max">Puissance maximale</string>
<string name="sensor_state_power_unit">W</string>
<string name="bluetooth_sensor_summary">%1$s (%2$s)</string>
<string name="settings_announcements_idle_category_title">Alertes de mise en veille</string>
<string name="settings_recording_title">Enregistrement</string>
<string name="settings_theme_switch_restart">Le changement de thème peut nécessiter un redémarrage manuel.</string>
<string name="settings_ui_dynamic_colors_summary">Utiliser des couleurs dynamiques définies par l\'utilisateur (Android 12+ uniquement ; requiert un redémarrage manuel)</string>
<string name="settings_recording_idle_timeout_title">Délai avant mise en veille</string>
<string name="settings_night_mode_option_night_oled">Sombre (compatible OLED)</string>
<string name="settings_announcements_unit">Unité de Distance/Vitesse</string>
<string name="value_internal_sensor">Capteur interne</string>
<string name="value_int_seconds">%1$d s (recommandé)</string>
<string name="voiceIdle">Mise en veille.</string>
<string name="settings_recording_min_sampling_interval_title">Fréquence d\'échantillonnage</string>
<string name="sensor_state_cadence_unit">rpm</string>
<string name="sensor_state_heart_rate_unit">bpm</string>
<string name="settings_announcements_idle_title">En veille</string>
<string name="settings_ui_dynamic_colors_title">Couleurs dynamiques</string>
<string name="permission_recording_failed">OpenTracks a besoin de la permission d\'accéder à votre localisation ainsi qu\'aux appareils à proximité.</string>
</resources>
+13 -7
View File
@@ -24,11 +24,11 @@ limitations under the License.
<!-- Help -->
<string name="help_feature_title">Características de OpenTracks:</string>
<string name="help_feature_content">* crear rutas GPS
\n * usar monitor do pulso cardíaco (só Bluetooth LE)
\n * anuncios por voz (de tempo ou distancia)
\n * crear marcadores (incl. fotos)
\n * funciona sen precisar conexión á rede
\n * mostra as rutas nun mapa (ver abaixo)</string>
\n* usar monitor do pulso cardíaco (só Bluetooth LE)
\n* anuncios por voz (de tempo ou distancia)
\n* crear marcadores (incl. fotos)
\n* funciona sen precisar conexión á rede
\n* mostra as rutas nun mapa (ver abaixo)</string>
<string name="help_track_map_title">Como mostrar a ruta no mapa\?</string>
<string name="help_track_map_content"> \u0020Usa a icona do mapa pequeno.
\n a) (actualizacións en directo) Instala <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. Proporciona mapas en liña ou sen conexión grazas a <a href="https://www.openstreetmap.org">OpenStreetMap</a>.
@@ -37,14 +37,14 @@ limitations under the License.
<string name="help_storage_pictures_title">De que xeito garda OpenTracks as fotos tomadas como marcadores\?</string>
<string name="help_storage_pictures_content">Gárdanse na almacenaxe interna da app (só accesible desde OpenTracks).</string>
<string name="help_track_export_title">De que xeito exporto/importo as rutas gravadas\?</string>
<string name="help_track_export_content"> \u0020As rutas pódense exportar desde os Axustes como KMZ, KML ou GPX. \u0020KMZ/KML inclúe todos os datos; GPX só localización. \u0020As rutas compartidas a través da <i>icona compartir</i> compártense como KMZ. \u0020</string>
<string name="help_track_export_content"> 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 <i>icona compartir</i> compártense como KMZ. </string>
<string name="help_data_google_play_services_title">OpenTracks precisa/utiliza Google Play Service\?</string>
<string name="help_recording_title">Como grava OpenTracks os datos\?</string>
<string name="help_recording_content">
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.</string>
<string name="help_data_storage_title">De que xeito garda OpenTracks os datos dos sensores\?</string>
<string name="help_data_storage_content"> \u0020Os datos dos sensores gárdanse asociados á localización. \u0020 Respecto do ritmo cardíaco, significa que só se garda <i>unha medida</i> asociada a unha localización. \u0020 Se te detés ou estás en interiores, non se gardarán datos do sensor (mais serán mostrados). \u0020</string>
<string name="help_data_storage_content"> Os datos dos sensores gárdanse asociados á localización. Respecto do ritmo cardíaco, significa que só se garda <i>unha medida</i> asociada a unha localización. \u0020Se te detés ou estás en interiores, non se gardarán datos do sensor (mais serán mostrados). </string>
<string name="help_gps_troubleshooting_title">OpenTracks non grava as localizacións\?</string>
<string name="help_gps_troubleshooting_content"> \u0020Podes intentar:
\n a) mira que o GPS esté activado,
@@ -603,4 +603,10 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele
<string name="settings_recording_location_distance_summary">%1$s entre posicións gravadas</string>
<string name="settings_theme_switch_restart">Os cambios de decorado poderían requerir reinicio.</string>
<string name="settings_night_mode_option_night_oled">Noite (para OLED)</string>
<string name="settings_announcements_unit">Unidades de distancia/velocidade</string>
<string name="voiceSpeed">{n, plural, =1 {1} other {{n,number,#.0}} }</string>
<string name="voiceDistance">{n, plural, =1 {1 } other {{n,number,#.0}} }</string>
<string name="settings_announcements_lap_power">Potencia na volta</string>
<string name="power">Potencia</string>
<string name="power_x_watt">Potencia {x, plural, =1 {1 watio} other {# watios} }</string>
</resources>
+4
View File
@@ -596,4 +596,8 @@ limitations under the License.
<string name="help_data_google_play_services_content">Nem</string>
<string name="settings_theme_switch_restart">A témaváltoztatások kézi újraindítást igényelnek.</string>
<string name="settings_night_mode_option_night_oled">Éjszaka (kímélő OLED)</string>
<string name="settings_announcements_unit">Távolság/sebesség egység</string>
<string name="power">Erő</string>
<string name="voiceSpeed">{n,number,#.0}</string>
<string name="settings_announcements_lap_power">Kör teljesítmény</string>
</resources>
+5
View File
@@ -306,10 +306,15 @@ limitations under the License.
<string name="waypoint_type_water_fountain">噴水</string>
<string name="waypoint_type_waypoint">地点</string>
<string name="help_feature_content">"* GPS トラックを作成します
\n
\n * 心拍センサーを使用します (Bluetooth LE のみ)
\n
\n * 音声アナウンス(時間または距離)
\n
\n * マーカーの作成 (写真を含む)
\n
\n * 完全にオフラインで動作します
\n
\n * 地図上にトラックを表示します (下記を参照)"</string>
<string name="help_data_google_play_services_content">いいえ</string>
</resources>
+10 -1
View File
@@ -455,7 +455,7 @@ limitations under the License.
<string name="field_set_secondary">Sekundær</string>
<string name="field_remove_from_layout">Fjern</string>
<string name="settings_announcements_totaltime_frequency">Tidsintervall</string>
<string name="settings_announcements_distance_frequency">Distanseintervall</string>
<string name="settings_announcements_distance_frequency">Rundelengde</string>
<string name="permission_bluetooth_failed">OpenTracks krever tillatelse til å bruke Blåtann.</string>
<string name="permission_bluetooth_failed_rejected">Du må manuelt gi OpenTracks tilgang til «enheter i nærheten» i systeminnstillingene.</string>
<string name="settings_generic_sensor">Generisk</string>
@@ -580,4 +580,13 @@ limitations under the License.
<string name="settings_announcements_idle_title">Inaktivitet</string>
<string name="settings_recording_idle_timeout_title">Inaktivitetsterskel</string>
<string name="activity_type_kickscooter">sparkesykkel</string>
<string name="settings_recording_title">Opptak</string>
<string name="settings_ui_dynamic_colors_title">Dynamiske farger</string>
<string name="settings_ui_dynamic_colors_summary">Bruk brukerdefinerte dynamiske farger (kun Android 12+; krever manuell omstart)</string>
<string name="settings_night_mode_option_night_oled">Natt (OLED-vennlig)</string>
<string name="settings_announcements_unit">Distanse/hastighet-enhet</string>
<string name="settings_recording_location_distance_summary">%1$s mellom registrerte posisjoner</string>
<string name="settings_announcements_lap_power">Runde-kraft</string>
<string name="power_x_watt">Kraft {x, plural, =1 {1 watt} other {# watt} }</string>
<string name="power">Kraft</string>
</resources>
+14 -7
View File
@@ -24,11 +24,11 @@ limitations under the License.
<!-- Help -->
<string name="help_feature_title">OpenTracks heeft de volgende kenmerken:</string>
<string name="help_feature_content">* GPS-tracks aanmaken
\n * een hartslagsensor gebruiken (alleen Bluetooth LE)
\n * spraakaankondigingen (op tijd of afstand)
\n * markereringen aanmaken (incl. foto\'s)
\n * werkt volledig offline
\n * toon tracks op een kaart (zie hieronder)</string>
\n* een hartslagsensor gebruiken (alleen Bluetooth LE)
\n* spraakaankondigingen (op tijd of afstand)
\n* markereringen aanmaken (incl. foto\'s)
\n* werkt volledig offline
\n* toon tracks op een kaart (zie hieronder)</string>
<string name="help_track_map_title">Hoe wordt een spoor op een kaart weergegeven\?</string>
<string name="help_track_map_content"> \u0020Gebruik het kleine kaartpictogram.
\n \u0020a) \u0020(live updates) Installeer <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. Het biedt online of offline kaarten via <a href="https://www.openstreetmap.org">OpenStreetMap</a>.
@@ -37,14 +37,14 @@ limitations under the License.
<string name="help_storage_pictures_title">Hoe slaat OpenTracks foto\'s op die als markeringen zijn genomen\?</string>
<string name="help_storage_pictures_content">Deze worden opgeslagen in de interne opslag van de app (d.w.z. alleen toegankelijk binnen OpenTracks).</string>
<string name="help_track_export_title">Hoe kan ik opgenomen tracks exporteren/delen?</string>
<string name="help_track_export_content"> \u0020Tracks kunnen worden geëxporteerd vanuit de instellingen als KMZ, KML of GPX. KMZ/KML alle gegevens; GPX alleen locaties. \u0020Tracks die worden gedeeld via het <i>share-icoontje</i> worden gedeeld als KMZ \u0020</string>
<string name="help_track_export_content"> Tracks kunnen worden geëxporteerd vanuit de instellingen als KMZ, KML of GPX. KMZ/KML alle gegevens; GPX alleen locaties. Tracks die worden gedeeld via het <i>share-icoontje</i> worden gedeeld als KMZ </string>
<string name="help_data_google_play_services_title">Vereist/gebruikt OpenTracks Google Play Service\?</string>
<string name="help_recording_title">Hoe legt OpenTracks gegevens vast?</string>
<string name="help_recording_content">
OpenTracks gebruikt de GPS-sensor van het apparaat om de locatie continu te registreren.
Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid, hoogte), kan OpenTracks daar niets aan doen.</string>
<string name="help_data_storage_title">Hoe slaat OpenTracks sensorgegevens op?</string>
<string name="help_data_storage_content"> \u0020De sensorgegevens worden per opgenomen locatie opgeslagen. In termen van een hartslagsensor betekent dit dat slechts <i>een</i> hartslagmeting per locatie wordt opgeslagen. Als u stilstaat of binnenshuis bent, worden er geen sensorgegevens geregistreerd (maar wel getoond) \u0020</string>
<string name="help_data_storage_content"> De sensorgegevens worden per opgenomen locatie opgeslagen. In termen van een hartslagsensor betekent dit dat slechts <i>een</i> hartslagmeting per locatie wordt opgeslagen. Als u stilstaat of binnenshuis bent, worden er geen sensorgegevens geregistreerd (maar wel getoond) </string>
<string name="help_gps_troubleshooting_title">OpenTracks neemt geen locaties op?</string>
<string name="help_gps_troubleshooting_content"> \u0020Wat u kunt doen:
\n \u0020a) Controleer of GPS is ingeschakeld,
@@ -602,4 +602,11 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid
<string name="settings_recording_min_sampling_interval_title">Interval van metingen</string>
<string name="settings_theme_switch_restart">Themawijzigingen kunnen een handmatige herstart verlangen.</string>
<string name="settings_night_mode_option_night_oled">Nacht (OLED-vriendelijk)</string>
<string name="settings_announcements_unit">Afstand-/snelheidseenheid</string>
<string name="voiceSpeed">{n, plural, =1 {1} other {{n,number,#.0}} }</string>
<string name="voiceDistance">{n, plural, =1 {1 } other {{n,number,#.0}} }</string>
<string name="voice_announce_lap_power_key">voiceAnnounceLapPower</string>
<string name="power">Power</string>
<string name="settings_announcements_lap_power">Lap power</string>
<string name="power_x_watt">Power {x, plural, =1 {1 watt} other {# watt} }</string>
</resources>
+1 -5
View File
@@ -38,11 +38,7 @@ limitations under the License.
<string name="help_storage_pictures_title">OpenTracks 如何存儲作為標記拍攝的照片?</string>
<string name="help_storage_pictures_content">這些儲存在應用程序內部儲存區中 (即,只能在 OpenTracks 中存取)。</string>
<string name="help_track_export_title">如何匯出/分享 紀錄的蹤跡?</string>
<string name="help_track_export_content">
可以從設定匯出蹤跡為 KMZ、KML 或 GPX。
KMZ/KML 全部資料;GPX 只有位置。
通過<i>分享圖示</i>以分享蹤跡為 KMZ。
</string>
<string name="help_track_export_content"> \u0020可以從設定匯出蹤跡為 KMZ、KML 或 GPX。 \u0020KMZ/KML 全部資料;GPX 只有位置。 \u0020通過<i>分享圖示</i>以分享蹤跡為 KMZ。 \u0020</string>
<string name="help_data_google_play_services_title">OpenTracks 是否需要/使用 Google Play 服務?</string>
<string name="help_data_google_play_services_content">否</string>
<string name="help_recording_title">OpenTracks 是如何記錄資料的?</string>
+2
View File
@@ -250,6 +250,8 @@
<bool name="voice_announce_average_speed_pace_default" translatable="false">true</bool>
<string name="voice_announce_lap_speed_pace_key" translatable="false">voiceAnnounceLapSpeedPace</string>
<bool name="voice_announce_lap_speed_pace_default" translatable="false">true</bool>
<string name="voice_announce_unit_key" translatable="false">voiceAnnounceUnit</string>
<bool name="voice_announce_unit_default" translatable="false">true</bool>
<string name="voice_announce_average_heart_rate_key" translatable="false">voiceAnnounceAverageHeartRate</string>
<bool name="voice_announce_average_heart_rate_default" translatable="false">false</bool>
+35 -62
View File
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!--
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,11 +13,11 @@ distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
--><resources>
<string name="empty"/>
<string name="about_preference_title">About OpenTracks</string>
<string name="about_description"><i>OpenTracks</i> is a sport tracking application that completely respects your privacy.</string>
<string name="about_url">Project web page: <a href="%1$s">%1$s</a></string>
<string name="about_url">Project webpage: <a href="%1$s">%1$s</a></string>
<string name="about_version_name">Version name: %1$s</string>
<string name="about_version_code">Version code: %1$d</string>
<string name="about_history">OpenTracks is a fork of <a href="https://code.google.com/archive/p/mytracks/"><i>Google\'s MyTracks</i></a> (discontinued in 2016).</string>
@@ -24,15 +25,12 @@ limitations under the License.
<string name="about_libraries">Libraries</string>
<!-- Help -->
<string name="help_feature_title">OpenTracks has the following features:</string>
<string name="help_feature_content">
* create GPS tracks\n
* use a heart rate sensor (Bluetooth LE only)\n
* voice announcements (by time or distance)\n
* create markers (incl. pictures)\n
* works completely offline\n
* show tracks on a map (see below)
</string>
<string name="help_feature_content">* create GPS tracks
\n* use a heart rate sensor (Bluetooth LE only)
\n* voice announcements (by time or distance)
\n* create markers (incl. pictures)
\n* works completely offline
\n* show tracks on a map (see below)</string>
<string name="help_track_map_title">How to show a track on a map?</string>
<string name="help_track_map_content">
Use the small map icon.\n
@@ -47,33 +45,19 @@ limitations under the License.
These apps need to support the KMZ file format (only locations and timestamps).
In fact, an app needs to support <i>ACTION_VIEW</i> with MIME <i>application/vnd.google-earth.kmz</i>.
</string>
<string name="help_storage_pictures_title">How does OpenTracks store pictures that were taken as markers?</string>
<string name="help_storage_pictures_content">These are stored in the app internal storage (i.e., only accessible within OpenTracks).</string>
<string name="help_track_export_title">How can I export/share recorded tracks?</string>
<string name="help_track_export_content">
Tracks can be exported from the Settings as KMZ, KML, or GPX.
KMZ/KML all data; GPX only locations.
Tracks shared via the <i>share icon</i> are shared as KMZ.
</string>
<string name="help_track_export_content"> Tracks can be exported from the Settings as KMZ, KML, or GPX. KMZ/KML all data; GPX only locations. Tracks shared via the <i>share icon</i> are shared as KMZ. </string>
<string name="help_data_google_play_services_title">Does OpenTracks require/use Google Play Service?</string>
<string name="help_data_google_play_services_content">No</string>
<string name="help_recording_title">How does OpenTracks record data?</string>
<string name="help_recording_content">
OpenTracks uses the GPS sensor of the device to record the location continuously.
If the GPS device reports inaccurate data (e.g., location, speed, elevation), OpenTracks cannot do anything about it.
</string>
<string name="help_data_storage_title">How does OpenTracks store sensor data?</string>
<string name="help_data_storage_content">
Sensor data is stored per recorded location.
In terms of a heart rate sensor, this means that only <i>one</i> heart rate measurement is stored per location.
If you are standing still or are indoors, no sensor data will be recorded (but it will be shown).
</string>
<string name="help_data_storage_content"> Sensor data is stored per recorded location. In terms of a heart rate sensor, this means that only <i>one</i> heart rate measurement is stored per location. If you are standing still or are indoors, no sensor data will be recorded (but it will be shown). </string>
<string name="help_gps_troubleshooting_title">OpenTracks is not recording locations?</string>
<string name="help_gps_troubleshooting_content">
What you can do:\n
@@ -84,7 +68,6 @@ limitations under the License.
\n
If everything does not help please report a bug.
</string>
<string name="help_support_title">How can I support OpenTracks?</string>
<string name="help_support_content">
You can:\n
@@ -96,9 +79,7 @@ limitations under the License.
f) donate, and\n
g) do whatever you think helps OpenTracks.
</string>
<string name="open_track_as_trackfileformat">Open as %1$s</string>
<!-- Activity Type -->
<string name="activity_type_airplane">airplane</string>
<string name="activity_type_atv">ATV</string>
@@ -208,7 +189,7 @@ limitations under the License.
<string name="export_error_post_workout">Post-workout export failed, please check the export directory.</string>
<string name="export_cannot_write_to_dir">Cannot write to export directory.</string>
<string name="export_dir_not_writable">" (not writable!)"</string>
<string name="export_progress_message">Exporting to %1$s&#8230;</string>
<string name="export_progress_message">Exporting to %1$s…</string>
<string name="export_track_already_exists_msg">The file %1$s already exists at the destination directory.</string>
<string name="export_all_do_it_for_all">do it for all conflicts</string>
<string name="export_track_errors">Files not exported</string>
@@ -225,7 +206,7 @@ limitations under the License.
<string name="generic_name">Name</string>
<string name="generic_name_line">Name: %1$s</string>
<string name="generic_open_track">Open Track</string>
<string name="generic_recording">Recording&#8230;</string>
<string name="generic_recording">Recording…</string>
<string name="generic_save">Save</string>
<string name="generic_tracks">Tracks</string>
<string name="generic_overwrite">Overwrite</string>
@@ -272,7 +253,7 @@ limitations under the License.
<string name="import_error_list_dialog_title">Files not imported</string>
<string name="import_file_imported">File %1$s imported</string>
<string name="import_prevent_reimport">You have set prevent re-import track</string>
<string name="import_progress_message">Importing from %1$s&#8230;</string>
<string name="import_progress_message">Importing from %1$s…</string>
<string name="import_progress_summary_ok_msg">Files imported</string>
<string name="import_progress_summary_exists_msg">Already exists</string>
<string name="import_progress_summary_errors_msg">Errors</string>
@@ -338,36 +319,24 @@ limitations under the License.
<string name="sensor_could_not_scan">Could not scan for Bluetooth devices (error %1$i).</string>
<string name="bluetooth_disabled">Please enable Bluetooth.</string>
<string name="bluetooth_sensor_summary">%1$s (%2$s)</string>
<string name="settings_open_tracks_summary">All About OpenTracks Project</string>
<string name="settings_defaults_title">Default Units and Activity</string>
<string name="settings_defaults_summary">Preferred Units, Default Activity, Track Default Name</string>
<string name="settings_ui_title">User Interface</string>
<string name="settings_ui_summary">Appearance, Recording Layout, Theme</string>
<string name="settings_gps_sensor">GPS</string>
<string name="settings_gps_summary">Time interval, Distance interval, Max Distance, Accuracy</string>
<string name="settings_sensors_title">Sensors</string>
<string name="settings_sensors_summary">Cycling Sensors, Wheel Circumference, Running Sensors</string>
<string name="settings_announcements_idle_category_title">Idle Announcements</string>
<string name="settings_announcements_idle_title">Idle</string>
<string name="settings_announcements_statistics_title">Statistics Announcements</string>
<string name="settings_announcements_summary">Time, Distance, Voice Speed</string>
<string name="settings_import_export_title">Import and Export</string>
<string name="settings_import_export_summary">Import, Export, Auto Export</string>
<string name="settings_units_category">Units</string>
<string name="settings_activity_defaults_category">Activity\'s Defaults</string>
<string name="settings_reset_summary">Reset Settings to Default Values</string>
<!-- Settings Advanced -->
<string name="settings_advanced">Advanced</string>
<string name="settings_default_trackfileformat">Export/sharing file format</string>
@@ -406,14 +375,13 @@ limitations under the License.
<string name="settings_night_mode_option_day">Day</string>
<string name="settings_night_mode_option_night">Night</string>
<string name="settings_night_mode_option_night_oled">Night (OLED friendly)</string>
<string name="settings_announcements_totaltime_frequency">Time interval</string>
<string name="settings_announcements_distance_frequency">Lap length</string>
<string name="settings_announcements_average_heart_rate">Average heart rate</string>
<string name="settings_announcements_lap_heart_rate">Lap heart rate</string>
<string name="settings_announcements_average_speed_pace">Average speed/pace</string>
<string name="settings_announcements_lap_speed_pace">Lap speed/pace</string>
<string name="settings_announcements_unit">Distance/speed unit</string>
<!-- Custom Layout -->
@@ -437,7 +405,6 @@ limitations under the License.
<string name="settings_generic_sensor">Generic</string>
<string name="settings_cycling_sensor">Cycling</string>
<string name="settings_running_sensor">Running</string>
<string name="settings_sensor_cycling_distance_speed">Distance and Speed</string>
<string name="settings_sensor_cycling_cadence">Cadence</string>
<string name="settings_sensor_running_speed_and_cadence">Distance, Speed, and Cadence</string>
@@ -445,9 +412,7 @@ limitations under the License.
<string name="settings_sensor_bluetooth_service_filter_title">Filter Bluetooth Devices</string>
<string name="settings_sensor_bluetooth_service_filter_on">Only show Bluetooth devices that announce required services</string>
<string name="settings_sensor_bluetooth_service_filter_off">Show all discoverable Bluetooth devices</string>
<string name="settings_sensor_heart_rate_max">Zones: maximum Heart rate (bpm)</string>
<!-- Settings Stats -->
<string name="settings_stats_rate_title">Preferred rate</string>
<string name="settings_stats_units_imperial">Imperial (mi, ft)</string>
@@ -455,7 +420,6 @@ limitations under the License.
<string name="settings_stats_units_metric">Metric (km, m)</string>
<string name="settings_stats_units_nautical">Nautical (NM, ft)</string>
<string name="settings_stats_units_title">Preferred units</string>
<!-- Settings public api -->
<string name="settings_api_title">Public API</string>
<string name="settings_api_summary">Remote control and statistics API for other apps</string>
@@ -467,11 +431,9 @@ limitations under the License.
<string name="settings_public_api_dashboard_enabled_title">Automatic data transfer</string>
<string name="settings_public_api_dashboard_enabled_summary_on">An application that started a recording can also access the recorded data.</string>
<string name="settings_public_api_dashboard_enabled_summary_off">Recorded data will not be shared automatically with other applications.</string>
<!-- Settings import/export -->
<string name="settings_import_section">Import</string>
<string name="settings_export_section">Export</string>
<string name="settings_prevent_reimport_tracks_title">Prevent re-import of tracks</string>
<!-- Share Track -->
<string name="share_track_share_file_body">I think you might be interested in this track.\n\n%1$s</string>
@@ -510,7 +472,7 @@ limitations under the License.
<string name="track_delete_one_confirm_message">The track and its markers will be permanently deleted from the device.</string>
<string name="track_delete_one_confirm_title">Delete track?</string>
<string name="track_delete_multiple_confirm_message">The selected tracks and their markers will be permanently deleted from the device.</string>
<string name="track_delete_progress_message">Deleting&#8230;</string>
<string name="track_delete_progress_message">Deleting…</string>
<string name="track_delete_number_of_tracks">%1$d tracks</string>
<string name="track_delete_not_recording">This track cannot be deleted as it is currently recorded.</string>
<string name="track_discarding">Discarding Track</string>
@@ -602,6 +564,12 @@ limitations under the License.
other {{n,number,#.0} knots}
}
</string>
<string name="voiceSpeed">
{n, plural,
=1 {1}
other {{n,number,#.0}}
}
</string>
<string name="voice_on_device_speaker_title">Use the device\'s speaker</string>
<string name="voice_per_kilometer">per kilometer</string>
<string name="voice_per_mile">per mile</string>
@@ -629,6 +597,12 @@ limitations under the License.
other {{n,number,#.0} nautical miles}
}
</string>
<string name="voiceDistance">
{n, plural,
=1 {1 }
other {{n,number,#.0}}
}
</string>
<string name="average_heart_rate">Average heart rate</string>
<string name="current_heart_rate">Current heart rate</string>
<!-- Waypoint Type -->
@@ -686,12 +660,9 @@ limitations under the License.
<!-- Share image -->
<string name="share_image_subject">I would like to share an image with you</string>
<string name="share_image_body">I think you might be interested in this image.</string>
<string name="hold_to_stop">Hold to stop</string>
<string name="instant_export_enabled_summary">Export track to storage after recording is finished</string>
<string name="instant_export_enabled_title">Instant post-workout export</string>
<string name="settings_default_export_uri_title">Track export directory</string>
<!-- Fields -->
<string name="field_set_primary">Primary</string>
@@ -703,14 +674,16 @@ limitations under the License.
<string name="error_crash_title">%1$s crashed</string>
<string name="share_crash_report">Share crash report</string>
<string name="report_bug">Report bug</string>
<string name="select_show_on_map_behavior">Select \"show on map\" behavior</string>
<string name="show_on_map_format_ask">Ask</string>
<string name="show_on_dashboard">OpenTracks Dashboard API</string>
<string name="show_on_dashboard_not_installed">No application supporting OpenTracks Dashboard API installed.</string>
<string name="always">Always</string>
<string name="introduction_osm_dashboard">OpenTracks itself does not provide a map. Please install OSMDashboard to view your recordings on a map.</string>
<string name="settings_recording_min_sampling_interval_title">Sampling time interval</string>
<string name="settings_recording_location_distance_summary">%1$s between recorded locations</string>
</resources>
<string name="voice_announce_lap_power_key">voiceAnnounceLapPower</string>
<string name="settings_announcements_lap_power">Lap power</string>
<string name="power_x_watt">Power {x, plural, =1 {1 watt} other {# watts} }</string>
<string name="power">Power</string>
</resources>
+21 -12
View File
@@ -25,6 +25,13 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/settings_announcements_statistics_title">
<SwitchPreferenceCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:defaultValue="@bool/voice_announce_unit_default"
android:key="@string/voice_announce_unit_key"
android:title="@string/settings_announcements_unit" />
<ListPreference
android:defaultValue="@string/voice_announcement_frequency_default"
android:entryValues="@array/voice_announcement_frequency_values"
@@ -32,13 +39,6 @@
android:title="@string/settings_announcements_totaltime_frequency"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:defaultValue="@string/voice_announcement_distance_default"
android:entryValues="@array/voice_announcement_distance_values"
android:key="@string/voice_announcement_distance_key"
android:title="@string/settings_announcements_distance_frequency"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="@bool/voice_announce_total_distance_default"
android:key="@string/voice_announce_total_distance_key"
@@ -54,20 +54,29 @@
android:key="@string/voice_announce_average_speed_pace_key"
android:title="@string/settings_announcements_average_speed_pace" />
<SwitchPreferenceCompat
android:defaultValue="@bool/voice_announce_lap_speed_pace_default"
android:key="@string/voice_announce_lap_speed_pace_key"
android:title="@string/settings_announcements_lap_speed_pace" />
<SwitchPreferenceCompat
android:defaultValue="@bool/voice_announce_average_heart_rate_default"
android:key="@string/voice_announce_average_heart_rate_key"
android:title="@string/settings_announcements_average_heart_rate" />
<ListPreference
android:defaultValue="@string/voice_announcement_distance_default"
android:entryValues="@array/voice_announcement_distance_values"
android:key="@string/voice_announcement_distance_key"
android:title="@string/settings_announcements_distance_frequency"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="@bool/voice_announce_lap_speed_pace_default"
android:key="@string/voice_announce_lap_speed_pace_key"
android:title="@string/settings_announcements_lap_speed_pace" />
<SwitchPreferenceCompat
android:defaultValue="@bool/voice_announce_lap_heart_rate_default"
android:key="@string/voice_announce_lap_heart_rate_key"
android:title="@string/settings_announcements_lap_heart_rate" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/voice_announce_lap_power_key"
android:title="@string/settings_announcements_lap_power" />
</PreferenceCategory>
</PreferenceScreen>