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: jobs:
test: test:
timeout-minutes: 45 timeout-minutes: 45
runs-on: macos-latest runs-on: ubuntu-latest
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -17,8 +17,14 @@ jobs:
distribution: 'adopt' distribution: 'adopt'
java-version: '17' 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 - name: run tests
uses: reactivecircus/android-emulator-runner@v2.32.0 uses: reactivecircus/android-emulator-runner@v2.33.0
with: with:
arch: x86_64 arch: x86_64
api-level: 34 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 ### 0x2A6D: Environmental Sensing Service
Sadly, Bluetooth sensors providing _air pressure_ via Environmental Sensing Service seem to be very rare. 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 * NoTrustIssues: https://github.com/OpenTracksApp/NoTrustIssues
An Android app that exposes the internal barometer via Environmental Sensing Service. An Android app that exposes the internal barometer via Environmental Sensing Service.
+11 -10
View File
@@ -6,7 +6,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { 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 targetCompatibility JavaVersion.VERSION_17
} }
compileSdk 34 compileSdk 35
buildFeatures { buildFeatures {
viewBinding true viewBinding true
@@ -64,13 +64,13 @@ android {
defaultConfig { defaultConfig {
applicationId "de.dennisguse.opentracks" applicationId "de.dennisguse.opentracks"
versionCode 5870 versionCode 5938
versionName "v4.13.1" versionName "v4.15.0"
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\"" buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
minSdk 26 minSdk 26
targetSdk 34 targetSdk 35
testInstrumentationRunner "de.dennisguse.opentracks.TestRunner" testInstrumentationRunner "de.dennisguse.opentracks.TestRunner"
testInstrumentationRunnerArguments clearPackageData: 'true' testInstrumentationRunnerArguments clearPackageData: 'true'
@@ -125,24 +125,25 @@ android {
} }
dependencies { 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.appcompat:appcompat:1.7.0'
implementation 'androidx.preference:preference:1.2.1' implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.documentfile:documentfile:1.0.1' implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.google.android.material:material:1.12.0' implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.core:core:1.13.1' implementation 'androidx.core:core:1.15.0'
implementation 'androidx.core:core-splashscreen:1.0.1' implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.7.0' 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:core:1.6.1'
androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test:rules:1.6.1' androidTestImplementation 'androidx.test:rules:1.6.1'
androidTestImplementation 'androidx.test:runner:1.6.2' androidTestImplementation 'androidx.test:runner:1.6.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' 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: Funksjoner:
* Sportsporing: Registrer dine sports- og utendørsaktiviteter * Registrer dine sports- og utendørsaktiviteter
* Bilder og markører: Marker interessante steder under sporing * Bilder og markører: Marker interessante steder underveis
* Total stigning og nedstigning: via barometersensor * Total stigning og nedstigning: via barometersensor
* Høyde vist i EGM2008 (over havnivå); eksportert som WGS84 * Høyde vist i EGM2008 (over havnivå); eksportert som WGS84
* Talemeldinger * Talemeldinger
* Støtter Blåtann LE-sensorer: puls, hastighet og distanse (sykling), kadens (sykling) og wattmåler (sykling) * 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 * Eksport av data: Enten som KMZ (inkl. bilder), KML eller GPX
* Ingen internettilgang: Internett brukes ikke * 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 distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
Vendored
+5 -2
View File
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# #
# SPDX-License-Identifier: Apache-2.0
#
############################################################################## ##############################################################################
# #
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (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. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # 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. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
Vendored
+2
View File
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @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; return true;
} }
if (item.getItemId() == R.id.track_list_about) {
startActivity(IntentUtils.newIntent(this, AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item); 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. * 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. * 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 { public class TrackPoint {
private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1); 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) { if (trackPoint.hasLocation() && lastStoredTrackPointWithLocation == null) {
insertTrackPoint(trackPoint, true); insertTrackPoint(trackPoint, true);
handler.removeCallbacks(ON_IDLE); scheduleNewIdleTimeout();
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
return true; return true;
} }
@@ -199,16 +198,14 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC); trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(trackPoint, true); insertTrackPoint(trackPoint, true);
handler.removeCallbacks(ON_IDLE); scheduleNewIdleTimeout();
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
return true; return true;
} }
if (distanceToLastStoredTrackPoint.greaterOrEqualThan(recordingDistanceInterval)) { if (distanceToLastStoredTrackPoint.greaterOrEqualThan(recordingDistanceInterval)) {
insertTrackPoint(trackPoint, false); insertTrackPoint(trackPoint, false);
handler.removeCallbacks(ON_IDLE); scheduleNewIdleTimeout();
handler.postDelayed(ON_IDLE, idleDuration.toMillis());
return true; return true;
} }
@@ -218,6 +215,15 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
return false; 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() { TrackStatistics getTrackStatistics() {
return trackStatisticsUpdater == null ? null : trackStatisticsUpdater.getTrackStatistics(); return trackStatisticsUpdater == null ? null : trackStatisticsUpdater.getTrackStatistics();
} }
@@ -2,15 +2,15 @@ package de.dennisguse.opentracks.services.handlers;
import android.content.Context; import android.content.Context;
import android.location.Location; import android.location.Location;
import android.location.altitude.AltitudeConverter;
import android.os.Build;
import android.util.Log; import android.util.Log;
import androidx.core.location.LocationCompat;
import androidx.core.location.altitude.AltitudeConverterCompat;
import java.io.IOException; import java.io.IOException;
import de.dennisguse.opentracks.data.models.Altitude; import de.dennisguse.opentracks.data.models.Altitude;
import de.dennisguse.opentracks.data.models.TrackPoint; 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>. * 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 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) { public void correctAltitude(Context context, TrackPoint trackPoint) {
if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) {
return; 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 { try {
Location loc = trackPoint.getLocation(); Location loc = trackPoint.getLocation();
altitudeConverter.addMslAltitudeToLocation(context, loc); AltitudeConverterCompat.addMslAltitudeToLocation(context, loc);
trackPoint.setAltitude(Altitude.EGM2008.of(loc.getMslAltitudeMeters())); trackPoint.setAltitude(Altitude.EGM2008.of(LocationCompat.getMslAltitudeMeters(loc)));
return;
} catch (IOException e) { } catch (IOException e) {
Log.w(TAG, "Android's AltitudeConverter crashed; falling back to internal."); Log.w(TAG, "Android's AltitudeConverterCompat failed with " + e.getMessage());
altitudeConverter = null;
// Should we fallback
} }
} });
t.start();
altitudeConverterFallback.correctAltitude(context, trackPoint); try {
} t.join(); // wait for thread to finish
} catch (InterruptedException e) {
private static class EGM2008Internal { Log.w(TAG, "Android's AltitudeConverterCompat failed with " + e.getMessage());
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()));
} }
} }
} }
@@ -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.CsvLayoutUtils;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
/** /**
* Utilities to access preferences stored in {@link SharedPreferences}. * Utilities to access preferences stored in {@link SharedPreferences}.
@@ -344,17 +343,17 @@ public class PreferencesUtils {
} }
static String[] getVoiceAnnouncementFrequencyEntries() { static String[] getVoiceAnnouncementFrequencyEntries() {
String[] values = resources.getStringArray(R.array.voice_announcement_frequency_values); String[] entryValues = resources.getStringArray(R.array.voice_announcement_frequency_values);
String[] options = new String[values.length]; String[] entries = new String[entryValues.length];
for (int i = 0; i < values.length; i++) { for (int i = 0; i < entryValues.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) { if (resources.getString(R.string.announcement_off).equals(entryValues[i])) {
options[i] = resources.getString(R.string.value_off); entries[i] = resources.getString(R.string.value_off);
} else { } else {
int value = Integer.parseInt(values[i]); int value = Integer.parseInt(entryValues[i]);
options[i] = resources.getString(R.string.value_integer_minute, Duration.ofSeconds(value).toMinutes()); 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 * @return Result depends on getUnitSystem
*/ */
static String[] getVoiceAnnouncementDistanceEntries() { static String[] getVoiceAnnouncementDistanceEntries() {
String[] values = resources.getStringArray(R.array.voice_announcement_distance_values); String[] entryValues = resources.getStringArray(R.array.voice_announcement_distance_values);
String[] options = new String[values.length]; String[] entries = new String[entryValues.length];
UnitSystem unitSystem = getUnitSystem(); UnitSystem unitSystem = getUnitSystem();
DistanceFormatter formatter = DistanceFormatter.Builder() DistanceFormatter formatter = DistanceFormatter.Builder()
.setDecimalCount(0) .setDecimalCount(0)
.setUnit(unitSystem) .setUnit(unitSystem)
.build(resources); .build(resources);
for (int i = 0; i < values.length; i++) { for (int i = 0; i < entryValues.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) { if (resources.getString(R.string.announcement_off).equals(entryValues[i])) {
options[i] = resources.getString(R.string.value_off); entries[i] = resources.getString(R.string.value_off);
} else { } else {
Distance distance = Distance.one(unitSystem).multipliedBy(Double.parseDouble(values[i])); Distance distance = Distance.one(unitSystem).multipliedBy(Double.parseDouble(entryValues[i]));
options[i] = formatter.formatDistance(distance); entries[i] = formatter.formatDistance(distance);
} }
} }
return options; return entries;
} }
public static float getVoiceSpeedRate() { public static float getVoiceSpeedRate() {
@@ -642,7 +641,9 @@ public class PreferencesUtils {
for (int i = 0; i < entryValues.length; i++) { for (int i = 0; i < entryValues.length; i++) {
int value = Integer.parseInt(entryValues[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); entries[i] = resources.getString(R.string.value_int_seconds, value);
} else { } else {
entries[i] = value < 60 ? resources.getString(R.string.value_integer_second, value) : resources.getString(R.string.value_integer_minute, value / 60); 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(); 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() { public static int getTotalRowsDeleted() {
return getInt(R.string.total_rows_deleted_key, 0); return getInt(R.string.total_rows_deleted_key, 0);
} }
@@ -7,15 +7,10 @@ import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import androidx.preference.ListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import java.util.Map;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.util.IntentDashboardUtils;
public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat { 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)); Preference dynamicColors = findPreference(getString(R.string.settings_ui_dynamic_colors_key));
dynamicColors.setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU); dynamicColors.setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU);
setShowOnMapFormatOptions();
} }
@Override @Override
@@ -79,14 +72,4 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {
super.onDisplayPreferenceDialog(preference); 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 { } else {
loadMarkerData(markerId); loadMarkerData(markerId);
} }
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
} }
private LiveData<Marker> createNewMarker() { 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.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.util.Log; import android.util.Log;
import android.util.Pair;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import java.util.ArrayList; 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.R;
import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.data.ContentProviderUtils;
import de.dennisguse.opentracks.data.ShareContentProvider;
import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.data.tables.MarkerColumns; import de.dennisguse.opentracks.data.tables.MarkerColumns;
import de.dennisguse.opentracks.data.tables.TrackPointsColumns; import de.dennisguse.opentracks.data.tables.TrackPointsColumns;
import de.dennisguse.opentracks.data.tables.TracksColumns; import de.dennisguse.opentracks.data.tables.TracksColumns;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.PreferencesUtils;
/** /**
@@ -39,14 +32,6 @@ public class IntentDashboardUtils {
private static final String ACTION_DASHBOARD_PAYLOAD = ACTION_DASHBOARD + ".Payload"; 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. * 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. * 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 context the context
* @param isRecording are we currently recording? * @param isRecording are we currently recording?
* @param trackIds the track ids * @param trackIds the track ids
*/ */
public static void showTrackOnMap(Context context, boolean isRecording, Track.Id... trackIds) { 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); startDashboard(context, isRecording, null, null, trackIds);
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);
}
} }
/** /**
@@ -183,28 +122,4 @@ public class IntentDashboardUtils {
Toast.makeText(context, R.string.show_on_dashboard_not_installed, Toast.LENGTH_SHORT).show(); 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 <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/track_list_toolbar" android:id="@+id/track_list_toolbar"
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/export_activity_toolbar" android:id="@+id/export_activity_toolbar"
+2 -1
View File
@@ -5,7 +5,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/show_error_toolbar" android:id="@+id/show_error_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent" android:layout_width="match_parent"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/export_activity_toolbar" android:id="@+id/export_activity_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent" android:layout_width="match_parent"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/import_activity_toolbar" android:id="@+id/import_activity_toolbar"
+1 -1
View File
@@ -49,7 +49,7 @@
android:layout_weight="1" android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextAppearance.OpenTracks.PrimaryHeader" style="@style/TextAppearance.OpenTracks.PrimaryHeader"
android:text="@string/stats_altitude" /> android:text="@string/stats_gain_loss" />
</LinearLayout> </LinearLayout>
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/marker_detail_toolbar" android:id="@+id/marker_detail_toolbar"
+7 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/marker_edit_toolbar" android:id="@+id/marker_edit_toolbar"
@@ -34,6 +35,7 @@ limitations under the License.
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginBottom="102dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ScrollView style="@style/ScrollView.WithBottomButtons"> <ScrollView style="@style/ScrollView.WithBottomButtons">
@@ -150,4 +152,8 @@ limitations under the License.
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<include
android:id="@+id/bottom_app_bar_layout"
layout="@layout/bottomappbar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.search.SearchBar <com.google.android.material.search.SearchBar
android:id="@+id/marker_list_toolbar" android:id="@+id/marker_list_toolbar"
+2 -1
View File
@@ -7,7 +7,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/top_app_bar" android:id="@+id/top_app_bar"
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
android:fitsSystemWindows="true">
<include <include
android:id="@+id/fields" android:id="@+id/fields"
+2 -1
View File
@@ -20,7 +20,8 @@ limitations under the License.
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.search.SearchBar <com.google.android.material.search.SearchBar
android:id="@+id/track_list_toolbar" 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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="70dp"> android:paddingBottom="90dp"
android:fitsSystemWindows="true">
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/track_detail_activity_tablayout" android:id="@+id/track_detail_activity_tablayout"
+2 -1
View File
@@ -9,7 +9,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="90dp"> android:paddingBottom="90dp"
android:fitsSystemWindows="true">
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/track_detail_activity_tablayout" android:id="@+id/track_detail_activity_tablayout"
+2 -1
View File
@@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
android:fitsSystemWindows="true">
<include <include
android:id="@+id/loading_layout" android:id="@+id/loading_layout"
+5
View File
@@ -30,4 +30,9 @@ limitations under the License.
android:icon="@drawable/ic_help_24dp" android:icon="@drawable/ic_help_24dp"
android:title="@string/menu_help" /> 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> </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="gps_recording_without_signal">OpenTracks está grabando sin datos GPS.</string>
<string name="menu_add_custom_layout">Nuevo diseño</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="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_activity_defaults_category">Prederminados de la actividad</string>
<string name="settings_reset_summary">Restablecer a valores predeterminados</string> <string name="settings_reset_summary">Restablecer a valores predeterminados</string>
<string name="custom_layout_list_title">Diseños</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="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_disabled">Ci vole à attivà u Bluetooth.</string>
<string name="bluetooth_sensor_summary">%1$s (%2$s)</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_defaults_title">Unità è attività predefinite</string>
<string name="settings_ui_title">Interfaccia di l’utilizatore</string> <string name="settings_ui_title">Interfaccia di l’utilizatore</string>
<string name="settings_ui_summary">Aspettu, accunciamentu di l’arregistramentu, tema</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_import_export_title">Impurtazione è espurtazione</string>
<string name="settings_reset_summary">Reinizià i parametri à i valori predefiniti</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_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_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_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> <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="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="error_crash_title">%1$s s‘hè lampatu</string>
<string name="report_bug">Signalà un prublema</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">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="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> <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_sensors_title">Senzory</string>
<string name="settings_gps_summary">Časový interval, Interval vzdálenosti, Maximální vzdálenost, Přesnost</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_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_defaults_title">Výchozí jednotky a aktivity</string>
<string name="settings_ui_title">Uživatelské rozhraní</string> <string name="settings_ui_title">Uživatelské rozhraní</string>
<string name="settings_gps_sensor">GPS</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="value_float_knots">%1$.1f uzlů</string>
<string name="track_delete_number_of_tracks">%1$d stop</string> <string name="track_delete_number_of_tracks">%1$d stop</string>
<string name="image_discard">Vyřadit</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="settings_stats_units_nautical">Námořní (NM, ft)</string>
<string name="report_bug">Nahlásit chybu</string> <string name="report_bug">Nahlásit chybu</string>
<string name="settings_announcements_lap_heart_rate">Srdeční tep kola</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="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="always">Vždy</string>
<string name="help_data_google_play_services_content">Ne</string> <string name="help_data_google_play_services_content">Ne</string>
<string name="description_speed_nautical">Rychlost (uzly)</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="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="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="create_marker_error">Nepodařilo se vytvořit značku. Zkuste to znovu.</string>
<string name="empty">" "</string>
</resources> </resources>
-1
View File
@@ -443,7 +443,6 @@ limitations under the License.
<string name="generic_today">I dag</string> <string name="generic_today">I dag</string>
<string name="generic_yesterday">I går</string> <string name="generic_yesterday">I går</string>
<string name="menu_filter">Filter</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_title">Standardenheder og aktivitet</string>
<string name="settings_defaults_summary">Foretrukne enheder, standardaktivitet, standardspornavn</string> <string name="settings_defaults_summary">Foretrukne enheder, standardaktivitet, standardspornavn</string>
<string name="settings_gps_summary">Tidsinterval, distanceinterval, maksimal afstand, nøjagtighed</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. limitations under the License.
--><resources> --><resources>
<string name="about_preference_title">Über OpenTracks</string> <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_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_name">Versionsname: %1$s</string>
<string name="about_version_code">Version Code: %1$d</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\'s MyTracks</i></a> (2016 eingestellt).</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> <string name="about_libraries">Bibliotheken</string>
<!-- Help --> <!-- Help -->
<string name="help_feature_title">OpenTracks hat die folgenden Funktionen:</string> <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* arbeitet vollständig offline
\n* Tracks auf einer Karte anzeigen (siehe unten)</string> \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_title">Wie wird ein Track auf einer Karte angezeigt?</string>
<string name="help_track_map_content"> Verwende das kleine Kartensymbol. <string name="help_track_map_content"> \u0020Verwende 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>. \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.
\n zur Verfügung. Eigentlich 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>
\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 Fotos, die als Markierungen aufgenommen wurden?</string>
<string name="help_storage_pictures_title">Wie speichert OpenTracks Bilder, 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_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_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_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_title">Wie zeichnet OpenTracks Daten auf?</string>
<string name="help_recording_content"> <string name="help_recording_content">
OpenTracks verwendet den GPS-Sensor des Geräts, um den Standort kontinuierlich aufzuzeichnen. 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> 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_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_title">OpenTracks zeichnet keine Standorte auf?</string>
<string name="help_gps_troubleshooting_content"> Was Du tun kannst: <string name="help_gps_troubleshooting_content"> \u0020Was Du tun kannst:
\n a) prüfen, ob GPS aktiviert ist, \na) prüfen, ob GPS aktiviert ist,
\n b) den GPS-Empfang verbessern (z.B. ins Freie gehen), \nb) 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 \nc) 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. \nd) Energiesparen deaktivieren.
\n \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_title">Wie kann ich OpenTracks unterstützen?</string>
<string name="help_support_content"> Du kannst: <string name="help_support_content"> \u0020Du kannst:
\n a) über OpenTracks reden, \na) auf OpenTracks aufmerksam machen,
\n b) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Merkmale vorschlagen</a>, \nb) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Funktionen vorschlagen</a>,
\n c) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Fehler melden</a>, \nc) <a href="https://github.com/OpenTracksApp/OpenTracks/issues">Fehler melden</a>,
\n d) Hilfe bei der Software-Entwicklung, \nd) bei der Software-Entwicklung helfen,
\n e) kaufen in <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a>, \ne) es im <a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">Google Play Store</a> kaufen,
\n f) spenden, und \nf) spenden, und
\n g) das tun, was Deiner Meinung nach OpenTracks hilft </string> \ng) das tun, was OpenTracks Deiner Meinung nach hilft. \u0020</string>
<string name="open_track_as_trackfileformat">Als %1$s öffnen</string> <string name="open_track_as_trackfileformat">Als %1$s öffnen</string>
<!-- Activity Type --> <!-- Activity Type -->
<string name="activity_type_airplane">Flugzeug</string> <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> <string name="generic_tracks">Strecken</string>
<!-- Gps --> <!-- Gps -->
<string name="gps_starting">GPS wird gestartet</string> <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_better_signal">Warte auf besseres GPS-Signal</string>
<string name="gps_wait_for_signal">Warten auf GPS-Signal</string> <string name="gps_wait_for_signal">Warte auf GPS-Signal</string>
<!-- Image --> <!-- Image -->
<string name="image_arrow">Pfeil</string> <string name="image_arrow">Pfeil</string>
<string name="image_marker_count">Anzahl der Markierungen</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="activity_type_escooter">E-Scooter</string>
<string name="import_unsupported_format">Nicht unterstütztes Dateiformat</string> <string name="import_unsupported_format">Nicht unterstütztes Dateiformat</string>
<plurals name="generic_completed_with_errors"> <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> <item quantity="other">Abgeschlossen mit %1$d Fehlern</item>
</plurals> </plurals>
<string name="import_error_info">%1$s: %2$s</string> <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="track_pace_notification">Tempo: %1$s</string>
<string name="menu_voice_rate">Sprachgeschwindigkeit</string> <string name="menu_voice_rate">Sprachgeschwindigkeit</string>
<string name="import_prevent_reimport">Du hast re-import von Tracks verhindern aktiviert</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="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="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> <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="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="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="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_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_confirm_title">Deine Layouts zurücksetzen\?</string>
<string name="settings_layout_reset">Individuelle 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_layout_reset_done">Alle Layout-Einstellungen wurden auf ihre Standardwerte zurückgesetzt</string>
<string name="settings_all_reset">Zurücksetzen</string> <string name="settings_all_reset">Zurücksetzen</string>
<string name="field_remove_from_layout">Entfernen</string> <string name="field_remove_from_layout">Entfernen</string>
<string name="error_crash_title">%1$s abgestürzt</string> <string name="error_crash_title">%1$s ist abgestürzt</string>
<string name="share_crash_report">Teile Absturzbericht</string> <string name="share_crash_report">Absturzbericht teilen</string>
<string name="always">Immer</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="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="report_bug">Fehler melden</string>
<string name="settings_ui_summary">Erscheinungsbild, Aufzeichnungslayout, Theme</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="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="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="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="settings_stats_units_nautical">Nautisches Maß (NM, ft)</string>
<string name="unit_minute_per_nautical_mile">min/NM</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> <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="voiceIdle">Untätig werden.</string>
<string name="voice_announce_lap_power_key">StimmeAnkündigungLapPower</string> <string name="voice_announce_lap_power_key">StimmeAnkündigungLapPower</string>
<string name="settings_announcements_lap_power">Rundenleistung</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> </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_activity_defaults_category">Prederminados de la actividad</string>
<string name="settings_announcements_summary">Tiempo, Distancia, Velocidad de la voz</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_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_title">Unidades y Actividad predeterminadas</string>
<string name="settings_defaults_summary">Unidades preferidas, Actividad predeterminada, Nombre predeterminado del recorrido</string> <string name="settings_defaults_summary">Unidades preferidas, Actividad predeterminada, Nombre predeterminado del recorrido</string>
<string name="generic_undo">Deshacer</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="voice_per_nautical_mile">por milla náutica</string>
<string name="error_crash_title">%1$s falló</string> <string name="error_crash_title">%1$s falló</string>
<string name="report_bug">Reportar error</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">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="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> <string name="always">Siempre</string>
@@ -622,7 +620,6 @@ limitations under the License.
other {{n,number,#.0} millas náuticas} other {{n,number,#.0} millas náuticas}
} }
</string> </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="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="share_crash_report">Compartir informe de fallo</string>
<string name="settings_stats_units_imperial_meter">Imperial (millas, metros)</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_summary">Import, Eksport, Automaatne Eksport</string>
<string name="settings_import_export_title">Import/Eksport</string> <string name="settings_import_export_title">Import/Eksport</string>
<string name="settings_gps_sensor">GPS</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_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_title">Kohandage oma salvestuspaigutust</string>
<string name="settings_recording_customize_layout_select_columns">Andmeväljad rea kohta</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_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_sensor_bluetooth_service_filter_on">Eskatutako zerbitzuak iragartzen dituzten Bluetooth gailuak soilik erakutsi</string>
<string name="settings_gps_sensor">GPS</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_title">Unitate eta Jarduera lehenetsiak</string>
<string name="settings_defaults_summary">Unitate Hobetsia, Jarduera Lehenetsia, Pistaren Izen Lehenetsia</string> <string name="settings_defaults_summary">Unitate Hobetsia, Jarduera Lehenetsia, Pistaren Izen Lehenetsia</string>
<string name="settings_ui_title">Interfazea</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_coordinate">%1$s°</string>
<string name="location_latitude_longitude">%1$s, %2$s</string> <string name="location_latitude_longitude">%1$s, %2$s</string>
<string name="generic_yesterday">Eilen</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_ui_title">Käyttöliittymä</string>
<string name="settings_import_export_summary">Tuo, vie, automaattinen vienti</string> <string name="settings_import_export_summary">Tuo, vie, automaattinen vienti</string>
<string name="settings_units_category">Yksiköt</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="lap_speed">Kierrosnopeus</string>
<string name="total_distance">Kokonaismatka</string> <string name="total_distance">Kokonaismatka</string>
<string name="always">Aina</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="error_crash_title">%1$s kaatui</string>
<string name="share_crash_report">Jaa kaatumisraportti</string> <string name="share_crash_report">Jaa kaatumisraportti</string>
<string name="report_bug">Ilmoita virheestä</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="gps_recording_without_signal">OpenTracks tallentaa ilman GPS-tietoja.</string>
<string name="settings_defaults_title">Oletusyksiköt ja toiminta</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="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_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_statistics_title">Ääni-ilmoitukset</string>
<string name="settings_announcements_summary">Aika, etäisyys, äänennopeus</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_all_do_it_for_all">le faire pour tous les conflits</string>
<string name="export_track_errors">Fichiers non exportés</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_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_info">%1$s : %2$s</string>
<string name="import_error_list_dialog_title">Les fichiers ne sont pas importées</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> <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="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_recording_customize_layout_title">Personnalisez votre disposition d\'enregistrement</string>
<string name="settings_announcements_totaltime_frequency">Intervalle de temps</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_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="settings_all_reset">Réinitialiser</string>
<string name="location_coordinate">%1$s°</string> <string name="location_coordinate">%1$s°</string>
<string name="location_latitude_longitude">%1$s, %2$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_ui_summary">Apparence, Mise en page de l\'enregistrement, Thème</string>
<string name="settings_units_category">Unités</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_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_summary">Temps, distance, vitesse de la voix</string>
<string name="settings_announcements_statistics_title">Annonces vocales</string> <string name="settings_announcements_statistics_title">Annonces vocales</string>
<string name="settings_sensors_title">Capteurs</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_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_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_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="generic_undo">Annuler</string>
<string name="menu_add_custom_layout">Nouvelle présentation</string> <string name="menu_add_custom_layout">Nouvelle présentation</string>
<string name="generic_filter">Filtre</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="voice_per_mile">par mile</string>
<string name="pace">Rythme</string> <string name="pace">Rythme</string>
<string name="lap_speed">Vitesse par tour</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="show_on_dashboard">Tableau de bord de l\'API OpenTracks</string>
<string name="always">Toujours</string> <string name="always">Toujours</string>
<string name="share_crash_report">Partager le rapport de crash</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="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="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="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_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_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> <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="bluetooth_sensor_summary">%1$s (%2$s)</string>
<string name="settings_announcements_idle_category_title">Alertes de mise en veille</string> <string name="settings_announcements_idle_category_title">Alertes de mise en veille</string>
<string name="settings_recording_title">Enregistrement</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_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_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="settings_announcements_unit">Unité de Distance/Vitesse</string>
<string name="value_internal_sensor">Capteur interne</string> <string name="value_internal_sensor">Capteur interne</string>
<string name="value_int_seconds">%1$d s (recommandé)</string> <string name="value_int_seconds">%1$d s (recommandé)</string>
<string name="voiceIdle">Mise en veille.</string> <string name="voiceIdle">Mise en veille.</string>
<string name="settings_recording_min_sampling_interval_title">Fréquence d\'échantillonnage</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="sensor_state_heart_rate_unit">bpm</string>
<string name="settings_announcements_idle_title">En veille</string> <string name="settings_announcements_idle_title">En veille</string>
<string name="settings_ui_dynamic_colors_title">Couleurs dynamiques</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="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> </resources>
+4 -22
View File
@@ -15,13 +15,7 @@
<string name="help_recording_title">Conas a thaifeadann OpenTracks sonraí\?</string> <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_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_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: <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>
\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="open_track_as_trackfileformat">Oscail mar %1$s</string> <string name="open_track_as_trackfileformat">Oscail mar %1$s</string>
<string name="activity_type_airplane">eitleán</string> <string name="activity_type_airplane">eitleán</string>
<string name="activity_type_biking">rothaíocht</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_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="settings_sensors_summary">Braiteoirí Rothaíochta, Imlíne Rothaí, Braiteoirí Reatha</string>
<string name="bluetooth_disabled">Cumasaigh Bluetooth le do thoil.</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_defaults_title">Aonaid agus Gníomhaíocht Réamhshocraithe</string>
<string name="settings_ui_title">Comhéadan Úsáideora</string> <string name="settings_ui_title">Comhéadan Úsáideora</string>
<string name="settings_sensors_title">Braiteoirí</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="hold_to_stop">Coinnigh chun stop a chur</string>
<string name="share_image_subject">Ba mhaith liom íomhá a roinnt leat</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_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="report_bug">Tuairiscigh fabht</string>
<string name="share_crash_report">Comhroinn tuairisc tuairteála</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> <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="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="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_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. <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>
\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="activity_type_ultimate_frisbee">frisbee deiridh</string> <string name="activity_type_ultimate_frisbee">frisbee deiridh</string>
<string name="description_total_time">Am iomlán: %1$s</string> <string name="description_total_time">Am iomlán: %1$s</string>
<string name="activity_type_inline_skating">scátáil inlíne</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="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="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="share_image_body">Sílim go mb\'fhéidir go mbeadh suim agat san íomhá seo.</string>
<string name="help_support_content"> You can: <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>
\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="settings_public_api_disabled_toast">Tá OpenTracks Public API díchumasaithe: is féidir é a chumasú sna socruithe.</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_altitude">Airde</string>
<string name="stats_coordinates">Domhanleithead/Domhanfhad</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_recording_location_distance_summary">%1$s idir suíomhanna taifeadta</string>
<string name="settings_announcements_lap_power">Cumhacht glúine</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="power_x_watt">Cumhacht {x, iolra, = 1 {1 vata} eile {# vata} }</string>
<string name="empty">" "</string>
</resources> </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="stats_clock">Reloxo</string>
<string name="settings_defaults_summary">Unidades preferidas, Actividade por defecto, Nome da ruta</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_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_defaults_title">Unidades e Actividade por defecto</string>
<string name="settings_ui_title">Interface da app</string> <string name="settings_ui_title">Interface da app</string>
<string name="settings_ui_summary">Aparencia, Gravación, Deseño, Tema</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="value_float_knots_recommended">%1$.1f nós (recomendado)</string>
<string name="voice_per_nautical_mile">por milla náutica</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="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="always">Sempre</string>
<string name="error_crash_title">%1$s fallou</string> <string name="error_crash_title">%1$s fallou</string>
<string name="report_bug">Informar do problema</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="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="sensor_state_cadence_max">Maks. ritam</string>
<string name="settings_units_category">Jedinice</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_gps_sensor">GPS</string>
<string name="settings_announcements_summary">Vrijeme, udaljenost, brzina glasa</string> <string name="settings_announcements_summary">Vrijeme, udaljenost, brzina glasa</string>
<string name="menu_resume_track">Nastavi rutu</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="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="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="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="generic_today">Danas</string>
<string name="marker_add_photo_canceled">Prekinuto, nije dodana nijedna oznaka za slike</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> <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_dir_not_writable">" (zabranjeno pisanje!)"</string>
<string name="export_progress_summary_overwrite_msg">Datoteke su prepisane</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="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="export_progress_summary_skip_msg">Datoteke su preskočene</string>
<string name="activity_type_kickscooter">skuter</string> <string name="activity_type_kickscooter">skuter</string>
<string name="help_gps_troubleshooting_content"> \u0020Što možeš učiniti: <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