Compare commits

..

68 Commits

Author SHA1 Message Date
Dennis Guse ef73f89fc9 Release: v4.15.0 2024-12-01 11:01:47 +01:00
Dennis Guse c4579eb91f Settings: language chooser can be used from Android 14/SDK34.
Part of #1974.
2024-12-01 10:52:50 +01:00
Dennis Guse a015b87cc3 UI: interval list uses gain/loss as caption (instead of elevation).
Fixes #2003.
2024-11-30 14:47:04 +01:00
Dennis Guse 27e38410d7 READMEs: add Flybeeper's Pressure Sensor (a BLE barometer). 2024-11-30 13:23:44 +01:00
Dennis Guse 714f1e715a Merge remote-tracking branch 'weblate/main' 2024-11-30 12:07:44 +01:00
Dennis Guse c8183949e2 Github action: use ubuntu for tests. 2024-11-30 10:03:20 +01:00
Dennis Guse 4313b51e1e Settings: add custom language/locale chooser (SDK33+).
Corsican was not available using Android's per-app-language-chooser.

Fixes #1974.
2024-11-30 09:46:57 +01:00
Anonymous e4eebb92d3 Translated using Weblate (Kannada)
Currently translated at 97.1% (515 of 530 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/kn/
2024-11-30 09:36:45 +01:00
Simon Artus 61f496926a Translated using Weblate (French)
Currently translated at 17.8% (26 of 146 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/fr/
2024-11-30 09:36:44 +01:00
Anonymous ba3c8f6a2d Translated using Weblate (Turkish)
Currently translated at 96.9% (514 of 530 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/tr/
2024-11-30 09:36:44 +01:00
Anonymous a5ba6fb0dc Translated using Weblate (Japanese)
Currently translated at 48.4% (257 of 530 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-11-30 09:36:43 +01:00
Anonymous e0a28923fe Translated using Weblate (Indonesian)
Currently translated at 58.6% (311 of 530 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/id/
2024-11-30 09:36:43 +01:00
Aindriú Mac Giolla Eoin 4f05b65f32 Translated using Weblate (Irish)
Currently translated at 100.0% (530 of 530 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/ga/
2024-11-30 09:36:42 +01:00
Aindriú Mac Giolla Eoin bec9be8402 Translated using Weblate (Irish)
Currently translated at 100.0% (146 of 146 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/ga/
2024-11-30 09:36:42 +01:00
Cloud Esp a46de8f872 Translated using Weblate (French)
Currently translated at 94.7% (504 of 532 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-11-30 09:36:41 +01:00
Stephan Paternotte 993c2a1617 Translated using Weblate (Dutch)
Currently translated at 100.0% (146 of 146 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-11-30 09:36:41 +01:00
Fjuro cddfbf8b80 Translated using Weblate (Czech)
Currently translated at 100.0% (146 of 146 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
2024-11-30 09:36:40 +01:00
Dennis Guse cba55eab74 Upgrade to Gradlew 8.11.1 2024-11-30 09:36:20 +01:00
Dennis Guse 0b4a18deb4 Move about page from settings to TrackList menu 2024-11-30 09:30:06 +01:00
dependabot[bot] 7cd054f591 Bump com.android.tools.build:gradle from 8.6.1 to 8.7.2
Bumps com.android.tools.build:gradle from 8.6.1 to 8.7.2.

---
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-11-28 23:27:21 +01:00
Dennis Guse 2cc4218dc6 Removal of the "show on map"-feature using KML/GPX.
Dashboard API is nicer and easier.

Fixes #2012.
2024-11-24 10:57:55 +01:00
Dennis Guse d9de56be33 Release: v4.14.2 2024-11-20 21:18:43 +01:00
Stephan Paternotte fa1496d130 Translated using Weblate (Dutch)
Currently translated at 100.0% (145 of 145 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-11-19 18:38:56 +01:00
Aindriú Mac Giolla Eoin 89059caec2 Translated using Weblate (Irish)
Currently translated at 100.0% (145 of 145 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/ga/
2024-11-19 18:38:55 +01:00
Fjuro 8f1d8e2881 Translated using Weblate (Czech)
Currently translated at 100.0% (145 of 145 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
2024-11-19 18:38:54 +01:00
gallegonovato 54e456046e Translated using Weblate (Spanish)
Currently translated at 8.2% (12 of 145 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/es/
2024-11-19 18:38:54 +01:00
Dennis Guse 1775c52291 Bugfix: layouts need inset (edge-to-edge)
Part of #2008 and #1955 (Android 15 upgrade).
2024-11-19 18:38:47 +01:00
Dennis Guse b50965f0e8 Bugfix: AppBarLayout needs inset (edge-to-edge)
Part of #2008 and #1955 (Android 15 upgrade).
2024-11-19 18:38:47 +01:00
Dennis Guse d9bba7852c Cleanup: removed unused drawables. 2024-11-19 18:38:47 +01:00
Dennis Guse 5ff91a98f4 Release: v4.14.1 2024-11-17 15:07:14 +01:00
Simon Artus 79f62bd3db Translated using Weblate (French)
Currently translated at 17.3% (25 of 144 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/fr/
2024-11-16 17:00:29 +00:00
Simon Artus c387729301 Translated using Weblate (French)
Currently translated at 92.8% (494 of 532 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-11-16 17:00:24 +00:00
dependabot[bot] 1094059fb8 Bump com.android.tools:desugar_jdk_libs from 2.1.2 to 2.1.3
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.2 to 2.1.3.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

---
updated-dependencies:
- dependency-name: com.android.tools:desugar_jdk_libs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-08 07:32:48 +01:00
dependabot[bot] affb4e1053 Bump androidx.core:core from 1.13.1 to 1.15.0
Bumps androidx.core:core from 1.13.1 to 1.15.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-10-31 05:34:40 +01:00
dependabot[bot] 0547a14fbd Bump androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0
Bumps androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 05:32:05 +01:00
Dennis Guse 39d6c9a298 Revert "Bump com.android.tools.build:gradle from 8.6.1 to 8.7.1"
This reverts commit 9c51a31b01.
2024-10-19 08:46:55 +02:00
dependabot[bot] 9c51a31b01 Bump com.android.tools.build:gradle from 8.6.1 to 8.7.1
Bumps com.android.tools.build:gradle from 8.6.1 to 8.7.1.

---
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-10-18 19:57:37 +02:00
Dennis Guse f7f58141de Added settings for disabling idle functionality. 2024-10-18 19:57:10 +02:00
Hosted Weblate e46d3cd06c Update translation files
Updated by "Remove blank strings" hook in Weblate.

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/
2024-10-18 17:15:56 +00:00
Aindriú Mac Giolla Eoin a40b87efb6 Translated using Weblate (Irish)
Currently translated at 100.0% (532 of 532 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/ga/
2024-10-18 17:15:53 +00:00
Stephan Paternotte e98dff55ae Translated using Weblate (Dutch)
Currently translated at 100.0% (144 of 144 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-10-17 04:41:48 +00:00
Fjuro f0b7de4c7c Translated using Weblate (Czech)
Currently translated at 100.0% (144 of 144 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
2024-10-17 04:41:47 +00:00
Aindriú Mac Giolla Eoin f0f571480b Translated using Weblate (Irish)
Currently translated at 100.0% (144 of 144 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/ga/
2024-10-17 04:41:47 +00:00
dependabot[bot] 072fdb12ed Bump androidx.core:core-location-altitude
Bumps androidx.core:core-location-altitude from 1.0.0-alpha02 to 1.0.0-alpha03.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-17 06:41:42 +02:00
dependabot[bot] fda2fae02b Bump androidx.test:orchestrator from 1.5.0 to 1.5.1
Bumps androidx.test:orchestrator from 1.5.0 to 1.5.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-17 06:38:36 +02:00
dependabot[bot] a09fa93887 Bump org.mockito:mockito-android from 5.14.1 to 5.14.2
Bumps [org.mockito:mockito-android](https://github.com/mockito/mockito) from 5.14.1 to 5.14.2.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.14.1...v5.14.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-16 07:04:01 +02:00
dependabot[bot] 8f0ed91f80 Bump reactivecircus/android-emulator-runner from 2.32.0 to 2.33.0
Bumps [reactivecircus/android-emulator-runner](https://github.com/reactivecircus/android-emulator-runner) from 2.32.0 to 2.33.0.
- [Release notes](https://github.com/reactivecircus/android-emulator-runner/releases)
- [Changelog](https://github.com/ReactiveCircus/android-emulator-runner/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reactivecircus/android-emulator-runner/compare/v2.32.0...v2.33.0)

---
updated-dependencies:
- dependency-name: reactivecircus/android-emulator-runner
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 07:05:10 +02:00
Dennis Guse e5a60a8141 Bugfix: UI for adding photos to marker was invisible.
Introduced in 00258fd93e

Fixes #1996.
2024-10-12 20:41:33 +02:00
Dennis Guse c7d3c19919 Revert "Bump com.android.tools.build:gradle from 8.6.1 to 8.7.0"
This reverts commit 95b070bb58.
2024-10-12 13:33:35 +02:00
Dennis Guse 594a34980b Release: v4.14.0 2024-10-04 07:32:25 +02:00
dependabot[bot] 95b070bb58 Bump com.android.tools.build:gradle from 8.6.1 to 8.7.0
Bumps com.android.tools.build:gradle from 8.6.1 to 8.7.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-10-01 23:06:26 +02:00
dependabot[bot] 66e3f000e9 Bump org.mockito:mockito-android from 5.14.0 to 5.14.1
Bumps [org.mockito:mockito-android](https://github.com/mockito/mockito) from 5.14.0 to 5.14.1.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.14.0...v5.14.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 07:01:27 +02:00
dependabot[bot] 1a381562e5 Bump org.mockito:mockito-android from 5.13.0 to 5.14.0
Bumps [org.mockito:mockito-android](https://github.com/mockito/mockito) from 5.13.0 to 5.14.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.13.0...v5.14.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-09-30 17:03:58 +02:00
josé m b72bd60586 Translated using Weblate (Galician)
Currently translated at 18.1% (26 of 143 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/gl/
2024-09-29 16:42:59 +02:00
jakobend 4e9c27af6f Translated using Weblate (German)
Currently translated at 99.8% (531 of 532 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-09-29 16:42:58 +02:00
ovl-1 1638fab0df Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.7% (4 of 143 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nb_NO/
2024-09-29 16:42:57 +02:00
Patrick Santa Maria e3cba91bf1 Translated using Weblate (Corsican)
Currently translated at 99.6% (530 of 532 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/co/
2024-09-29 16:42:57 +02:00
Stephan Paternotte bf1746fcd1 Translated using Weblate (Dutch)
Currently translated at 100.0% (143 of 143 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/nl/
2024-09-29 16:42:56 +02:00
Aindriú Mac Giolla Eoin d19ca3851c Translated using Weblate (Irish)
Currently translated at 100.0% (143 of 143 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/ga/
2024-09-29 16:42:55 +02:00
Fjuro 1b868bd71d Translated using Weblate (Czech)
Currently translated at 100.0% (143 of 143 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/cs/
2024-09-29 16:42:54 +02:00
Fjuro d8bcbcc183 Translated using Weblate (Czech)
Currently translated at 100.0% (532 of 532 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-09-29 16:42:54 +02:00
Aindriú Mac Giolla Eoin 294cbc12ef Translated using Weblate (Irish)
Currently translated at 99.8% (531 of 532 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/ga/
2024-09-29 16:42:53 +02:00
gallegonovato 1d2abf07bf Translated using Weblate (Spanish)
Currently translated at 7.7% (11 of 142 strings)

Translation: OpenTracks/App store metadata files
Translate-URL: https://hosted.weblate.org/projects/opentracks/app-store-metadata-files/es/
2024-09-29 16:42:52 +02:00
Ghost of Sparta 86dfa5df67 Translated using Weblate (Hungarian)
Currently translated at 99.8% (531 of 532 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-09-29 16:42:51 +02:00
Dennis Guse ed70b0d982 Upgrade to Gradlew 8.10.2 2024-09-29 16:42:37 +02:00
dependabot[bot] 0afe4c5149 Bump com.android.tools.build:gradle from 8.6.0 to 8.6.1
Bumps com.android.tools.build:gradle from 8.6.0 to 8.6.1.

---
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-09-18 07:13:10 +02:00
Dennis Guse 2e7a3b7465 Use AltitudeConverterCompat instead of custom solution.
Fixes #1920.
2024-09-14 16:05:32 +02:00
Dennis Guse ca92666176 Target Android 14/API34.
Fixes #1955.
2024-09-08 13:51:41 +02:00
123 changed files with 897 additions and 38940 deletions
+8 -2
View File
@@ -7,7 +7,7 @@ on:
jobs:
test:
timeout-minutes: 45
runs-on: macos-latest
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
@@ -17,8 +17,14 @@ jobs:
distribution: 'adopt'
java-version: '17'
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: run tests
uses: reactivecircus/android-emulator-runner@v2.32.0
uses: reactivecircus/android-emulator-runner@v2.33.0
with:
arch: x86_64
api-level: 34
+1
View File
@@ -66,6 +66,7 @@ We do not support type of movement (i.e., walking vs running).
### 0x2A6D: Environmental Sensing Service
Sadly, Bluetooth sensors providing _air pressure_ via Environmental Sensing Service seem to be very rare.
* [Flybeeper Pressure Sensor](https://market.flybeeper.com/device/ps1)
* NoTrustIssues: https://github.com/OpenTracksApp/NoTrustIssues
An Android app that exposes the internal barometer via Environmental Sensing Service.
+11 -10
View File
@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.6.0'
classpath 'com.android.tools.build:gradle:8.7.2'
}
}
@@ -51,7 +51,7 @@ android {
targetCompatibility JavaVersion.VERSION_17
}
compileSdk 34
compileSdk 35
buildFeatures {
viewBinding true
@@ -64,13 +64,13 @@ android {
defaultConfig {
applicationId "de.dennisguse.opentracks"
versionCode 5870
versionName "v4.13.1"
versionCode 5938
versionName "v4.15.0"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
minSdk 26
targetSdk 34
targetSdk 35
testInstrumentationRunner "de.dennisguse.opentracks.TestRunner"
testInstrumentationRunnerArguments clearPackageData: 'true'
@@ -125,24 +125,25 @@ android {
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.2'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.3'
implementation 'androidx.appcompat:appcompat:1.7.0'
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.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.core:core:1.13.1'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.core:core:1.15.0'
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.7.0'
implementation 'androidx.core:core-location-altitude:1.0.0-alpha03'
androidTestImplementation 'androidx.test:core:1.6.1'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test:rules:1.6.1'
androidTestImplementation 'androidx.test:runner:1.6.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
androidTestImplementation 'org.mockito:mockito-android:5.13.0'
androidTestImplementation 'org.mockito:mockito-android:5.14.2'
androidTestUtil 'androidx.test:orchestrator:1.5.0'
androidTestUtil 'androidx.test:orchestrator:1.5.1'
}
-41
View File
@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
height="188"
id="svg2"
version="1.1"
viewBox="0 0 78 188"
width="78"
xmlns="http://www.w3.org/2000/svg">
<defs id="defs6" />
<g id="layer1" />
<g
style="display:inline"
id="layer2" />
<metadata id="metadata8">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:title />
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="fill:#cccccc;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.7019608"
d="m 1,150 38,37 39,-37 H 50 V 97 L 29,81 v 69 z"
id="path31161" />
<path
style="fill:#cccccc;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.7019608"
d="M 29,51 V 70 L 50,86 V 67 Z"
id="path31169" />
<path
style="fill:#cccccc;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.7019608"
d="M 29,23 V 40 L 50,56 V 39 Z"
id="path31192" />
<path
style="fill:#cccccc;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.7019608"
d="M 29,0 V 14 L 50,29 V 16 Z"
id="path31194" />
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,9 @@
v4.13.1: OpenTracks
Změny:
- Kalendář agregovaných statistik využívá regionální preference (Android 14+)
Opravy chyb:
- KML 2.3: standardizovaný název pole pro srdeční tep
- Seznam stop: stav nahrávání nebyl správně aktualizován
- Opravy rozhraní související s Material 3
@@ -0,0 +1,7 @@
v4.14.0: OpenTracks
Změny:
- Použití dat Androidx EGM2008 (namísto přibalení našeho vlastního řešení).
Vývojář:
- Cíl Android 15 / SDK 35
@@ -0,0 +1,7 @@
v4.14.1: OpenTracks
Změny:
- Detekce zastavení může být zakázána
Oprava chyby:
- Rozhraní přidávání obrázků ke značkám bylo skryto
@@ -0,0 +1,4 @@
v4.14.2: OpenTracks
Oprava chyby:
- Android 15: rozhraní již nepřetéká (edge-to-edge)
@@ -0,0 +1,7 @@
v4.14.0: OpenTracks
Changes:
- Use Androidx' EGM2008 data (instead of bundling our custom solution).
Developer:
- Target Android15/ SDK35
@@ -0,0 +1,8 @@
v4.14.1: OpenTracks
Changes:
- Idle detection can be disabled
Bugfix:
- UI for adding pictures to markers was hidden
@@ -0,0 +1,4 @@
v4.14.2: OpenTracks
Bugfix:
- Android 15: UI is not overflowing anymore (edge-to-edge)
@@ -0,0 +1,8 @@
v4.15.0: OpenTracks
Changes:
- In-app language selector (Android 14 or later)
- Show-on-map-feature only supports OSM Dashboard (removed KML/KMZ or GPX)
Developer:
- Github actions now uses Ubuntu
@@ -0,0 +1,15 @@
v3.0.0: OpenTracks
Primer lanzamiento de OpenTracks (es decir, una bifurcación de MyTracks)
Cambios:
- Cambio de nombre de MyTracks a OpenTracks
- Se agregó un sensor de frecuencia cardíaca Bluetooth LE
- Se eliminaron todas las funciones que requieren acceso a Internet.
- Se eliminó la integración de Google Maps
- Se eliminó el uso de los servicios de Google Play.
- Se eliminaron los sensores ANT+
- Se eliminaron los sensores clásicos de Bluetooth.
- Se eliminó Protobuf
- Se eliminaron la estimación de calorías y la estimación de actividad.
- Se eliminó la API del servicio MyTracks (es decir, no hay integración con otras aplicaciones)
@@ -0,0 +1,7 @@
v4.14.1: OpenTracks
Cambios:
- Detección de inactividad se puede desactivar
Correcciones de errores:
- UI para añadir imágenes a los marcadores estaba oculto
@@ -0,0 +1,15 @@
v3.0.0 : OpenTracks
Première édition de OpenTracks (c'est-à-dire bifurcation du dépôt depuis MyTracks)
Changements:
- Renommé de MyTracks à OpenTracks
- Capteur de fréquence cardiaque par Bluetooth LE ajouté
- Toutes les fonctionnalités nécessitant une connexion Internet ont été enlevées
- Intégration Google Maps enlevée
- Toutes les utilisations des services Google Play ont été enlevées
- Capteurs ANT+ enlevés
- Capteurs Bluetooth classiques enlevés
- Protobuf enlevé
- Estimations de calories et d'activité enlevés
- API Service MyTracks enlevée (c'est-à-dire, pas d'intégration avec les autres applications)
@@ -0,0 +1,17 @@
v3.0.1 : OpenTracks
Changements :
− Partage des marqueurs
− Restructuration des paramètres
− Suppression du bouton retour de la barre d'action
− Exportation : suppression de l'option de paramétrage de la taille de photo
− Exportation : KML est désormais sélectionnable en tant que format
Correction de bogues :
− Le répertoire d'export est désormais /OpenTracks/
− Le mode paysage ne plante plus
− Correction de l'export KML/KMZ
Développeurs :
− Les tests sont exécutables (mais beaucoup d'échecs)
− Activation de l'intégration continue avec TravisCI (pas de tests)
@@ -0,0 +1,14 @@
v3.1.0 : OpenTracks
Changements :
− Ajout de l'option pour montrer les traces sur une application de carte (testé avec OsmAnd et Maps.ME)
− Ajout des statistiques de la trace sans débloquer l'appareil, durant le tracé
− Suppression du mode paysage pour la vue détaillée de la trace (était bogué)
− Suppression des suggestions pour l'historique de recherche
Correction de bogue :
− Demande des permissions de stockage pour tout importer / tout exporter
Développeurs :
− Mise à niveau vers Gradle 5.6
− Ne pas minifier les compilations release
@@ -0,0 +1,16 @@
v3.2.0 : OpenTracks
Changements :
− Suppression Widget
− Introduction des icons material design
− Suppression du snowboard et du ski (besoin de nouveaux icons)
Correction de bogue :
− Correction de la fonctionnalité de recherche
Développeurs :
− Correction de (quelques) cas de test
− Suppression de fonctionnalités parcelable
− Nettoyage majeur et reformatage
− Ne pas utiliser la diffusion pour la communication app widget
− stats_content.xml ne contient pas d'autres fichiers
@@ -0,0 +1,7 @@
v3.2.1 : OpenTracks
Changements :
− Les paramètres sont désormais une page unique
Développeurs :
− Paramètres passé à Androidx compat (utilisation de fragments)
@@ -0,0 +1,13 @@
v3.2.2 : OpenTracks
Changements :
− Suppression des statistiques agrégées
− Migré vers Material Design
Correction de bogues :
− Correction de l'export de données de capteurs
− Correction de l'import de données de capteurs incomplètes
Développeurs :
− Remplacement de la barre d'action par une barre d'outil
− Migré vers androidx appcompat (incluant Material Design)
@@ -0,0 +1,14 @@
v3.2.3 : OpenTracks
Changements :
− Partage : utilise Android Sharesheet
− Partage : partage de plusieurs tracés en tant que fichier individuel
− Utilisation d'Android ShareSheet
− Capteur de fréquence cardiaque (Bluetooth LE) : reconnexion automatique
Correction de bogues :
− Capteur de fréquence cardiaque (Bluetooth LE) : déconnecte correctement
− La fréquence cardiaque n'était pas toujours montrée lors de l'enregistrement
Développeurs :
− Activation des tests d'instrumentation de TravisCI
@@ -0,0 +1,5 @@
v3.2.4 : OpenTracks
Correction de bogue :
− Plantage activité paramètres
Suppression de la possibilité de change la voix / la fréquence de division depuis le menu contextuel
@@ -0,0 +1,15 @@
v3.2.5 : OpenTracks
Changements :
− Désactivation du changement d'activité
− Ajout des permissions pour Android 10 : enregistrement des données de localisation
Correction de bogue :
− Correction des paramètres de réinitialisation
Développeurs :
− Préférences
− Si les paramètres ne peuvent être chargés, remise à zéro de toutes les préférences
− Déplacement de l'accès des préférences vers PreferencesUtil
− Déplacement paramètres défaut préférences de code à XML
− Utilise SummaryProvider
@@ -0,0 +1,8 @@
v3.2.6 : OpenTracks
Changements :
− Moniteur de fréquence cardiaque : scanne les appareils disponibles
− Suppression du raccourci vers les paramètres Bluetooth
Développeurs :
− Préférences : défaut de préférences déplacé de code à XML
@@ -0,0 +1,10 @@
v3.2.7 : OpenTracks
Changements :
− Notification montre la précision GPS
− Montre une notification d'avertissement si la précision GPS descend en dessous du seuil
− Montre toujours les graphiques en fonction du temps, ainsi que par la distance
− Ajout de l'aide (dans les paramètres)
Correction de bogue :
- TrackDetailActivity : désactivation du mode paysage non fonctionnel (temporaire)
@@ -0,0 +1,10 @@
v3.2.8 : OpenTracks
Changements :
− Graphique : zoom en effectuant des gestes
Correction de bogues :
− L'export via KMZ n'exportait pas le nom des images correctement
− Le partage de plusieurs tracés n'incluait pas les fichiers KMZ
− L'IU de MarkerDetailActivity n'était pas montré
− Les paramètres plantaient si les préférences pour le rythme cardiaque n'étaient pas initialisées
@@ -0,0 +1,10 @@
v3.2.9 : OpenTracks
Changements :
− Option pour garder l'écran allumé lors de l'enregistrement
− Marqueurs : suppression des marqueurs divisés
− L'annonceur vocal fonctionne désormais sans la permission READ_PHONE_STATE
Correction de bogues :
− Statistiques : le rythme cardiaque n'était pas montré
− Statistiques : le temps était brièvement remis à 0s
@@ -0,0 +1,11 @@
v3.2.10 : OpenTracks
Changements :
− ChartView n'est désormais plus configurable
− Après redémarrage : suppression du redémarrage automatique d'un enregistrement incomplet
Correction de bogues :
− L'annonceur vocal utilise MAY_DUCK (à nouveau)
− ChartView montre les marqueurs (à nouveau)
− Correction du paysage de recordingLayout pour TrackListActivity
− Demande du comportement de l'API des fichiers obsolètes (nécessaire pour Android 10)
@@ -0,0 +1,12 @@
v3.2.11 : OpenTracks
Bogues :
− La vitesse maximale est égale à la vitesse moyenne
Correction de bogue :
− Plantage lors de la sélection du capteur de rythme cardiaque
Développeurs :
− Remplacement de TabHost par TabsLayout
− Suppression premier point de cheminement spécial
− Suppression des traductions dupliquées
@@ -0,0 +1,12 @@
v3.3.1 : OpenTracks
Changements :
− Android 10 : lors de la désinstallation, permet la conservation des données de l'app
− Introduction de l'API du tableau de bord : l'icon de la carte peut être utilisé pour ouvrir le tracé actuel dans une app externe
(nécessite l'installation d'une app comme OSMDashboard)
Correction de bogue :
− Le label de l'app était cassé (introduit en v3.3.0)
Développeurs :
− La documentation pour l'API du tableau de bord se situe dans README_DEVELOPER.md
@@ -0,0 +1,11 @@
v3.3.2 : OpenTracks
Changements :
− Export : écrase désormais les fichiers
Correction de bogue :
− Supprime toujours la notification d'enregistrement
Développeurs :
− Sur l'API 26+, java.time est utilisé pour analyser et écrire les dates
− Réusinage de TrackRecordingService
@@ -0,0 +1,12 @@
v3.4.0 : OpenTracks
Changements :
− API tableau de bord : plusieurs tracés
− Mise à jour de l'aide
Correction de bogues :
− Correction du plantage lors de la recréation de fragment
− Lors d'une pause : empêche l'app de s'arrêter
Développeurs :
− Activation de tests via CI (Github Actions et TravisCI)
@@ -0,0 +1,14 @@
v3.5.0 : OpenTracks
Changements :
− Marqueur : sélection d'une image depuis la galerie
− Marqueur : partager une image
− Utilisation du nom de la trace lors du partage
− Suppression de l’élévation min et max (était imprécise)
Correction de bogue :
− Les graphiques utilisent les unités et quantités préférées
Développeurs :
− Base de données : suppression des colonnes inutilisées
− Base de données : Ajout d'index
@@ -0,0 +1,10 @@
v3.6.0 : OpenTracks
Changements :
− Les traces arrêtées peuvent être reprises
Correction de bogue :
− L'import de KMZ ne traitait pas les URL de photos correctement
Développeurs :
− Simplification du traitement des données
@@ -0,0 +1,7 @@
v4.14.0 : OpenTracks
Changements :
− Utilisation des données EGM2008 d'Androidx (au lieu d'empaqueter notre propre solution).
Développeurs :
− Cible Android15/ SDK35
@@ -0,0 +1,4 @@
v4.14.2 : OpenTracks
Correction de bogue :
− Android 15 : l’interface utilisateur ne débordera plus (bord-à-bord / edge-to-edge)
@@ -0,0 +1,10 @@
(versionName) : OpenTracks
Changements :
−
Correction de bogue(s) :
−
Développeurs :
−
@@ -0,0 +1,15 @@
v4.13.0: OpenTracks
Athruithe:
- Is féidir marcóirí a chruthú trí API Poiblí
Ligeann sé seo a chruthú Marcóirí ag aon suíomh agus tar éis taifeadadh.
Míbhuntáiste: Ní thaispeántar marcóirí sna léaráidí a thuilleadh.
TABHAIR FAOI DEARA: Tacaíonn OSMDashboard leis an API seo tar éis leagan: v4.1.0
Ceartúchán Bug:
- Ba cheart go mbeadh socrú gníomhaíochta réamhshocraithe ina anuas
- Ar ais saighead nach bhfuil ag obair i socruithe
- Léiríonn an lipéad le haghaidh siúil as cosán anois "siúlóid as cosán"
Forbróir:
- Úsáid Post in ionad Suíomh Android
@@ -0,0 +1,9 @@
v4.13.1: OpenTracks
Athruithe:
- Úsáideann féilire staitisticí comhiomlánaithe roghanna réigiúnacha (Android 14+)
Ceartúchán Bug:
- KML 2.3: bain úsáid as ainm réimse caighdeánaithe le haghaidh ráta croí
- Liosta rianta: níor nuashonraíodh stádas taifeadta i gceart
- Ceartúcháin Chomhéadain a bhaineann le hábhar3
@@ -0,0 +1,7 @@
v4.14.0: OpenTracks
Athruithe:
- Úsáid sonraí Androidx EGM2008 (in ionad ár réiteach saincheaptha a chuachadh).
Forbróir:
- Dírigh ar Android15/ SDK35
@@ -0,0 +1,7 @@
v4.14.1: OpenTracks
Athruithe:
- Is féidir brath díomhaoin a dhíchumasú
Ceartúchán Bug:
- Bhí Chomhéadain chun pictiúir a chur le marcóirí i bhfolach
@@ -0,0 +1,4 @@
v4.14.2: OpenTracks
Ceartúchán Bug:
- Android 15: Níl an Chomhéadain ag cur thar maoil níos mó (ó imeall go himeall)
@@ -0,0 +1,8 @@
v4.12.4: OpenTracks
Cambios:
- Anuncios: pódense omitir as unidades de medida
- Anuncios: engadida a potencia durante a volta no ciclismo
Arranxo:
- fallo ao eliminar marcadores na lista
@@ -0,0 +1,8 @@
v4.12.5: OpenTracks
Arranxos:
- detección correcta do movemento.
Estragouse na v4.9.0 ao engdir detección da pausa. Mira #1756.
Cambios:
- Soporte para Retroceso Predictivo
@@ -0,0 +1,9 @@
v4.13.1: OpenTracks
Cambios:
- O calendario con estatísticas acumuladas segue os axustes rexionais (Android 14+)
Arranxos:
- KML 2.3: usa o nome de campo estándar para frecuencia cardíaca
- Lista de rutas: non se actualizaba correctamente o estado da gravación
- Arranxos na IU relacionados con Material3
@@ -1,11 +1,14 @@
OpenTracks er en app for opptak av sportsaktivitet som respekterer ditt personvern.
OpenTracks er en app for opptak av sportsaktivitet som respekterer personvernet ditt.
Funksjoner:
* Sportsporing: Registrer dine sports- og utendørsaktiviteter
* Bilder og markører: Marker interessante steder under sporing
* Registrer dine sports- og utendørsaktiviteter
* Bilder og markører: Marker interessante steder underveis
* Total stigning og nedstigning: via barometersensor
* Høyde vist i EGM2008 (over havnivå); eksportert som WGS84
* Talemeldinger
* Støtter Blåtann LE-sensorer: puls, hastighet og distanse (sykling), kadens (sykling) og wattmåler (sykling)
* Eksport av data: Enten som KMZ (inkl. bilder), KML eller GPX
* Ingen internettilgang: Internett brukes ikke
* Mørkt og lyst tema, respekterer systeminnstillingene
En åpen kildekode-app uten reklame.
@@ -0,0 +1,9 @@
v4.13.1: OpenTracks
Veranderingen:
- Geaggregeerde statistieken calender 'gebruikt regionale voorkeuren (Android 14 +)
Bugfix:
- KML 2.3: gebruik gestandaardiseerde veldnaam voor hartslag
- Tracklijst: opnamestatus is niet correct bijgewerkt
- Material3 gerelateerde UI-fixes
@@ -0,0 +1,7 @@
v4.14.0: OpenTracks
Veranderingen:
- Gebruik de EGM2008-gegevens van Androidx (in plaats van onze aangepaste oplossing te bundelen).
Ontwikkelaar:
- Target Android15 / SDK35
@@ -0,0 +1,7 @@
v4.14.1: OpenTracks
Veranderingen:
- Detectie van inactiviteit kan worden uitgeschakeld
Opgeloste probleemoplossing:
- Gebruikersinterface voor het toevoegen van afbeeldingen aan markeringen is verborgen
@@ -0,0 +1,4 @@
v4.14.2: OpenTracks
Bugfix:
- Android 15: gebruikersinterface loopt niet meer over (rand tot rand)
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.8-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+5 -2
View File
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Vendored
+2
View File
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@@ -0,0 +1,148 @@
package de.dennisguse.opentracks.services.handlers;
import static org.junit.Assert.assertEquals;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.io.IOException;
import java.time.Instant;
import de.dennisguse.opentracks.data.models.TrackPoint;
/**
* Expectation is EGM2008 from <a href="https://geographiclib.sourceforge.io/">GeographicLib</a>] EGM2008 5minute undulation data.
*/
@RunWith(JUnit4.class)
public class AltitudeCorrectionManagerTest {
private static final double MAX_ERROR = 0.4;
private final Context context = ApplicationProvider.getApplicationContext();
@Test
public void data_Northpole() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(90);
trackPoint.setLongitude(0.1);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(-14.8980, trackPoint.getAltitude().toM(), 2 * MAX_ERROR); //TODO For some reason, the Northpole is more off.
}
@Test
public void data_Southpole() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(0);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(30.15, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_Southpole2() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(180);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(30.15, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_Southpole3() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(-180);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(30.15, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_0() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(0);
trackPoint.setLongitude(0);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(-17.2260, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_Berlin_Germany_() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(52.530644);
trackPoint.setLongitude(13.383068);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(-39.4865, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_Seattle_USA() {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(47.63153);
trackPoint.setLongitude(-122.30938);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(22.99, trackPoint.getAltitude().toM(), MAX_ERROR);
}
@Test
public void data_MaxUndulation() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-8.417);
trackPoint.setLongitude(147.367);
trackPoint.setAltitude(0);
// when
new AltitudeCorrectionManager().correctAltitude(context, trackPoint);
// then
assertEquals(-85.824, trackPoint.getAltitude().toM(), MAX_ERROR);
}
}
@@ -1,247 +0,0 @@
package de.dennisguse.opentracks.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import de.dennisguse.opentracks.data.models.TrackPoint;
@RunWith(JUnit4.class)
public class EGM2008UtilsTest {
private static final double MAX_BILINEAR_ERROR = 0.478;
private final Context context = ApplicationProvider.getApplicationContext();
@Test
public void fileVerification() throws IOException {
// given
int expectedLength = 18671444;
int expectedHeaderLength = 404;
String expectedHeader = """
P5
# Geoid file in PGM format for the GeographicLib::Geoid class
# Description WGS84 EGM2008, 5-minute grid
# URL http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
# DateTime 2009-08-29 18:45:00
# MaxBilinearError 0.478
# RMSBilinearError 0.012
# MaxCubicError 0.294
# RMSCubicError 0.005
# Offset -108
# Scale 0.003
# Origin 90N 0E
# AREA_OR_POINT Point
# Vertical_Datum WGS84
4320 2161
65535
""";
// when
try (InputStream inputStream = context.getResources().openRawResource(EGM2008Utils.EGM2008_5_DATA)) {
assertEquals(expectedLength, inputStream.available());
InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.US_ASCII);
char[] data = new char[expectedHeaderLength];
int length = reader.read(data);
// then
assertEquals(expectedHeaderLength, length);
assertEquals(expectedHeader, new String(data));
}
}
@Test
public void data_Northpole() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(90);
trackPoint.setLongitude(0.1);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(-14.8980, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_Southpole() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(0);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(30.15, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_Southpole2() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(180);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(30.15, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_Southpole3() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(-180);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(30.15, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_0() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(0);
trackPoint.setLongitude(0);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(-17.2260, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_Berlin_Germany_() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(52.530644);
trackPoint.setLongitude(13.383068);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(-39.4865, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_Berlin_Germany_Caching() throws IOException {
// given
TrackPoint trackPoint1 = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint1.setLatitude(52.530644);
trackPoint1.setLongitude(13.383068);
trackPoint1.setAltitude(0);
TrackPoint trackPoint2 = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint2.setLatitude(52.530000);
trackPoint2.setLongitude(13.380000);
trackPoint2.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint1.getLocation());
// then
assertNotEquals(altitude_egm2008.correctAltitude(trackPoint1.getLocation()).toM(), altitude_egm2008.correctAltitude(trackPoint2.getLocation()).toM(), 0.0001);
}
@Test
public void data_Seattle_USA() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(47.63153);
trackPoint.setLongitude(-122.30938);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(22.99, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void data_MaxUndulation() throws IOException {
// given
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(-8.417);
trackPoint.setLongitude(147.367);
trackPoint.setAltitude(0);
// when
EGM2008Utils.EGM2008Correction altitude_egm2008 = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
// then
assertEquals(-85.824, altitude_egm2008.correctAltitude(trackPoint.getLocation()).toM(), MAX_BILINEAR_ERROR);
}
@Test
public void getIndices() {
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
trackPoint.setLatitude(90);
trackPoint.setLongitude(0);
assertEquals(new EGM2008Utils.Indices(0, 0), EGM2008Utils.getIndices(trackPoint.getLocation()));
trackPoint.setLatitude(0);
trackPoint.setLongitude(0);
assertEquals(new EGM2008Utils.Indices(1080, 0), EGM2008Utils.getIndices(trackPoint.getLocation()));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(180);
assertEquals(new EGM2008Utils.Indices(2160, 4320 / 2), EGM2008Utils.getIndices(trackPoint.getLocation()));
trackPoint.setLatitude(-90);
trackPoint.setLongitude(-180);
assertEquals(new EGM2008Utils.Indices(2160, 2160), EGM2008Utils.getIndices(trackPoint.getLocation()));
}
@Test
public void getUndulationRaw_ok() throws IOException {
try (DataInputStream dataInputStream = new DataInputStream(context.getResources().openRawResource(EGM2008Utils.EGM2008_5_DATA))) {
assertEquals(40966, EGM2008Utils.getUndulationRaw(dataInputStream, new EGM2008Utils.Indices(0, 0)));
assertEquals(41742, EGM2008Utils.getUndulationRaw(dataInputStream, new EGM2008Utils.Indices(1081, 0)));
assertEquals(25950, EGM2008Utils.getUndulationRaw(dataInputStream, new EGM2008Utils.Indices(2160, 4319)));
}
}
@Test(expected = EOFException.class)
public void getUndulationRaw_error() throws IOException {
try (DataInputStream dataInputStream = new DataInputStream(context.getResources().openRawResource(EGM2008Utils.EGM2008_5_DATA))) {
assertEquals(0, EGM2008Utils.getUndulationRaw(dataInputStream, new EGM2008Utils.Indices(2161, 4320)), 0.01);
}
}
}
@@ -286,6 +286,11 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
return true;
}
if (item.getItemId() == R.id.track_list_about) {
startActivity(IntentUtils.newIntent(this, AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@@ -33,6 +33,7 @@ import java.util.Optional;
* Time is created using the {@link de.dennisguse.opentracks.services.handlers.MonotonicClock}, because system time jump backwards.
* GPS time is ignored as for non-GPS events, we could not create timestamps.
*/
//TODO Should be a record (with final properties)
public class TrackPoint {
private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1);
@@ -170,8 +170,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
if (trackPoint.hasLocation() && lastStoredTrackPointWithLocation == null) {
insertTrackPoint(trackPoint, true);
handler.removeCallbacks(ON_IDLE);
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
scheduleNewIdleTimeout();
return true;
}
@@ -199,16 +198,14 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(trackPoint, true);
handler.removeCallbacks(ON_IDLE);
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
scheduleNewIdleTimeout();
return true;
}
if (distanceToLastStoredTrackPoint.greaterOrEqualThan(recordingDistanceInterval)) {
insertTrackPoint(trackPoint, false);
handler.removeCallbacks(ON_IDLE);
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
scheduleNewIdleTimeout();
return true;
}
@@ -218,6 +215,15 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
return false;
}
private void scheduleNewIdleTimeout() {
if (idleDuration.isZero()) {
Log.d(TAG, "idle functionality is disabled");
return;
}
handler.removeCallbacks(ON_IDLE);
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
}
TrackStatistics getTrackStatistics() {
return trackStatisticsUpdater == null ? null : trackStatisticsUpdater.getTrackStatistics();
}
@@ -2,15 +2,15 @@ package de.dennisguse.opentracks.services.handlers;
import android.content.Context;
import android.location.Location;
import android.location.altitude.AltitudeConverter;
import android.os.Build;
import android.util.Log;
import androidx.core.location.LocationCompat;
import androidx.core.location.altitude.AltitudeConverterCompat;
import java.io.IOException;
import de.dennisguse.opentracks.data.models.Altitude;
import de.dennisguse.opentracks.data.models.TrackPoint;
import de.dennisguse.opentracks.util.EGM2008Utils;
/**
* More infos regarding Android 34's <a href="https://issuetracker.google.com/issues/195660815#comment1">AltitudeConverter</a>.
@@ -19,52 +19,28 @@ public class AltitudeCorrectionManager {
private static final String TAG = AltitudeCorrectionManager.class.getSimpleName();
private AltitudeConverter altitudeConverter;
private final EGM2008Internal altitudeConverterFallback;
public AltitudeCorrectionManager() {
this.altitudeConverterFallback = new EGM2008Internal();
this.altitudeConverter = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ? new AltitudeConverter() : null;
}
public void correctAltitude(Context context, TrackPoint trackPoint) {
if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && altitudeConverter != null) {
// TODO The following is doing IO and should not be done in main thread.
// AltitudeConverterCompat uses internally a RoomDatabase that cannot be access from main thread and thus fails on version <= 34.
Thread t = new Thread(() -> {
try {
Location loc = trackPoint.getLocation();
altitudeConverter.addMslAltitudeToLocation(context, loc);
trackPoint.setAltitude(Altitude.EGM2008.of(loc.getMslAltitudeMeters()));
return;
AltitudeConverterCompat.addMslAltitudeToLocation(context, loc);
trackPoint.setAltitude(Altitude.EGM2008.of(LocationCompat.getMslAltitudeMeters(loc)));
} catch (IOException e) {
Log.w(TAG, "Android's AltitudeConverter crashed; falling back to internal.");
altitudeConverter = null;
// Should we fallback
Log.w(TAG, "Android's AltitudeConverterCompat failed with " + e.getMessage());
}
}
});
t.start();
altitudeConverterFallback.correctAltitude(context, trackPoint);
}
private static class EGM2008Internal {
private static final String TAG = EGM2008Internal.class.getSimpleName();
private EGM2008Utils.EGM2008Correction egm2008Correction;
public void correctAltitude(Context context, TrackPoint trackPoint) {
if (egm2008Correction == null || !egm2008Correction.canCorrect(trackPoint.getLocation())) {
try {
egm2008Correction = EGM2008Utils.createCorrection(context, trackPoint.getLocation());
} catch (IOException e) {
Log.e(TAG, "Could not load altitude correction for " + trackPoint, e);
return;
}
}
trackPoint.setAltitude(egm2008Correction.correctAltitude(trackPoint.getLocation()));
try {
t.join(); // wait for thread to finish
} catch (InterruptedException e) {
Log.w(TAG, "Android's AltitudeConverterCompat failed with " + e.getMessage());
}
}
}
@@ -0,0 +1,107 @@
package de.dennisguse.opentracks.settings;
import android.app.LocaleConfig;
import android.content.Context;
import android.os.Build;
import android.os.LocaleList;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.os.LocaleListCompat;
import androidx.preference.ListPreference;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Locale;
import de.dennisguse.opentracks.R;
public class LocalePreference extends ListPreference {
public LocalePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
public LocalePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public LocalePreference(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public LocalePreference(@NonNull Context context) {
super(context);
init(context);
}
private void init(Context context) {
setPersistent(false);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
setEnabled(false);
return;
}
LocaleItem systemDefaultLocale = new LocaleItem("", context.getString(R.string.settings_locale_system_default));
LocaleItem currentLocale = new LocaleItem(Locale.getDefault().toLanguageTag(), Locale.getDefault().getDisplayName());
// All available options
LocaleList supportedLocales = LocaleConfig.fromContextIgnoringOverride(context).getSupportedLocales();
ArrayList<LocaleItem> localeItemsSorting = new ArrayList<>();
for (int i = 0; i < supportedLocales.size(); i++) {
Locale current = supportedLocales.get(i);
localeItemsSorting.add(new LocaleItem(current.toLanguageTag(), current.getDisplayName()));
}
localeItemsSorting.removeIf(current -> current.languageTag.equals(currentLocale.languageTag));
localeItemsSorting.sort(Comparator.comparing(o -> o.displayName));
ArrayList<LocaleItem> localeItemList = new ArrayList<>();
localeItemList.add(systemDefaultLocale);
localeItemList.add(currentLocale);
localeItemList.addAll(localeItemsSorting);
ArrayList<String> entries = new ArrayList<>();
ArrayList<String> entryValues = new ArrayList<>();
for (LocaleItem current : localeItemList) {
entries.add(current.displayName);
entryValues.add(current.languageTag);
}
setEntries(entries.toArray(new String[]{}));
setEntryValues(entryValues.toArray(new String[]{}));
if (AppCompatDelegate.getApplicationLocales().equals(LocaleListCompat.getEmptyLocaleList())) {
setValue(systemDefaultLocale.languageTag);
} else {
setValue(currentLocale.languageTag);
}
}
@Override
public void setOnPreferenceChangeListener(@Nullable OnPreferenceChangeListener onPreferenceChangeListener) {
super.setOnPreferenceChangeListener(onPreferenceChangeListener);
}
@Override
public boolean callChangeListener(Object newValue) {
LocaleListCompat newLocale = LocaleListCompat.getEmptyLocaleList();
if (!newValue.equals("")) {
newLocale = LocaleListCompat.forLanguageTags((String) newValue);
}
AppCompatDelegate.setApplicationLocales(newLocale);
return super.callChangeListener(newValue);
}
record LocaleItem(
String languageTag,
String displayName
) {
}
}
@@ -52,7 +52,6 @@ import de.dennisguse.opentracks.sensors.SensorType;
import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
/**
* Utilities to access preferences stored in {@link SharedPreferences}.
@@ -344,17 +343,17 @@ public class PreferencesUtils {
}
static String[] getVoiceAnnouncementFrequencyEntries() {
String[] values = resources.getStringArray(R.array.voice_announcement_frequency_values);
String[] options = new String[values.length];
for (int i = 0; i < values.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) {
options[i] = resources.getString(R.string.value_off);
String[] entryValues = resources.getStringArray(R.array.voice_announcement_frequency_values);
String[] entries = new String[entryValues.length];
for (int i = 0; i < entryValues.length; i++) {
if (resources.getString(R.string.announcement_off).equals(entryValues[i])) {
entries[i] = resources.getString(R.string.value_off);
} else {
int value = Integer.parseInt(values[i]);
options[i] = resources.getString(R.string.value_integer_minute, Duration.ofSeconds(value).toMinutes());
int value = Integer.parseInt(entryValues[i]);
entries[i] = resources.getString(R.string.value_integer_minute, Duration.ofSeconds(value).toMinutes());
}
}
return options;
return entries;
}
/**
@@ -370,23 +369,23 @@ public class PreferencesUtils {
* @return Result depends on getUnitSystem
*/
static String[] getVoiceAnnouncementDistanceEntries() {
String[] values = resources.getStringArray(R.array.voice_announcement_distance_values);
String[] options = new String[values.length];
String[] entryValues = resources.getStringArray(R.array.voice_announcement_distance_values);
String[] entries = new String[entryValues.length];
UnitSystem unitSystem = getUnitSystem();
DistanceFormatter formatter = DistanceFormatter.Builder()
.setDecimalCount(0)
.setUnit(unitSystem)
.build(resources);
for (int i = 0; i < values.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) {
options[i] = resources.getString(R.string.value_off);
for (int i = 0; i < entryValues.length; i++) {
if (resources.getString(R.string.announcement_off).equals(entryValues[i])) {
entries[i] = resources.getString(R.string.value_off);
} else {
Distance distance = Distance.one(unitSystem).multipliedBy(Double.parseDouble(values[i]));
options[i] = formatter.formatDistance(distance);
Distance distance = Distance.one(unitSystem).multipliedBy(Double.parseDouble(entryValues[i]));
entries[i] = formatter.formatDistance(distance);
}
}
return options;
return entries;
}
public static float getVoiceSpeedRate() {
@@ -642,7 +641,9 @@ public class PreferencesUtils {
for (int i = 0; i < entryValues.length; i++) {
int value = Integer.parseInt(entryValues[i]);
if (value == idleDurationDefault) {
if (resources.getString(R.string.announcement_off).equals(entryValues[i])) {
entries[i] = resources.getString(R.string.value_off);
} else if (value == idleDurationDefault) {
entries[i] = resources.getString(R.string.value_int_seconds, value);
} else {
entries[i] = value < 60 ? resources.getString(R.string.value_integer_second, value) : resources.getString(R.string.value_integer_minute, value / 60);
@@ -858,14 +859,6 @@ public class PreferencesUtils {
sharedPreferences.edit().clear().commit();
}
public static void setShowOnMapFormat(final String showOnMapFormat) {
setString(R.string.show_on_map_format_key, showOnMapFormat);
}
public static String getShowOnMapFormat() {
return getString(R.string.show_on_map_format_key, IntentDashboardUtils.PREFERENCE_ID_ASK);
}
public static int getTotalRowsDeleted() {
return getInt(R.string.total_rows_deleted_key, 0);
}
@@ -7,15 +7,10 @@ import android.os.Bundle;
import android.widget.Toast;
import androidx.fragment.app.DialogFragment;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import java.util.Map;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {
@@ -41,8 +36,6 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {
Preference dynamicColors = findPreference(getString(R.string.settings_ui_dynamic_colors_key));
dynamicColors.setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU);
setShowOnMapFormatOptions();
}
@Override
@@ -79,14 +72,4 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {
super.onDisplayPreferenceDialog(preference);
}
private void setShowOnMapFormatOptions() {
Map<String, String> options = TrackFileFormat.toPreferenceIdLabelMap(getResources(), IntentDashboardUtils.SHOW_ON_MAP_TRACK_FILE_FORMATS);
options.put(IntentDashboardUtils.PREFERENCE_ID_DASHBOARD, getString(R.string.show_on_dashboard));
options.put(IntentDashboardUtils.PREFERENCE_ID_ASK, getString(R.string.show_on_map_format_ask));
ListPreference listPreference = findPreference(getString(R.string.show_on_map_format_key));
listPreference.setEntries(options.values().toArray(new String[0]));
listPreference.setEntryValues(options.keySet().toArray(new String[0]));
}
}
@@ -164,6 +164,8 @@ public class MarkerEditActivity extends AbstractActivity {
} else {
loadMarkerData(markerId);
}
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
}
private LiveData<Marker> createNewMarker() {
@@ -1,156 +0,0 @@
package de.dennisguse.opentracks.util;
import android.content.Context;
import android.location.Location;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import java.io.DataInputStream;
import java.io.IOException;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.models.Altitude;
/**
* Converts WGS84 altitude to EGM2008 (should be close to height above sea level).
* <p>
* Uses <a href="https://geographiclib.sourceforge.io/">GeographicLib</a>] EGM2008 5minute undulation data.
* <a href="https://geographiclib.sourceforge.io/html/geoid.html">...</a>
* <p>
* File starts at 90N, 0E (North pole) and is encoded in parallel bands as unsigned shorts.
*/
public class EGM2008Utils {
static final int EGM2008_5_DATA = R.raw.egm2008_5;
private static final int HEADER_LENGTH = 404;
private static final int RESOLUTION_IN_MINUTES = 60 / 5;
private static final int LATITUDE_CORRECTION = 360 * RESOLUTION_IN_MINUTES;
private EGM2008Utils() {
}
public static EGM2008Correction createCorrection(Context context, Location location) throws IOException {
Indices indices = getIndices(location);
try (DataInputStream dataInputStream = new DataInputStream(context.getResources().openRawResource(EGM2008_5_DATA))) {
return new EGM2008Correction(indices, dataInputStream);
}
}
@VisibleForTesting
static int getUndulationRaw(DataInputStream dataInputStream, Indices indices) throws IOException {
dataInputStream.reset();
int absoluteIndex = indices.getAbsoluteIndex();
return getUndulationRaw(dataInputStream, absoluteIndex);
}
private static int getUndulationRaw(DataInputStream dataInputStream, int undulationIndex) throws IOException {
dataInputStream.reset();
int index = HEADER_LENGTH + undulationIndex * 2; //byte size is 2
long ignored = dataInputStream.skip(index);
return dataInputStream.readUnsignedShort();
}
@VisibleForTesting
static Indices getIndices(Location location) {
double latitude = -location.getLatitude() + 90;
int latitudeIndex = (int) (latitude * RESOLUTION_IN_MINUTES);
double longitude;
if (location.getLongitude() >= 0) {
longitude = location.getLongitude();
} else {
longitude = 360 + location.getLongitude();
}
int longitudeIndex = (int) (longitude * RESOLUTION_IN_MINUTES);
if (longitudeIndex >= 360 * RESOLUTION_IN_MINUTES) {
longitudeIndex = 0;
}
return new Indices(latitudeIndex, longitudeIndex);
}
public static class EGM2008Correction {
protected final Indices indices;
protected final int v00;
protected final int v10;
protected final int v01;
protected final int v11;
private EGM2008Correction(Indices indices, DataInputStream dataInputStream) throws IOException {
this.indices = indices;
v00 = getUndulationRaw(dataInputStream, indices);
if (!isSouthPole()) {
v10 = getUndulationRaw(dataInputStream, indices.offset(0, 1));
v01 = getUndulationRaw(dataInputStream, indices.offset(1, 0));
v11 = getUndulationRaw(dataInputStream, indices.offset(1, 1));
} else {
v10 = 0;
v01 = 0;
v11 = 0;
}
}
public boolean canCorrect(@NonNull Location location) {
return indices.getAbsoluteIndex() == getIndices(location).getAbsoluteIndex();
}
public Altitude.EGM2008 correctAltitude(@NonNull Location location) {
if (!canCorrect(location))
throw new RuntimeException("Undulation data not loaded for this location.");
if (!location.hasAltitude())
throw new RuntimeException("Location has no altitude");
double undulationRaw;
if (isSouthPole()) {
// No bilinear interpolation on South Pole (not worth the time)
undulationRaw = v00;
} else {
double fLongitude = location.getLongitude() * RESOLUTION_IN_MINUTES -
(int) (location.getLongitude() * RESOLUTION_IN_MINUTES);
double fLatitude = (-location.getLatitude() + 90) * RESOLUTION_IN_MINUTES
- (int) ((-location.getLatitude() + 90) * RESOLUTION_IN_MINUTES);
// Bilinear interpolation (optimized; taken from GeopgrahicLib/Geoid.cpp)
double
a = (1 - fLongitude) * v00 + fLongitude * v01,
b = (1 - fLongitude) * v10 + fLongitude * v11;
undulationRaw = (1 - fLatitude) * a + fLatitude * b;
}
// Bilinear interpolation (not optimized)
//undulationRaw = v00 * (1 - fLongitude) * (1 - fLatitude)
// + v10 * fLongitude * (1 - fLatitude)
// + v01 * (1 - fLongitude) * fLatitude
// + v11 * fLongitude * fLatitude;
double h = 0.003 * undulationRaw - 108;
return Altitude.EGM2008.of(location.getAltitude() - h);
}
private boolean isSouthPole() {
return indices.latitudeIndex == 2160;
}
}
@VisibleForTesting
record Indices(int latitudeIndex, int longitudeIndex) {
Indices offset(int latitudeOffset, int longitudeOffset) {
return new Indices(latitudeIndex + latitudeOffset, longitudeIndex + longitudeOffset);
}
int getAbsoluteIndex() {
return latitudeIndex * LATITUDE_CORRECTION + longitudeIndex;
}
}
}
@@ -6,25 +6,18 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.util.Pair;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.ShareContentProvider;
import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.data.tables.MarkerColumns;
import de.dennisguse.opentracks.data.tables.TrackPointsColumns;
import de.dennisguse.opentracks.data.tables.TracksColumns;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.settings.PreferencesUtils;
/**
@@ -39,14 +32,6 @@ public class IntentDashboardUtils {
private static final String ACTION_DASHBOARD_PAYLOAD = ACTION_DASHBOARD + ".Payload";
public static final TrackFileFormat[] SHOW_ON_MAP_TRACK_FILE_FORMATS = new TrackFileFormat[] {
TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES,
TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA,
TrackFileFormat.GPX};
public static final String PREFERENCE_ID_DASHBOARD = ACTION_DASHBOARD;
public static final String PREFERENCE_ID_ASK = "ASK";
/**
* Assume "v1" if not present.
*/
@@ -73,59 +58,13 @@ public class IntentDashboardUtils {
/**
* Send intent to show tracks on a map (needs an another app) as resource URIs.
* Shows an AlertDialog with different format option if none is defined as preference.
*
* @param context the context
* @param isRecording are we currently recording?
* @param trackIds the track ids
*/
public static void showTrackOnMap(Context context, boolean isRecording, Track.Id... trackIds) {
Map<String, String> options = TrackFileFormat.toPreferenceIdLabelMap(context.getResources(), IntentDashboardUtils.SHOW_ON_MAP_TRACK_FILE_FORMATS);
options.put(IntentDashboardUtils.PREFERENCE_ID_DASHBOARD, context.getString(R.string.show_on_dashboard));
final String[] optionLabels = options.values().toArray(new String[0]);
final String[] optionValues = options.keySet().toArray(new String[0]);
final AtomicInteger checkedItem = new AtomicInteger(NONE_SELECTED);
String preferenceValue = PreferencesUtils.getShowOnMapFormat();
for (int i = 0; i < optionValues.length; i++) {
if (optionValues[i].equals(preferenceValue)) {
checkedItem.set(i);
}
}
if (checkedItem.get() == NONE_SELECTED) {
checkedItem.set(0); // set first option as default
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.select_show_on_map_behavior);
builder.setSingleChoiceItems(optionLabels, checkedItem.get(), (dialog, which) -> checkedItem.set(which));
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> onFormatSelected(context, isRecording, optionValues[checkedItem.get()], trackIds, false));
builder.setNeutralButton(R.string.always, ((dialog, which) -> onFormatSelected(context, isRecording, optionValues[checkedItem.get()], trackIds, true)));
builder.setNegativeButton(android.R.string.cancel, null);
AlertDialog dialog = builder.create();
dialog.show();
} else {
onFormatSelected(context, isRecording, preferenceValue, trackIds, true);
}
}
/**
* A format was selected, remember if <code>always</code> is true and start the necessary action
*
* @param context the context
* @param isRecording are we currently recording?
* @param selectedValue the chosen format
* @param trackIds the track ids
* @param always set the selectedValue as default preference
*/
private static void onFormatSelected(final Context context, final boolean isRecording, final String selectedValue, final Track.Id[] trackIds, final boolean always) {
if (always) {
PreferencesUtils.setShowOnMapFormat(selectedValue);
}
TrackFileFormat trackFileFormat = TrackFileFormat.valueOfPreferenceId(selectedValue);
if (trackFileFormat != null) {
showTrackOnMapWithFileFormat(context, trackFileFormat, Set.of(trackIds));
} else {
startDashboard(context, isRecording, null, null, trackIds);
}
startDashboard(context, isRecording, null, null, trackIds);
}
/**
@@ -183,28 +122,4 @@ public class IntentDashboardUtils {
Toast.makeText(context, R.string.show_on_dashboard_not_installed, Toast.LENGTH_SHORT).show();
}
}
/**
* Send intent to show tracks on a map (needs an another app) to support specific trackFileFormat.
*
* @param context the context
* @param trackFileFormat the track file format
* @param trackIds the track ids
*/
private static void showTrackOnMapWithFileFormat(Context context, TrackFileFormat trackFileFormat, Set<Track.Id> trackIds) {
if (trackIds.isEmpty()) {
return;
}
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Pair<Uri, String> uriAndMime = ShareContentProvider.createURI(trackIds, "SharingTrack", trackFileFormat);
intent.setDataAndType(uriAndMime.first, uriAndMime.second);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(intent, context.getString(R.string.open_track_as_trackfileformat, trackFileFormat.getExtension())));
}
}
@@ -1,42 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="188dp"
android:height="78dp"
android:viewportWidth="188"
android:viewportHeight="78">
<path
android:fillAlpha="0.70196078"
android:fillColor="#cccccc"
android:pathData="m37.804,0.731 l-37,38 37,39L37.804,49.731L90.804,49.731L106.804,28.731l-69,0z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.70196078"
android:fillColor="#cccccc"
android:pathData="M136.804,28.731L117.804,28.731L101.804,49.731L120.804,49.731Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.70196078"
android:fillColor="#cccccc"
android:pathData="M164.804,28.731L147.804,28.731L131.804,49.731L148.804,49.731Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.70196078"
android:fillColor="#cccccc"
android:pathData="M187.804,28.731L173.804,28.731L158.804,49.731L171.804,49.731Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
</vector>
-42
View File
@@ -1,42 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="78dp"
android:height="188dp"
android:viewportWidth="78"
android:viewportHeight="188">
<path
android:fillAlpha="0.7019608"
android:fillColor="#cccccc"
android:pathData="m1,150 l38,37 39,-37H50V97L29,81v69z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.7019608"
android:fillColor="#cccccc"
android:pathData="M29,51V70L50,86V67Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.7019608"
android:fillColor="#cccccc"
android:pathData="M29,23V40L50,56V39Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
<path
android:fillAlpha="0.7019608"
android:fillColor="#cccccc"
android:pathData="M29,0V14L50,29V16Z"
android:strokeWidth="1"
android:strokeAlpha="1"
android:strokeColor="#00000000"
android:strokeLineCap="butt"
android:strokeLineJoin="miter" />
</vector>
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/track_list_toolbar"
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/export_activity_toolbar"
+2 -1
View File
@@ -5,7 +5,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/show_error_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/export_activity_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/import_activity_toolbar"
+1 -1
View File
@@ -49,7 +49,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
style="@style/TextAppearance.OpenTracks.PrimaryHeader"
android:text="@string/stats_altitude" />
android:text="@string/stats_gain_loss" />
</LinearLayout>
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/marker_detail_toolbar"
+7 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/marker_edit_toolbar"
@@ -34,6 +35,7 @@ limitations under the License.
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginBottom="102dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ScrollView style="@style/ScrollView.WithBottomButtons">
@@ -150,4 +152,8 @@ limitations under the License.
</LinearLayout>
</LinearLayout>
<include
android:id="@+id/bottom_app_bar_layout"
layout="@layout/bottomappbar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.search.SearchBar
android:id="@+id/marker_list_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/top_app_bar"
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:orientation="vertical"
android:fitsSystemWindows="true">
<include
android:id="@+id/fields"
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.search.SearchBar
android:id="@+id/track_list_toolbar"
+2 -1
View File
@@ -21,7 +21,8 @@ limitations under the License.
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="70dp">
android:paddingBottom="90dp"
android:fitsSystemWindows="true">
<com.google.android.material.tabs.TabLayout
android:id="@+id/track_detail_activity_tablayout"
+2 -1
View File
@@ -9,7 +9,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="90dp">
android:paddingBottom="90dp"
android:fitsSystemWindows="true">
<com.google.android.material.tabs.TabLayout
android:id="@+id/track_detail_activity_tablayout"
+2 -1
View File
@@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:orientation="vertical"
android:fitsSystemWindows="true">
<include
android:id="@+id/loading_layout"
+5
View File
@@ -30,4 +30,9 @@ limitations under the License.
android:icon="@drawable/ic_help_24dp"
android:title="@string/menu_help" />
<item
android:id="@+id/track_list_about"
android:icon="@drawable/ic_baseline_info_24"
android:title="@string/about_preference_title" />
</menu>
File diff suppressed because one or more lines are too long
-1
View File
@@ -450,7 +450,6 @@
<string name="gps_recording_without_signal">OpenTracks está grabando sin datos GPS.</string>
<string name="menu_add_custom_layout">Nuevo diseño</string>
<string name="permission_bluetooth_failed_rejected">Es necesario conceder manualmente a OpenTracks el acceso a los Dispositivos Cercanos en la configuración del sistema.</string>
<string name="settings_open_tracks_summary">Todo sobre el proyecto OpenTracks</string>
<string name="settings_activity_defaults_category">Prederminados de la actividad</string>
<string name="settings_reset_summary">Restablecer a valores predeterminados</string>
<string name="custom_layout_list_title">Diseños</string>
+1 -4
View File
@@ -266,7 +266,6 @@
<string name="sensor_could_not_scan">Ùn si pò micca ricercà l’apparechji Bluetooth (sbagliu %1$i).</string>
<string name="bluetooth_disabled">Ci vole à attivà u Bluetooth.</string>
<string name="bluetooth_sensor_summary">%1$s (%2$s)</string>
<string name="settings_open_tracks_summary">Apprupositu di u prughjettu OpenTracks</string>
<string name="settings_defaults_title">Unità è attività predefinite</string>
<string name="settings_ui_title">Interfaccia di l’utilizatore</string>
<string name="settings_ui_summary">Aspettu, accunciamentu di l’arregistramentu, tema</string>
@@ -277,7 +276,7 @@
<string name="settings_import_export_title">Impurtazione è espurtazione</string>
<string name="settings_reset_summary">Reinizià i parametri à i valori predefiniti</string>
<string name="settings_export_filename_title">Furmatu di u nome di schedariu</string>
<string name="settings_chart_by_distance">Secondu à a distenza</string>
<string name="settings_chart_by_distance">Secondu à a distanza</string>
<string name="settings_chart_by_time">Secondu à a durata</string>
<string name="settings_ui_dynamic_colors_summary">Impiegà i culori dinamichi definiti da l’utilizatore (solu Android 12è più ; richiede un rilanciu manuale)</string>
<string name="settings_recording_customize_layout_title">Persunalizà u vostru accunciamentu d’arregistramentu</string>
@@ -417,8 +416,6 @@
<string name="no_compatible_camera_installed">Nisuna appiecazione cumpatibile per l’apparechju-fotò ùn hè installata</string>
<string name="error_crash_title">%1$s s‘hè lampatu</string>
<string name="report_bug">Signalà un prublema</string>
<string name="select_show_on_map_behavior">Selezziunà u cumpurtamentu « Affissà nant’à a carta »</string>
<string name="show_on_map_format_ask">Dumandà</string>
<string name="show_on_dashboard">API di tavula di cundutta d’OpenTracks</string>
<string name="show_on_dashboard_not_installed">Nisuna appiecazione accettendu l’API di tavula di cundutta d’OpenTracks ùn hè installata.</string>
<string name="power">Putenza</string>
+1 -3
View File
@@ -485,7 +485,6 @@ limitations under the License.
<string name="settings_sensors_title">Senzory</string>
<string name="settings_gps_summary">Časový interval, Interval vzdálenosti, Maximální vzdálenost, Přesnost</string>
<string name="settings_ui_summary">Vzhled, Rozložení záznamu, Téma</string>
<string name="settings_open_tracks_summary">Vše o projektu OpenTracks</string>
<string name="settings_defaults_title">Výchozí jednotky a aktivity</string>
<string name="settings_ui_title">Uživatelské rozhraní</string>
<string name="settings_gps_sensor">GPS</string>
@@ -543,12 +542,10 @@ limitations under the License.
<string name="value_float_knots">%1$.1f uzlů</string>
<string name="track_delete_number_of_tracks">%1$d stop</string>
<string name="image_discard">Vyřadit</string>
<string name="show_on_map_format_ask">Zeptat se</string>
<string name="settings_stats_units_nautical">Námořní (NM, ft)</string>
<string name="report_bug">Nahlásit chybu</string>
<string name="settings_announcements_lap_heart_rate">Srdeční tep kola</string>
<string name="introduction_osm_dashboard">OpenTracks sám o sobě mapu neposkytuje. Pro zobrazení záznamů na mapě si nainstalujte OSMDashboard.</string>
<string name="select_show_on_map_behavior">Zvolte chování \"zobrazit na mapě\"</string>
<string name="always">Vždy</string>
<string name="help_data_google_play_services_content">Ne</string>
<string name="description_speed_nautical">Rychlost (uzly)</string>
@@ -609,4 +606,5 @@ limitations under the License.
<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>
<string name="create_marker_error">Nepodařilo se vytvořit značku. Zkuste to znovu.</string>
<string name="empty">" "</string>
</resources>
-1
View File
@@ -443,7 +443,6 @@ limitations under the License.
<string name="generic_today">I dag</string>
<string name="generic_yesterday">I går</string>
<string name="menu_filter">Filter</string>
<string name="settings_open_tracks_summary">Alt om OpenTracks-projektet</string>
<string name="settings_defaults_title">Standardenheder og aktivitet</string>
<string name="settings_defaults_summary">Foretrukne enheder, standardaktivitet, standardspornavn</string>
<string name="settings_gps_summary">Tidsinterval, distanceinterval, maksimal afstand, nøjagtighed</string>
+32 -35
View File
@@ -15,11 +15,11 @@ See the License for the specific language governing permissions and
limitations under the License.
--><resources>
<string name="about_preference_title">Über OpenTracks</string>
<string name="about_description"><i>OpenTracks</i> ist eine Sport-Tracking-Anwendung, die Ihre Privatsphäre respektiert.</string>
<string name="about_description"><i>OpenTracks</i> ist eine Sport-Tracking-Anwendung, die deine Privatsphäre respektiert.</string>
<string name="about_url">Projekt-Website: <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 ist ein Fork von <a href="https://code.google.com/archive/p/mytracks/"><i>Google\'s MyTracks</i></a> (2016 eingestellt).</string>
<string name="about_version_name">Versionsname: %1$s</string>
<string name="about_version_code">Versionscode: %1$d</string>
<string name="about_history">OpenTracks ist ein Fork von <a href="https://code.google.com/archive/p/mytracks/"><i>Google MyTracks</i></a> (das 2016 eingestellt wurde).</string>
<string name="about_libraries">Bibliotheken</string>
<!-- Help -->
<string name="help_feature_title">OpenTracks hat die folgenden Funktionen:</string>
@@ -30,38 +30,37 @@ limitations under the License.
\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>.
\n zur Verfügung. Eigentlich ist OSMDashboard eine separate App, die nur (vorübergehend) auf die Daten der anzuzeigenden Strecke(n) zugreifen kann.
\n b) Über eine normale Kartenanwendung (z.B. <a href="http://osmand.net/">OsmAnd</a> und <a href="https://maps.me/">MAPS.ME</a>). Diese Anwendungen müssen das KMZ-Dateiformat unterstützen (nur Orte und Zeitstempel). In der Tat muss eine App <i>ACTION_VIEW</i> mit MIME <i>application/vnd.google-earth.kmz</i> unterstützen. </string>
<string name="help_storage_pictures_title">Wie speichert OpenTracks Bilder, die als Markierungen aufgenommen wurden?</string>
<string name="help_track_map_content"> \u0020Verwende das kleine Kartensymbol.
\na) (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> zur Verfügung. Tatsächlich ist OSMDashboard eine separate App, die nur (vorübergehend) auf die Daten der anzuzeigenden Strecke(n) zugreifen kann.
\nb) Über eine normale Kartenanwendung (z.B. <a href="http://osmand.net/">OsmAnd</a> und <a href="https://maps.me/">MAPS.ME</a>). Diese Anwendungen müssen das KMZ-Dateiformat unterstützen (nur Orte und Zeitstempel). Genauer ausgedrückt muss eine App <i>ACTION_VIEW</i> mit MIME <i>application/vnd.google-earth.kmz</i> unterstützen. \u0020</string>
<string name="help_storage_pictures_title">Wie speichert OpenTracks Fotos, die als Markierungen aufgenommen wurden?</string>
<string name="help_storage_pictures_content">Diese werden App-intern gespeichert (d.h. nur innerhalb von OpenTracks zugänglich).</string>
<string name="help_track_export_title">Wie kann ich aufgezeichnete Tracks exportieren/teilen?</string>
<string name="help_track_export_content"> Tracks können aus den Einstellungen als KMZ, KML oder GPX exportiert werden. KMZ/KML alle Daten; GPX nur Standorte. Tracks, die über das Symbol <i>Teilen Icon</i> freigegeben werden, werden als KMZ freigegeben. </string>
<string name="help_track_export_content"> Tracks können aus den Einstellungen als KMZ, KML oder GPX exportiert werden. KMZ/KML alle Daten; GPX nur Standorte. Tracks, die über das Symbol <i>Teilen</i> freigegeben werden, werden als KMZ freigegeben. </string>
<string name="help_data_google_play_services_title">Benötigt/benutzt OpenTracks den Google Play Service?</string>
<string name="help_recording_title">Wie zeichnet OpenTracks Daten auf?</string>
<string name="help_recording_content">
OpenTracks verwendet den GPS-Sensor des Geräts, um den Standort kontinuierlich aufzuzeichnen.
Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), kann OpenTracks nichts dagegen unternehmen.</string>
<string name="help_data_storage_title">Wie speichert OpenTracks Sensordaten?</string>
<string name="help_data_storage_content"> Sensordaten werden pro aufgezeichneter Stelle gespeichert. Bezogen auf einen Herzfrequenzsensor bedeutet dies, dass nur <i>eine</i>Herzfrequenzmessung pro Ort gespeichert wird. Wenn Du still stehst oder du dich in geschlossenen Räumen aufhälst, werden keine Sensordaten aufgezeichnet (aber angezeigt) </string>
<string name="help_data_storage_content"> Sensordaten werden pro aufgezeichnetem Standort gespeichert. Bezogen auf einen Herzfrequenzsensor bedeutet dies, dass nur <i>eine</i>Herzfrequenzmessung pro Standort gespeichert wird. Wenn Du still stehst oder dich in geschlossenen Räumen aufhältst, werden keine Sensordaten aufgezeichnet (aber angezeigt). </string>
<string name="help_gps_troubleshooting_title">OpenTracks zeichnet keine Standorte auf?</string>
<string name="help_gps_troubleshooting_content"> Was Du tun kannst:
\n a) prüfen, ob GPS aktiviert ist,
\n b) den GPS-Empfang verbessern (z.B. ins Freie gehen),
\n c) mit der <a href="https://f-droid.org/en/packages/com.android.gpstest.osmdroid/">GPSTest</a>-App das GPS testen, und
\n d) Energiesparen deaktivieren.
<string name="help_gps_troubleshooting_content"> \u0020Was Du tun kannst:
\na) prüfen, ob GPS aktiviert ist,
\nb) den GPS-Empfang verbessern (z.B. ins Freie gehen),
\nc) mit der <a href="https://f-droid.org/en/packages/com.android.gpstest.osmdroid/">GPSTest</a>-App das GPS testen, und
\nd) Energiesparen deaktivieren.
\n
\n Wenn das alles nicht hilft, melde bitte einen Fehler. </string>
\nWenn das alles nicht hilft, melde bitte einen Fehler. \u0020</string>
<string name="help_support_title">Wie kann ich OpenTracks unterstützen?</string>
<string name="help_support_content"> Du kannst:
\n a) über OpenTracks reden,
\n b) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Merkmale vorschlagen</a>,
\n c) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Fehler melden</a>,
\n d) Hilfe bei der Software-Entwicklung,
\n e) kaufen in <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a>,
\n f) spenden, und
\n g) das tun, was Deiner Meinung nach OpenTracks hilft </string>
<string name="help_support_content"> \u0020Du kannst:
\na) auf OpenTracks aufmerksam machen,
\nb) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Funktionen vorschlagen</a>,
\nc) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Fehler melden</a>,
\nd) bei der Software-Entwicklung helfen,
\ne) es im <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a> kaufen,
\nf) spenden, und
\ng) das tun, was OpenTracks Deiner Meinung nach hilft. \u0020</string>
<string name="open_track_as_trackfileformat">Als %1$s öffnen</string>
<!-- Activity Type -->
<string name="activity_type_airplane">Flugzeug</string>
@@ -174,8 +173,8 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="generic_tracks">Strecken</string>
<!-- Gps -->
<string name="gps_starting">GPS wird gestartet</string>
<string name="gps_wait_for_better_signal">Warten auf besseres GPS-Signal</string>
<string name="gps_wait_for_signal">Warten auf GPS-Signal</string>
<string name="gps_wait_for_better_signal">Warte auf besseres GPS-Signal</string>
<string name="gps_wait_for_signal">Warte auf GPS-Signal</string>
<!-- Image -->
<string name="image_arrow">Pfeil</string>
<string name="image_marker_count">Anzahl der Markierungen</string>
@@ -428,7 +427,7 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="activity_type_escooter">E-Scooter</string>
<string name="import_unsupported_format">Nicht unterstütztes Dateiformat</string>
<plurals name="generic_completed_with_errors">
<item quantity="one">Abgeschlossen mit einem fehler</item>
<item quantity="one">Abgeschlossen mit einem Fehler</item>
<item quantity="other">Abgeschlossen mit %1$d Fehlern</item>
</plurals>
<string name="import_error_info">%1$s: %2$s</string>
@@ -462,7 +461,7 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="track_pace_notification">Tempo: %1$s</string>
<string name="menu_voice_rate">Sprachgeschwindigkeit</string>
<string name="import_prevent_reimport">Du hast re-import von Tracks verhindern aktiviert</string>
<string name="about_third_party_data">Daten von Drittherstellern</string>
<string name="about_third_party_data">Daten von Drittanbietern</string>
<string name="sensor_state_heart_rate_max">Maximaler Herzfrequenz</string>
<string name="track_delete_not_recording">Dieser Track kann nicht gelöscht werden, da er gerade aufgezeichnet wird.</string>
<string name="interval_list_empty_message">Es gibt noch keine Intervalle</string>
@@ -561,18 +560,16 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="no_compatible_file_manager_installed">Kein kompatibler Dateimanager installiert</string>
<string name="aggregated_stats_filter_no_results">Es gibt keine Aktivitäten für diesen Filter</string>
<string name="settings_announcements_summary">Zeit, Entfernung, Sprachgeschwindigkeit</string>
<string name="generic_dismiss">Ablehnen</string>
<string name="generic_dismiss">Verwerfen</string>
<string name="settings_defaults_summary">Bevorzugte Einheiten, Standard Aktivität, Standard Trackbezeichnung</string>
<string name="settings_layout_reset_confirm_title">Deine Layouts zurücksetzen\?</string>
<string name="settings_layout_reset">Individuelle Layouts zurücksetzen</string>
<string name="settings_layout_reset_done">Alle Layout-Einstellungen wurden auf ihre Standardwerte zurückgesetzt</string>
<string name="settings_all_reset">Zurücksetzen</string>
<string name="field_remove_from_layout">Entfernen</string>
<string name="error_crash_title">%1$s abgestürzt</string>
<string name="share_crash_report">Teile Absturzbericht</string>
<string name="error_crash_title">%1$s ist abgestürzt</string>
<string name="share_crash_report">Absturzbericht teilen</string>
<string name="always">Immer</string>
<string name="select_show_on_map_behavior">Wähle \"Zeige auf Karte\" Verhalten</string>
<string name="settings_open_tracks_summary">Alles über das OpenTracks-Projekt</string>
<string name="settings_layout_reset_confirm_message">Alle Layout-Einstellungen werden auf die Standardwerte zurückgesetzt. Aufzeichnungen werden nicht vom Gerät gelöscht.</string>
<string name="report_bug">Fehler melden</string>
<string name="settings_ui_summary">Erscheinungsbild, Aufzeichnungslayout, Theme</string>
@@ -588,7 +585,6 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="no_compatible_gallery_installed">Keine kompatible Bildergalerie Anwendung installiert</string>
<string name="show_on_dashboard_not_installed">Es ist keine Anwendung installiert, die die OpenTracks Dashboard API unterstützt.</string>
<string name="location_latitude_longitude">%1$s, %2$s</string>
<string name="show_on_map_format_ask">Frag</string>
<string name="settings_stats_units_nautical">Nautisches Maß (NM, ft)</string>
<string name="unit_minute_per_nautical_mile">min/NM</string>
<string name="voice_on_device_speaker_title">Verwende den Lautsprecher des Gerätes</string>
@@ -646,4 +642,5 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka
<string name="voiceIdle">Untätig werden.</string>
<string name="voice_announce_lap_power_key">StimmeAnkündigungLapPower</string>
<string name="settings_announcements_lap_power">Rundenleistung</string>
<string name="create_marker_error">Die Markierung konnte nicht erstellt werden. Versuchen Sie es erneut.</string>
</resources>
-3
View File
@@ -540,7 +540,6 @@ limitations under the License.
<string name="settings_activity_defaults_category">Prederminados de la actividad</string>
<string name="settings_announcements_summary">Tiempo, Distancia, Velocidad de la voz</string>
<string name="settings_sensor_bluetooth_service_filter_on">Mostrar sólo los dispositivos Bluetooth que anuncian los servicios requeridos</string>
<string name="settings_open_tracks_summary">Todo sobre el proyecto OpenTracks</string>
<string name="settings_defaults_title">Unidades y Actividad predeterminadas</string>
<string name="settings_defaults_summary">Unidades preferidas, Actividad predeterminada, Nombre predeterminado del recorrido</string>
<string name="generic_undo">Deshacer</string>
@@ -601,7 +600,6 @@ limitations under the License.
<string name="voice_per_nautical_mile">por milla náutica</string>
<string name="error_crash_title">%1$s falló</string>
<string name="report_bug">Reportar error</string>
<string name="show_on_map_format_ask">Preguntar</string>
<string name="show_on_dashboard">Panel de control del API de OpenTracks</string>
<string name="show_on_dashboard_not_installed">No se ha instalado ninguna aplicación compatible con el panel de control del API de OpenTracks.</string>
<string name="always">Siempre</string>
@@ -622,7 +620,6 @@ limitations under the License.
other {{n,number,#.0} millas náuticas}
}
</string>
<string name="select_show_on_map_behavior">Seleccionar el comportamiento de \"mostrar en el mapa\"</string>
<string name="introduction_osm_dashboard">OpenTracks en sí no proporciona un mapa. Por favor, instale OSMDashboard para ver sus grabaciones en un mapa.</string>
<string name="share_crash_report">Compartir informe de fallo</string>
<string name="settings_stats_units_imperial_meter">Imperial (millas, metros)</string>
-1
View File
@@ -467,7 +467,6 @@ limitations under the License.
<string name="settings_import_export_summary">Import, Eksport, Automaatne Eksport</string>
<string name="settings_import_export_title">Import/Eksport</string>
<string name="settings_gps_sensor">GPS</string>
<string name="settings_open_tracks_summary">Kõik OpenTracks Projekti Kohta</string>
<string name="settings_reset_summary">Lähtestage Seaded vaikeväärtustele</string>
<string name="settings_recording_customize_layout_title">Kohandage oma salvestuspaigutust</string>
<string name="settings_recording_customize_layout_select_columns">Andmeväljad rea kohta</string>
-1
View File
@@ -491,7 +491,6 @@ GPS gailuak datu okerrak salatzen baditu (adibidez, kokapena, abiadura, kota), O
<string name="settings_layout_reset_confirm_message">Diseinuaren ezarpen guztiak balio lehenetsietara itzuliko dira. Honek ez du gailuko pistarik ezabatuko.</string>
<string name="settings_sensor_bluetooth_service_filter_on">Eskatutako zerbitzuak iragartzen dituzten Bluetooth gailuak soilik erakutsi</string>
<string name="settings_gps_sensor">GPS</string>
<string name="settings_open_tracks_summary">Guztiak Options Proiektuaren</string>
<string name="settings_defaults_title">Unitate eta Jarduera lehenetsiak</string>
<string name="settings_defaults_summary">Unitate Hobetsia, Jarduera Lehenetsia, Pistaren Izen Lehenetsia</string>
<string name="settings_ui_title">Interfazea</string>
-3
View File
@@ -480,7 +480,6 @@ limitations under the License.
<string name="location_coordinate">%1$s°</string>
<string name="location_latitude_longitude">%1$s, %2$s</string>
<string name="generic_yesterday">Eilen</string>
<string name="settings_open_tracks_summary">Kaikki OpenTracks-projektista</string>
<string name="settings_ui_title">Käyttöliittymä</string>
<string name="settings_import_export_summary">Tuo, vie, automaattinen vienti</string>
<string name="settings_units_category">Yksiköt</string>
@@ -521,7 +520,6 @@ limitations under the License.
<string name="lap_speed">Kierrosnopeus</string>
<string name="total_distance">Kokonaismatka</string>
<string name="always">Aina</string>
<string name="show_on_map_format_ask">Kysyä</string>
<string name="error_crash_title">%1$s kaatui</string>
<string name="share_crash_report">Jaa kaatumisraportti</string>
<string name="report_bug">Ilmoita virheestä</string>
@@ -529,7 +527,6 @@ limitations under the License.
<string name="gps_recording_without_signal">OpenTracks tallentaa ilman GPS-tietoja.</string>
<string name="settings_defaults_title">Oletusyksiköt ja toiminta</string>
<string name="settings_defaults_summary">Suositeltavat yksiköt, Oletusaktiviteetti, Seurannan oletusnimi</string>
<string name="select_show_on_map_behavior">Valitse\" Näytä kartalla\"käyttäytyminen</string>
<string name="settings_sensors_summary">Pyöräilyanturit, Pyörän ympärysmitta, Juoksuanturit</string>
<string name="settings_announcements_statistics_title">Ääni-ilmoitukset</string>
<string name="settings_announcements_summary">Aika, etäisyys, äänennopeus</string>
+14 -10
View File
@@ -433,7 +433,7 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="export_all_do_it_for_all">le faire pour tous les conflits</string>
<string name="export_track_errors">Fichiers non exportés</string>
<string name="import_unable_to_import_file">Impossible d\'importer le fichier : %1$s</string>
<string name="import_no_kml_file_found">Pas de doc.fichier kml trouvé dans KMZ</string>
<string name="import_no_kml_file_found">Pas trouvé de fichier kml dans KMZ</string>
<string name="import_error_info">%1$s : %2$s</string>
<string name="import_error_list_dialog_title">Les fichiers ne sont pas importées</string>
<string name="settings_night_mode_title">Thème de l\'Interface utilisateur</string>
@@ -492,9 +492,9 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="permission_bluetooth_failed_rejected">Vous devez accorder manuellement l\'accès aux appareils à proximité à OpenTracks dans les paramètres système.</string>
<string name="settings_recording_customize_layout_title">Personnalisez votre disposition d\'enregistrement</string>
<string name="settings_announcements_totaltime_frequency">Intervalle de temps</string>
<string name="settings_announcements_distance_frequency">Intervalle de distance</string>
<string name="settings_announcements_distance_frequency">Longueur du tour</string>
<string name="settings_layout_reset_confirm_title">Réinitialiser vos dispositions \?</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_layout_reset_done">Tous les paramètres de mise en page 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>
@@ -517,7 +517,7 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="settings_ui_summary">Apparence, Mise en page de l\'enregistrement, Thème</string>
<string name="settings_units_category">Unités</string>
<string name="settings_import_export_summary">Importez, Exportez, Auto Export</string>
<string name="settings_import_export_title">Importez/Exportez</string>
<string name="settings_import_export_title">Importer et Exporter</string>
<string name="settings_announcements_summary">Temps, distance, vitesse de la voix</string>
<string name="settings_announcements_statistics_title">Annonces vocales</string>
<string name="settings_sensors_title">Capteurs</string>
@@ -526,7 +526,6 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="settings_ui_title">Interface utilisateur</string>
<string name="settings_defaults_summary">Unités préférées, Activité par défaut, Suivi du nom par défaut</string>
<string name="settings_defaults_title">Unités et activité par défaut</string>
<string name="settings_open_tracks_summary">A propos du projet OpenTracks</string>
<string name="generic_undo">Annuler</string>
<string name="menu_add_custom_layout">Nouvelle présentation</string>
<string name="generic_filter">Filtre</string>
@@ -581,7 +580,6 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="voice_per_mile">par mile</string>
<string name="pace">Rythme</string>
<string name="lap_speed">Vitesse par tour</string>
<string name="show_on_map_format_ask">Demander</string>
<string name="show_on_dashboard">Tableau de bord de l\'API OpenTracks</string>
<string name="always">Toujours</string>
<string name="share_crash_report">Partager le rapport de crash</string>
@@ -589,7 +587,6 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<string name="error_crash_title">%1$s a crashé</string>
<string name="gps_recording_without_signal">OpenTracks enregistre actuellement sans les données GPS.</string>
<string name="settings_export_filename_title">Format du nom de fichier</string>
<string name="select_show_on_map_behavior">Sélectionner le comportement \"Montrer sur la carte\"</string>
<string name="settings_public_api_dashboard_enabled_title">Transfert automatique des données</string>
<string name="settings_public_api_dashboard_enabled_summary_on">Une application qui a commencé un enregistrement peut aussi accéder aux données enregistrées.</string>
<string name="settings_announcements_average_speed_pace">Allure/vitesse moyenne</string>
@@ -644,18 +641,25 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
<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_theme_switch_restart">Les changements de thème peuvent 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_night_mode_option_night_oled">Nuit (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_cadence_unit">tr/min</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>
<string name="create_marker_error">Impossible de créer un marqueur. Veuillez réessayer.</string>
<string name="power">Puissance</string>
<string name="power_x_watt">Puissance {x, plural, =1 {1 watt} autres {# watt} }</string>
<string name="settings_announcements_lap_power">Puissance par tour</string>
<string name="activity_type_kickscooter">trottinette</string>
<string name="voiceSpeed">{n, plural, =1 {1} autres {{n,number,#.0}} }</string>
<string name="voiceDistance">{n, plural, =1 {1 } autres {{n,number,#.0}} }</string>
</resources>
+4 -22
View File
@@ -15,13 +15,7 @@
<string name="help_recording_title">Conas a thaifeadann OpenTracks sonraí\?</string>
<string name="help_data_storage_title">Conas a stórálann OpenTracks sonraí braiteora\?</string>
<string name="help_recording_content">OpenTracks úsáideann an braiteoir GPS an fheiste chun an suíomh a thaifeadadh go leanúnach. Má thuairiscíonn an gléas GPS sonraí míchruinne (m.sh., suíomh, luas, ingearchló), Ní féidir Le OpenTracks aon rud a dhéanamh faoi.</string>
<string name="help_gps_troubleshooting_content"> Cad is féidir leat a dhéanamh:
\n a) seiceáil an bhfuil GPS cumasaithe,
\n b) feabhas a chur ar fáiltiú GPS (e.g., dul amuigh faoin AER),
\n c) seiceáil le <a href="https://f-droid.org/en/packages/com.android.gpstest.osmdroid/">gpstest</a> app, agus
\n d) díchumasaigh coigilt cumhachta.
\n
\n Mura gcabhraíonn gach rud le do thoil tuairiscigh fabht. </string>
<string name="help_gps_troubleshooting_content">Cad is féidir leat a dhéanamh: \n a) seiceáil an bhfuil GPS cumasaithe, \n b) feabhas a chur ar fáiltiú GPS (e.g., dul amuigh faoin AER), \n c) seiceáil le <a href="https://f-droid.org/en/packages/com.android.gpstest.osmdroid/">gpstest</a> app, agus \n d) díchumasaigh coigilt cumhachta. \n \nMura gcabhraíonn gach rud le do thoil tuairiscigh fabht.</string>
<string name="open_track_as_trackfileformat">Oscail mar %1$s</string>
<string name="activity_type_airplane">eitleán</string>
<string name="activity_type_biking">rothaíocht</string>
@@ -202,7 +196,6 @@
<string name="settings_ui_summary">Dealramh, Leagan Amach Taifeadta, Téama</string>
<string name="settings_sensors_summary">Braiteoirí Rothaíochta, Imlíne Rothaí, Braiteoirí Reatha</string>
<string name="bluetooth_disabled">Cumasaigh Bluetooth le do thoil.</string>
<string name="settings_open_tracks_summary">Gach Maidir Tionscadal OpenTracks</string>
<string name="settings_defaults_title">Aonaid agus Gníomhaíocht Réamhshocraithe</string>
<string name="settings_ui_title">Comhéadan Úsáideora</string>
<string name="settings_sensors_title">Braiteoirí</string>
@@ -292,8 +285,6 @@
<string name="hold_to_stop">Coinnigh chun stop a chur</string>
<string name="share_image_subject">Ba mhaith liom íomhá a roinnt leat</string>
<string name="show_on_dashboard">API Painéal OpenTracks</string>
<string name="show_on_map_format_ask">Iarr</string>
<string name="select_show_on_map_behavior">Roghnaigh iompar \"taispeáin ar léarscáil\"</string>
<string name="report_bug">Tuairiscigh fabht</string>
<string name="share_crash_report">Comhroinn tuairisc tuairteála</string>
<string name="no_compatible_file_manager_installed">Níl aon bhainisteoir comhad comhoiriúnach suiteáilte</string>
@@ -331,10 +322,7 @@
<string name="settings_gps_summary">Eatramh ama, Fad-eatramh, Fad Max, Cruinneas</string>
<string name="about_description"><i>Open Tracks</i> is iarratas rianaithe spóirt go n-urramaíonn go hiomlán do phríobháideacht.</string>
<string name="help_track_export_content"> Is féidir rianta a easpórtáil ó na Socruithe mar KMZ, KML, nó GPX. na sonraí go léir KMZ/KML; Suíomhanna GPX amháin. Roinntear rianta a roinntear tríd an <i>deilbhín comhroinnte</i> mar KMZ. </string>
<string name="help_track_map_content">" Bain úsáid as an deilbhín léarscáile beag.
\n a) (nuashonraithe beo) Suiteáil &lt;a href=\"https://github.com/OpenTracksApp/OSMDashboard\"&gt;OSMDashboard&lt;/a&gt;. Soláthraíonn sé léarscáileanna ar líne nó as líne trí &lt;a href=\"https://www.openstreetmap.org\"&gt;OpenStreetMap&lt;/a&gt;.
\n I ndáiríre, is aip ar leith é OSMDashboard nach féidir ach rochtain a fháil (go sealadach) ar shonraí na rianta atá le taispeáint.
\n b) Trí ghnáthfheidhmchlár léarscáile (m.sh., &lt;a href=\"http://osmand.net/\"&gt;OsmAnd&lt;/a&gt; agus &lt;a href=\"https://maps.me/\"&gt;MAPS.ME&lt; /a&gt;). Ní mór do na haipeanna seo tacú le formáid comhaid KMZ (suíomhanna agus stampaí ama amháin). Go deimhin, caithfidh aip tacaíocht a thabhairt do &lt;i&gt;ACTION_VIEW&lt;/i&gt; le MIME &lt;i&gt;application/vnd.google-earth.kmz&lt;/i&gt;. "</string>
<string name="help_track_map_content">Bain úsáid as an deilbhín léarscáile beag. \n a) (nuashonraithe beo) Suiteáil <a href="https://github.com/OpenTracksApp/OSMDashboard">OSMDashboard</a>. Soláthraíonn sé léarscáileanna ar líne nó as líne trí <a href="https://www.openstreetmap.org">OpenStreetMap</a>. \n I ndáiríre, is aip ar leith é OSMDashboard nach féidir ach rochtain a fháil (go sealadach) ar shonraí na rianta atá le taispeáint. \n b) Trí ghnáthfheidhmchlár léarscáile (m.sh., <a href="http://osmand.net/">OsmAnd</a> agus <a href="https://maps.me/">MAPS.ME</a>). Ní mór do na haipeanna seo tacú le formáid comhaid KMZ (suíomhanna agus stampaí ama amháin). Go deimhin, caithfidh aip tacaíocht a thabhairt do <i>ACTION_VIEW</i> le MIME <i>application/vnd.google-earth.kmz</i>.</string>
<string name="activity_type_ultimate_frisbee">frisbee deiridh</string>
<string name="description_total_time">Am iomlán: %1$s</string>
<string name="activity_type_inline_skating">scátáil inlíne</string>
@@ -364,14 +352,7 @@
<string name="always">I gcónaí</string>
<string name="show_on_dashboard_not_installed">Níl aon fheidhmchlár a thacaíonn le OpenTracks Dashboard API suiteáilte.</string>
<string name="share_image_body">Sílim go mb\'fhéidir go mbeadh suim agat san íomhá seo.</string>
<string name="help_support_content"> You can:
\n a) spread the word about OpenTracks,
\n b) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">propose features</a>,
\n c) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">report bugs</a>,
\n d) help in software development,
\n e) buy in <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a>,
\n f) donate, and
\n g) do whatever you think helps OpenTracks. </string>
<string name="help_support_content">You can: \n a) spread the word about OpenTracks, \n b) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">propose features</a>, \nc) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">report bugs</a>, \n d) help in software development, \n e) buy in <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a>, \n f) donate, and \n g) do whatever you think helps OpenTracks.</string>
<string name="settings_public_api_disabled_toast">Tá OpenTracks Public API díchumasaithe: is féidir é a chumasú sna socruithe.</string>
<string name="stats_altitude">Airde</string>
<string name="stats_coordinates">Domhanleithead/Domhanfhad</string>
@@ -560,4 +541,5 @@
<string name="settings_recording_location_distance_summary">%1$s idir suíomhanna taifeadta</string>
<string name="settings_announcements_lap_power">Cumhacht glúine</string>
<string name="power_x_watt">Cumhacht {x, iolra, = 1 {1 vata} eile {# vata} }</string>
<string name="empty">" "</string>
</resources>
-3
View File
@@ -477,7 +477,6 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele
<string name="stats_clock">Reloxo</string>
<string name="settings_defaults_summary">Unidades preferidas, Actividade por defecto, Nome da ruta</string>
<string name="settings_announcements_summary">A Distancia, Tempo, Voz Velocidade</string>
<string name="settings_open_tracks_summary">Todo sobre o Proxecto OpenTracks</string>
<string name="settings_defaults_title">Unidades e Actividade por defecto</string>
<string name="settings_ui_title">Interface da app</string>
<string name="settings_ui_summary">Aparencia, Gravación, Deseño, Tema</string>
@@ -553,8 +552,6 @@ Se o GPS informa sobre datos pouco precisos (ex.: localización, velocidade, ele
<string name="value_float_knots_recommended">%1$.1f nós (recomendado)</string>
<string name="voice_per_nautical_mile">por milla náutica</string>
<string name="show_on_dashboard_not_installed">Non hai ningunha aplicación instalada con soporte para a API de OpenTracks.</string>
<string name="select_show_on_map_behavior">Elixe \"ver no mapa\"</string>
<string name="show_on_map_format_ask">Preguntar</string>
<string name="always">Sempre</string>
<string name="error_crash_title">%1$s fallou</string>
<string name="report_bug">Informar do problema</string>
-3
View File
@@ -329,7 +329,6 @@ limitations under the License.
<string name="settings_recording_fullscreen_on_while_recording_summary">Tijekom snimanja prikaži u cjeloekranskom prikazu.</string>
<string name="sensor_state_cadence_max">Maks. ritam</string>
<string name="settings_units_category">Jedinice</string>
<string name="settings_open_tracks_summary">Sve o projektu OpenTracks</string>
<string name="settings_gps_sensor">GPS</string>
<string name="settings_announcements_summary">Vrijeme, udaljenost, brzina glasa</string>
<string name="menu_resume_track">Nastavi rutu</string>
@@ -408,7 +407,6 @@ limitations under the License.
<string name="settings_public_api_enabled_summary_on">Druge instalirane aplikacije mogu pokrenuti ili prekinuti snimanja.</string>
<string name="help_track_export_title">Kako mogu izvesti/dijeliti snimljene rute\?</string>
<string name="voice_on_device_speaker_title">Koristi zvučnik uređaja</string>
<string name="show_on_map_format_ask">Pitaj</string>
<string name="generic_today">Danas</string>
<string name="marker_add_photo_canceled">Prekinuto, nije dodana nijedna oznaka za slike</string>
<string name="value_float_kilometer_hour">%1$.1f km/h</string>
@@ -561,7 +559,6 @@ limitations under the License.
<string name="export_dir_not_writable">" (zabranjeno pisanje!)"</string>
<string name="export_progress_summary_overwrite_msg">Datoteke su prepisane</string>
<string name="settings_public_api_dashboard_enabled_summary_off">Snimljeni podaci se neće automatski dijeliti s drugim aplikacijama.</string>
<string name="select_show_on_map_behavior">Odaberi „Prikaži na karti”</string>
<string name="export_progress_summary_skip_msg">Datoteke su preskočene</string>
<string name="activity_type_kickscooter">skuter</string>
<string name="help_gps_troubleshooting_content"> \u0020Što možeš učiniti:

Some files were not shown because too many files have changed in this diff Show More