forked from upstream-mirrors/OpenTracks
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a90c7deb32 | |||
| c3601e41cd | |||
| b3d98340dc | |||
| ebbd9c1535 | |||
| 14fc605c45 | |||
| c5ca6644f4 | |||
| e15c729c00 | |||
| 93c89690c9 | |||
| f3f05512c9 | |||
| d2fc2598d1 | |||
| fd2d2c5820 | |||
| 01f10bce24 | |||
| fd963b0fdb | |||
| 0947405563 | |||
| f595bc4d1e | |||
| 4b26583c27 | |||
| 734d4e08e9 | |||
| 6615034314 | |||
| 039495d107 | |||
| 1d926d72a7 | |||
| d1af0fa072 | |||
| ef802d1948 | |||
| 322e91bc22 | |||
| 055f2beb1e | |||
| 6cfc05af82 | |||
| 70a2040142 | |||
| 181e1a503c | |||
| b08302237f | |||
| 881f68c580 | |||
| a8a5aa4268 | |||
| 9c8b9ca05d | |||
| b70241c967 | |||
| a6f3c05e82 | |||
| f9640b0fb1 | |||
| 80a48563d3 | |||
| 9e496f97c1 | |||
| 455c2fcf75 | |||
| e590e4e07e | |||
| 36474e8541 |
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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.
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -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
@@ -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
|
||||
|
||||
|
||||
+47
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+47
-27
@@ -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() {
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>.
|
||||
|
||||
@@ -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>.
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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…</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…</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…</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…</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>
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user