Compare commits
483 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1feb5cbb65 | |||
| 1d2fde6e69 | |||
| 20423121ee | |||
| ebf7b0a0c3 | |||
| 1189a07794 | |||
| 63e9041922 | |||
| 699be450b0 | |||
| 66b175c56c | |||
| 81a7aca4a0 | |||
| 065f42fbef | |||
| c92371b36a | |||
| 97c46183c3 | |||
| c02b8fab53 | |||
| 6540913d59 | |||
| b70c3be5af | |||
| 461f1c246b | |||
| 6d091dfa81 | |||
| 97ad6bc2f8 | |||
| 93ee8a53ed | |||
| bf9b6d6627 | |||
| 5f637952aa | |||
| 17de8cea6f | |||
| afea79476f | |||
| 7215a2def0 | |||
| b8d2d14d68 | |||
| a2b53c75f4 | |||
| 7a5f69d3a5 | |||
| 7fd9893560 | |||
| f209031df0 | |||
| 2dbab929ac | |||
| e9eb764d12 | |||
| 41a4a5527a | |||
| 4ded3c6bc8 | |||
| 51e573e475 | |||
| 98c3169929 | |||
| ff65a4d04f | |||
| 278f49dec8 | |||
| d444e1ca3c | |||
| 13e07696b9 | |||
| 23c3a4d651 | |||
| c9869bab0e | |||
| ecdb509371 | |||
| de376a84f8 | |||
| 9abd8bcaa6 | |||
| 8ddadb8e6d | |||
| 924ef3313e | |||
| 8cb68a6e64 | |||
| 23f47f10f8 | |||
| 251fa17487 | |||
| bae3373fe9 | |||
| 0a685a66e3 | |||
| 5ca9ca857a | |||
| d9dfa6d746 | |||
| 3a5220546e | |||
| 047d5c2340 | |||
| 725c21c0a1 | |||
| 7939e39fc1 | |||
| a133bd8f9e | |||
| 1f9790cba8 | |||
| a3ba1e1490 | |||
| accb30152f | |||
| dc7daa6e8c | |||
| 1d8e788d53 | |||
| 568b908b26 | |||
| 3ab63adb34 | |||
| 91692f345e | |||
| dbdb98a682 | |||
| df66cd5753 | |||
| 6e39dd37f8 | |||
| 7212f7be94 | |||
| 77fe494e6c | |||
| 2f491e8c10 | |||
| f4fe7b1ab3 | |||
| 7e444cbf31 | |||
| ed6ab9c53c | |||
| f91ca3154c | |||
| bbfab1b201 | |||
| 1f2e3bcf70 | |||
| d1f3791f97 | |||
| 490b95a001 | |||
| 12e6f03098 | |||
| d86f42e2e9 | |||
| 360d59d3de | |||
| b617420290 | |||
| 53b267150b | |||
| 0dfd55ed52 | |||
| daabd5381d | |||
| a842129e37 | |||
| e8b9c2bbc3 | |||
| e55924dae3 | |||
| e3a8143d58 | |||
| 30310bb874 | |||
| 9f377b172d | |||
| 23175902fb | |||
| 706bd8b01f | |||
| dc4ac07e11 | |||
| 5be4129ba9 | |||
| f75a48ccab | |||
| 2815aa4b62 | |||
| 0383b0e1c7 | |||
| 1601741495 | |||
| be1fae956b | |||
| c7557d80bb | |||
| ac28124664 | |||
| 1deaf7650e | |||
| 9074fa1b6c | |||
| 5721a615a2 | |||
| fadcf1cd41 | |||
| a50b1ac78e | |||
| 9a7d4fdb36 | |||
| 9fb51a689d | |||
| 65bda35001 | |||
| 443ded86a5 | |||
| 83b5ebb02c | |||
| 240d8f6b6c | |||
| 39c5422341 | |||
| 4893a2b743 | |||
| 3408ea97f4 | |||
| ddb17f61cb | |||
| bbe182cf82 | |||
| b7b7bdf19b | |||
| 5681938a9e | |||
| 74835dcef5 | |||
| ed0dc05366 | |||
| 653eb8320a | |||
| 54b9c4370b | |||
| fa9cb3903c | |||
| 0f1d8500d1 | |||
| 20d7fd2c03 | |||
| 1d838344dc | |||
| fd826199e2 | |||
| f485d90ef2 | |||
| ec39e67a09 | |||
| 1a86db0a8b | |||
| 6a1fada22f | |||
| 2898e06246 | |||
| 0d87c65b49 | |||
| 9b97cdfcd1 | |||
| 95feae846a | |||
| b09eeaede3 | |||
| 35dec1634c | |||
| e49a425106 | |||
| adbad04867 | |||
| 850bd2f887 | |||
| d240b457e2 | |||
| 6d800caab1 | |||
| 7bf153db39 | |||
| 1b69f29751 | |||
| dfc3837739 | |||
| 30e847866e | |||
| fbc902e830 | |||
| 208f1d71ba | |||
| 38a15a96b3 | |||
| 46f8753746 | |||
| 70bc8f33b1 | |||
| 6cd27ab096 | |||
| 5581b404f7 | |||
| 2ef74eb908 | |||
| 16c654141f | |||
| dfc785f2fd | |||
| f621cdf032 | |||
| 8b04d9c4a6 | |||
| 364b4702e3 | |||
| a98c16de28 | |||
| 881bf1982a | |||
| f340622977 | |||
| 194379295d | |||
| 901cffee97 | |||
| d93c2ec5f3 | |||
| 306522863a | |||
| e54d85e04d | |||
| cb30ad27c3 | |||
| 8685c9cc88 | |||
| a6f03d0f23 | |||
| e3c812b155 | |||
| f149de9ce3 | |||
| 3447dd2569 | |||
| b2b8c7fd54 | |||
| 486bcd0aec | |||
| c8a33201f5 | |||
| 4a37c2cc7e | |||
| d23db5bafd | |||
| ac528f9a10 | |||
| 256eadd49d | |||
| 64e58934a5 | |||
| 92dfadfdba | |||
| cbce70143b | |||
| f4b9e3159e | |||
| 928781391d | |||
| 05cd672464 | |||
| d3109bbc37 | |||
| eabdb7c721 | |||
| ad990e8cd7 | |||
| db3eef0104 | |||
| c4f1ba7962 | |||
| 7451fbd413 | |||
| b6c55de55a | |||
| dd3ee6d99e | |||
| bbb6a7c22c | |||
| dc1b50a7bf | |||
| 21bfb88e0b | |||
| aaab8adce9 | |||
| df502f835c | |||
| dd6a4cd153 | |||
| 76656997ef | |||
| 32070a0bd6 | |||
| b9420d4dde | |||
| 1b810e1294 | |||
| f16d59bff6 | |||
| b5bf3aadc5 | |||
| f6a27a1522 | |||
| 83758fcd72 | |||
| 070917bc0b | |||
| 543a04dfdd | |||
| b4d5eb0eec | |||
| 9f84cc4952 | |||
| 09fe35f1ca | |||
| 27e50b2dd9 | |||
| 971460848b | |||
| 8bc2937bb4 | |||
| 0e9b68c2a1 | |||
| ba298c2afb | |||
| 79f5ed4dc3 | |||
| bbb2f874ee | |||
| 9af3759b07 | |||
| 1f6fe6bf0c | |||
| 7b291e85d7 | |||
| 0f72066bc0 | |||
| 70e0e7b216 | |||
| 7e50bb1b6d | |||
| a3eb107068 | |||
| 6133ef121a | |||
| c6d24e9534 | |||
| 441d3f721f | |||
| 3c212e4bcc | |||
| 50eb71bc1f | |||
| 0806821b5f | |||
| 36d0f17953 | |||
| 700adb7972 | |||
| a156369f8b | |||
| c0f6dc511b | |||
| 63e1461eba | |||
| 804e5f10c8 | |||
| 6cc7271a41 | |||
| f66194189b | |||
| 5d97d6d492 | |||
| f3a308e669 | |||
| a230504925 | |||
| 90e19e282c | |||
| b585bfe44c | |||
| 475e04eeb4 | |||
| f89b2b0efb | |||
| b94f3c176b | |||
| d1d729d287 | |||
| e23bbcc405 | |||
| 4129985b0f | |||
| 5cb7b623d9 | |||
| 3c52efadd6 | |||
| 73b4977051 | |||
| 422c2c02ce | |||
| d692329975 | |||
| 931574bc11 | |||
| caddbd8501 | |||
| 8ece2c8612 | |||
| 3a219321d1 | |||
| 35cb924a17 | |||
| b67e5bbd20 | |||
| 1db275230e | |||
| 5ac72092fb | |||
| bdd9ded1e8 | |||
| 759aeb6ed6 | |||
| 12023d51ae | |||
| c426785b90 | |||
| 09d960c7a1 | |||
| f37fe4a503 | |||
| 013e56bef0 | |||
| d6835ba766 | |||
| d7890cbc81 | |||
| 2b6886c534 | |||
| e77590a125 | |||
| ca330b2d80 | |||
| 20f1524701 | |||
| 96b2a15643 | |||
| ad59392e02 | |||
| 29f92b887c | |||
| 46328211c2 | |||
| 3760130d1f | |||
| 1094827fac | |||
| 36fcb44af5 | |||
| a683fbac4b | |||
| 64ad9019d1 | |||
| 1e80d5c8a8 | |||
| ac765b1ee8 | |||
| 850c4f0a9a | |||
| 4c32999752 | |||
| 76823b167a | |||
| 9994cfd260 | |||
| 1750236474 | |||
| fed6e31f9e | |||
| 9bafc7d4a1 | |||
| be58b48d20 | |||
| 303abac980 | |||
| d1a459efc2 | |||
| 96069e6f09 | |||
| 301a721329 | |||
| e8c6801a32 | |||
| 355f3ef614 | |||
| eaa6083586 | |||
| a0c5d02c51 | |||
| 76f9f5fc82 | |||
| 8e2598e93b | |||
| c0672c41df | |||
| 4c6601fbc5 | |||
| b99c87d1bd | |||
| 66ffbfe951 | |||
| 8cb01a1027 | |||
| 193e5eccbb | |||
| bf7fc28bb0 | |||
| e35cbc343a | |||
| 1c7b053c8c | |||
| 88cdcd4b47 | |||
| 1432fed8f9 | |||
| a14307b9a4 | |||
| 3bdce5aa08 | |||
| d7526f93b8 | |||
| 8932578b90 | |||
| 631ac9881d | |||
| 78334ed797 | |||
| b06da89654 | |||
| d6c2e78993 | |||
| 67d1ac551d | |||
| dcb6be717d | |||
| f2c04eec1a | |||
| a08311cf43 | |||
| 1e28f3aa86 | |||
| 426af41f2c | |||
| fd08a219f9 | |||
| 25b6aec0e9 | |||
| 3e40209d15 | |||
| 54ff94f905 | |||
| 7a4faf6b0d | |||
| 8922b00a5f | |||
| 702efa8693 | |||
| e7a8c897a3 | |||
| c59d1d87bd | |||
| a706efb8b3 | |||
| e391e83a00 | |||
| 2940bf20d8 | |||
| 081db5a58b | |||
| b34805272f | |||
| 98443dba99 | |||
| dd6e733d8c | |||
| 92d3439c3b | |||
| bd155cd600 | |||
| e14e53c0ae | |||
| 77a6a63174 | |||
| 40f2463f09 | |||
| e5d1048c8d | |||
| bf3b529fb2 | |||
| d0fde46027 | |||
| 0f348dff10 | |||
| d3f5080e73 | |||
| a453c8ec1e | |||
| 2a60aa8f59 | |||
| 41e7870509 | |||
| 57f66b77ab | |||
| 53572406e9 | |||
| a288255ab1 | |||
| 353c958ae0 | |||
| bc5ab0d7e5 | |||
| 9d915b5640 | |||
| 3aaee270eb | |||
| d53a7156e2 | |||
| 3af24ea3d0 | |||
| 5483212b06 | |||
| 419279fe5e | |||
| 501e899b27 | |||
| 3bb9edb009 | |||
| e52b1188a3 | |||
| 9e877e4762 | |||
| 5711757110 | |||
| e1c33dad43 | |||
| 4b2400774c | |||
| afd4a59622 | |||
| bdce437470 | |||
| 33479cda11 | |||
| 385cee3dc7 | |||
| d0bbd7655b | |||
| a83b8f62fe | |||
| 0cd9176703 | |||
| d8e526923d | |||
| 3a6f417662 | |||
| 7d807a7f11 | |||
| e9d5718495 | |||
| 0dd7f74a11 | |||
| 9bd4ba489c | |||
| dd55b50dad | |||
| 1719d21a5b | |||
| 75ef8d99d4 | |||
| ae06fd1680 | |||
| 2b03f7dea8 | |||
| 7591b012b4 | |||
| 0e089f49f3 | |||
| 5ad1856b13 | |||
| 965dbbe829 | |||
| 262c9886df | |||
| ac5a9ea65d | |||
| ed9b4c8f3d | |||
| 209aa6a8a5 | |||
| 81ee6ac1fa | |||
| 024dd603cb | |||
| 50654c6baf | |||
| 8c9bf60fc6 | |||
| a83eb0b983 | |||
| ab3cbfea0f | |||
| c93e5ca1a6 | |||
| c2841092da | |||
| 8b11e1d611 | |||
| 6375a851b2 | |||
| f21200a7ec | |||
| 5752cebdec | |||
| fa6329c157 | |||
| 98a9884798 | |||
| 1f7f615411 | |||
| a79345ccf9 | |||
| 732e0e76f9 | |||
| 63d29f2097 | |||
| 9dd2f7d1c1 | |||
| afd25363b3 | |||
| 2eb5a42099 | |||
| 9c753034b4 | |||
| 95b7c701a2 | |||
| 56685a9dec | |||
| 45b13ea813 | |||
| b0feed84bb | |||
| 0e2da83e1f | |||
| fa364a150d | |||
| 6ec78d77a9 | |||
| 8853bb5408 | |||
| e4d6355875 | |||
| 1e08d72cc9 | |||
| ea82d2df94 | |||
| 71c0114f8f | |||
| a3955c7c37 | |||
| e610b70590 | |||
| 7f4d47d7b5 | |||
| fd27ec11a2 | |||
| 2aa036f3aa | |||
| 2c49a4f3f1 | |||
| 10e4a52947 | |||
| 9f3936e180 | |||
| a3a76ce0c3 | |||
| 545db52f94 | |||
| bfa02a97ee | |||
| 3a2eeaa204 | |||
| 42b3a5dfc9 | |||
| b5cb47a0c7 | |||
| 443e069a13 | |||
| 9c432c3110 | |||
| 79934d51ac | |||
| 496cf9145b | |||
| 264bb3746f | |||
| 7b1ccf4507 | |||
| a326265dba | |||
| 0864bc8104 | |||
| f5656470a9 | |||
| 5bc773f1aa | |||
| 6bfd8c8db8 | |||
| df2865456e | |||
| fc6d5f1f23 | |||
| 96dab8c81b | |||
| 1d13d51f0c | |||
| 87d92d25f9 | |||
| 025dee6821 | |||
| 796d086615 | |||
| bb1ef08474 | |||
| cc770d8bb4 | |||
| 8a56c262cb | |||
| c0a9958b5b | |||
| 7351cd3377 | |||
| 7b3d5848b9 | |||
| 0f311e062e | |||
| 57930a8d86 |
@@ -0,0 +1,4 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
liberapay: dennis.guse
|
||||||
|
custom: https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Report issues of OpenTracks features
|
||||||
|
title: ''
|
||||||
|
labels: potential bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
If applicable:
|
||||||
|
* add screenshots
|
||||||
|
* add logcat output
|
||||||
|
|
||||||
|
**Technical information**
|
||||||
|
- Device: [e.g. Nexus 7 (2013)]
|
||||||
|
- OS: [e.g. LineageOS 15.1]
|
||||||
|
- Version [e.g. v3.2.4]
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for OpenTracks
|
||||||
|
title: ''
|
||||||
|
labels: enhancement
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Thanks for your contribution.
|
||||||
|
|
||||||
|
**Describe the pull request**
|
||||||
|
A clear and concise description of what the pull request changes/adds.
|
||||||
|
|
||||||
|
**Link to the the issue**
|
||||||
|
(If available): The link to the issue that this pull request solves.
|
||||||
|
|
||||||
|
**License agreement**
|
||||||
|
By opening this pull request, you are providing your contribution under the _Apache License 2.0_ (see [LICENSE.md](LICENSE.md)).
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#https://github.com/marketplace/actions/android-emulator-runner
|
||||||
|
name: Test
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: macos-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
api-level: [29]
|
||||||
|
target: [default]
|
||||||
|
steps:
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: run tests
|
||||||
|
uses: reactivecircus/android-emulator-runner@v2
|
||||||
|
with:
|
||||||
|
api-level: ${{ matrix.api-level }}
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
arch: x86_64
|
||||||
|
script: ./gradlew connectedCheck
|
||||||
@@ -45,19 +45,16 @@ captures/
|
|||||||
|
|
||||||
|
|
||||||
# IntelliJ IDEA
|
# IntelliJ IDEA
|
||||||
*.iml
|
|
||||||
*.iws
|
*.iws
|
||||||
/out/
|
/out/
|
||||||
|
|
||||||
# User-specific configurations
|
# User-specific configurations
|
||||||
.idea/.name
|
.idea/.name
|
||||||
.idea/assetWizardSettings.xml
|
|
||||||
.idea/caches/
|
.idea/caches/
|
||||||
.idea/compiler.xml
|
.idea/compiler.xml
|
||||||
.idea/copyright/profiles_settings.xml
|
.idea/copyright/profiles_settings.xml
|
||||||
.idea/dataSources.ids
|
.idea/dataSources.ids
|
||||||
.idea/datasources.xml
|
.idea/datasources.xml
|
||||||
.idea/dictionaries
|
|
||||||
.idea/dynamic.xml
|
.idea/dynamic.xml
|
||||||
.idea/encodings.xml
|
.idea/encodings.xml
|
||||||
.idea/jsLibraryMappings.xml
|
.idea/jsLibraryMappings.xml
|
||||||
@@ -67,14 +64,16 @@ captures/
|
|||||||
.idea/scopes/scope_settings.xml
|
.idea/scopes/scope_settings.xml
|
||||||
.idea/shelf/
|
.idea/shelf/
|
||||||
.idea/sqlDataSources.xml
|
.idea/sqlDataSources.xml
|
||||||
.idea/tasks.xml
|
|
||||||
.idea/vcs.xml
|
.idea/vcs.xml
|
||||||
.idea/uiDesigner.xml
|
.idea/uiDesigner.xml
|
||||||
.idea/workspace.xml
|
|
||||||
|
|
||||||
# Keystore files
|
# Keystore files
|
||||||
# Uncomment the following line if you do not want to check your keystore files in.
|
*.jks
|
||||||
#*.jks
|
|
||||||
|
|
||||||
# External native build folder generated in Android Studio 2.2 and later
|
# External native build folder generated in Android Studio 2.2 and later
|
||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
|
|
||||||
|
# Fastlane
|
||||||
|
Appfile
|
||||||
|
releasePlayStore/*
|
||||||
|
Gemfile.lock
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RenderSettings">
|
||||||
|
<option name="showDecorations" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
language: android
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
android:
|
|
||||||
components:
|
|
||||||
- build-tools-28.0.3
|
|
||||||
- android-29
|
|
||||||
|
|
||||||
script:
|
|
||||||
- ./gradlew build
|
|
||||||
#TODO: When all tests are passing, CI should also execute them.
|
|
||||||
#- ./gradlew connectedCheck
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# OpenTrack: Developer information
|
|
||||||
|
|
||||||
## Create releases for FDroid
|
|
||||||
|
|
||||||
1. Get next _version code_ (master branch): `git rev-list HEAD --count master`
|
|
||||||
2. Decide on _version name_ (semantic versioning)
|
|
||||||
3. Manually update _version code_ and _version name_ in `AndroidManifest.xml` (used by FDroid)
|
|
||||||
4. Create changelog (`_version code_.txt`)
|
|
||||||
5. Create commit with all changes
|
|
||||||
6. Push commits
|
|
||||||
7. Tag newly create commit with _version name_
|
|
||||||
8. Push the tagged to public repository
|
|
||||||
@@ -1,30 +1,79 @@
|
|||||||
# OpenTracks: a sport tracker
|
# <img src="drawable-svg/LOGO.svg" alt="OpenTracks logo" height="40"></img> OpenTracks: a sport tracker
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_OpenTracks_ is a sport tracking application that completely respects your privacy.
|
_OpenTracks_ is a sport tracking application that completely respects your privacy.
|
||||||
|
|
||||||
<a href="https://liberapay.com/dennis.guse/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Free</th>
|
||||||
|
<th>Paid (same as free)</th>
|
||||||
|
<th>Donations</th>
|
||||||
|
<th>Translations</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="https://f-droid.org/packages/de.dennisguse.opentracks">
|
||||||
|
<img alt="Get it on F-Droid" src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" height="60" align="middle">
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore">
|
||||||
|
<img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" height="60" align="middle">
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="https://liberapay.com/dennis.guse/donate">
|
||||||
|
<img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg" height="45" align="middle">
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="https://www.transifex.com/opentracks/opentracks/">
|
||||||
|
Transifex
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
## Features:
|
## Features:
|
||||||
* __Tracking:__ track your sport and outdoor activities
|
* __Tracking:__ track your sport and outdoor activities
|
||||||
* __Photos and Markers:__ mark interesting locations while tracking
|
* __Photos and Markers:__ mark interesting locations while tracking (also with photos)
|
||||||
* __Heart rate:__ supports bluetooth LE sensors
|
* __Bluetooth LE sensors:__
|
||||||
* __Export data:__ Export tracks either as KML or GPX
|
* heart rate
|
||||||
* __Voice annoucements__
|
* cycling: speed and cadence
|
||||||
|
* __Export data:__ export tracks either as KMZ (incl. photos), KML or GPX
|
||||||
* __No Internet access:__ Internet is not used
|
* __No Internet access:__ Internet is not used
|
||||||
|
* __Voice announcements__
|
||||||
* __No advertising__
|
* __No advertising__
|
||||||
* __Privacy:__
|
* __Privacy:__
|
||||||
* _contains in-app analytics_
|
* _does not contain any in-app analytics_
|
||||||
* _does not have Google Play Services_
|
* _does not use Google Play Services_
|
||||||
* _has no cloud integration_
|
* _has no cloud integration_
|
||||||
|
|
||||||
__Only required permissions:__
|
__Only required permissions:__
|
||||||
* _ACCESS_FINE_LOCATION_: required to use the GPS.
|
* _ACCESS_FINE_LOCATION_: required to use the GPS.
|
||||||
|
|
||||||
|
An overview of Bluetooth LE sensors that are known to work with OpenTracks is in [README_TESTED_SENSORS.md](README_TESTED_SENSORS.md).
|
||||||
|
|
||||||
_Please note:_
|
_Please note:_
|
||||||
_Tracks_ does not contain a _map_ (as this would required Internet access).
|
_OpenTracks_ does not contain a _map_ (as this would required Internet access).
|
||||||
To show your tracks on a map, a 3rd party application (e.g., [OsmAnd](https://play.google.com/store/apps/details?id=net.osmand) or [MAPS.ME](https://play.google.com/store/apps/details?id=com.mapswithme.maps.pro)) needs to be installed.
|
|
||||||
|
## Custom Dashboards (incl. Map)
|
||||||
|
As of v3.3.1 OpenTracks enables to use custom dashboards.
|
||||||
|
The reference implementation is [OSMDashboard](https://github.com/OpenTracksApp/OSMDashboard), which presents an OpenStreetMap map (showing the current track, incl. updates).
|
||||||
|
The developer documentation is in [README_API.md](README_API.md).
|
||||||
|
|
||||||
|
Alternatively, recorded tracks can be shared as KMZ/GPX to installed applications (e.g., [OsmAnd](https://play.google.com/store/apps/details?id=net.osmand) or [MAPS.ME](https://play.google.com/store/apps/details?id=com.mapswithme.maps.pro)).
|
||||||
|
However, this is rather slow and does not provide updates while recording.
|
||||||
|
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
<div>
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_1.png">
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_2.png">
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_3.png">
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_4.png">
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_5.png">
|
||||||
|
<img width="15%" src="fastlane/metadata/android/en-US/phoneScreenshots/screenshot_6.png">
|
||||||
|
</div>
|
||||||
|
|
||||||
## Project history
|
## Project history
|
||||||
|
|
||||||
@@ -44,7 +93,7 @@ Rework of _OpenTracks_ included:
|
|||||||
* removing calorie estimation and activity estimation,
|
* removing calorie estimation and activity estimation,
|
||||||
* removing support for ANT+ and Classic Bluetooth,
|
* removing support for ANT+ and Classic Bluetooth,
|
||||||
* adding support for Bluetooth LE heart rate sensors,
|
* adding support for Bluetooth LE heart rate sensors,
|
||||||
* removing Protobuf (store sensor data in SQLite columns directly), and
|
* removing Protobuf (store sensosensorr data in SQLite columns directly), and
|
||||||
* removing Android Service API for other apps.
|
* removing Android Service API for other apps.
|
||||||
|
|
||||||
Artwork, logos and user interface remained more or less unchanged.
|
Artwork, logos and user interface remained more or less unchanged.
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# OpenTracks Data API
|
||||||
|
|
||||||
|
## Reason
|
||||||
|
OpenTracks by itself only provides basic features for data visualization and also lacks functionality for analytics.
|
||||||
|
By itself OpenTracks provides a basic dashboard that can show summary of a track (while recording as well as afterwards).
|
||||||
|
Although this might be (mostly) sufficient, it has some limitations.
|
||||||
|
This include limited configurability (e.g., ordering of shown elements) and the lack of Internet access.
|
||||||
|
In fact, the later is considered a feature but severely limits the implementation presenting a map (at least in an easy way).
|
||||||
|
|
||||||
|
For the time being, the OpenTracks Data API can be used to implement mainly custom dashboards.
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
OpenTracks by default does not expose any data to 3rd-party applications.
|
||||||
|
On the request of the user (i.e., pressing a button), an Intent is created that exposes the `Track` data (it's summary), the `TrackPoint`s, and the `Waypoint`s of one or more selected tracks.
|
||||||
|
For each, one URI is provided.
|
||||||
|
These URIs notify observers if on content changes (e.g., a new `TrackPoint` was added).
|
||||||
|
|
||||||
|
Limitations:
|
||||||
|
* only tracks selected by the user are exposed,
|
||||||
|
* `Waypoints` are not exposed,
|
||||||
|
* access is only granted temporarily and automatically revoked (see `FLAG_GRANT_READ_URI_PERMISSION`),
|
||||||
|
* no write access is possible, and
|
||||||
|
* neither track recordings can be started, paused, or stopped.
|
||||||
|
|
||||||
|
All required information can be found in `IntentDashboardUtils.java`.
|
||||||
|
|
||||||
|
A _reference implementation_ is the [OSMDashboard](https://github.com/OpenTracksApp/OSMDashboard).
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# OpenTracks: Developer information
|
||||||
|
|
||||||
|
## Craft new releases
|
||||||
|
|
||||||
|
1. Get next _version code_ (main): `git rev-list HEAD --count main`
|
||||||
|
2. Decide on _version name_ (semantic versioning)
|
||||||
|
3. Manually update _version code_ and _version name_ in `build.gradle`
|
||||||
|
4. Create changelog (`_version code_.txt`)
|
||||||
|
5. Create commit with all changes
|
||||||
|
6. Tag newly create commit with _version name_ (e.g., v3.2.1)
|
||||||
|
7. Push commits and tags to public repository
|
||||||
|
8. Add changelog to tag (Github releases)
|
||||||
|
|
||||||
|
## F-Droid
|
||||||
|
Application id: de.dennisguse.opentracks
|
||||||
|
|
||||||
|
It if it properly tagged F-Droid takes care of building the app and publishing.
|
||||||
|
Usually, it takes two days before the update is published (build, signed, and published).
|
||||||
|
|
||||||
|
The recent build activity can be found [here](https://f-droid.org/wiki/index.php?title=Special:RecentChanges&days=7&from=&hidebots=0&hideanons=1&hideliu=1&limit=500)
|
||||||
|
|
||||||
|
## Google Play Store
|
||||||
|
Application id: de.dennisguse.opentracks.playstore
|
||||||
|
|
||||||
|
Requirement: `gem install fastlane`
|
||||||
|
|
||||||
|
1. Build signed apk
|
||||||
|
(requires keystore)
|
||||||
|
2. Upload signed apk to [Google Play Console](https://play.google.com/apps/publish)
|
||||||
|
3. Update store meta data (e.g., description and screenshots)
|
||||||
|
`fastlane supply --version_code VERSION_CODE --skip_upload_apk`
|
||||||
|
(use the version code from the manifest)
|
||||||
|
(requires API key)
|
||||||
|
|
||||||
|
## Translations (localization)
|
||||||
|
|
||||||
|
Translations of the OpenTracks are handled in Transifex: [https://www.transifex.com/opentracks](https://www.transifex.com/opentracks/).
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Overview of tested Bluetooth LE sensors
|
||||||
|
|
||||||
|
## HRS: Heartrate Service
|
||||||
|
* Decathlon|Geonaute|Kalenji Dual HRM Belt
|
||||||
|
* Polar H7
|
||||||
|
* Polar OH1
|
||||||
|
Has updatable firmware that requires a user account at polar.com
|
||||||
|
* Wahoo Tickr (Model: WFBTHR02)
|
||||||
|
|
||||||
|
## CSCP: Cycling Cadence and Speed Service
|
||||||
|
Please note that the according to the specification these sensors _may_ provide speed as well as cadence.
|
||||||
|
However, often only one value is provided.
|
||||||
|
|
||||||
|
### Speed
|
||||||
|
* Wahoo Speed (Model: WFRPMSPD)
|
||||||
|
|
||||||
|
### Cadence
|
||||||
|
* Wahoo Cadence (Model: WFPODCAD2)
|
||||||
|
This sensor reports cadence data as speed.
|
||||||
|
A workaround is in place.
|
||||||
@@ -6,7 +6,7 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.0'
|
classpath 'com.android.tools.build:gradle:4.0.1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,28 +17,18 @@ allprojects {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def getVersionCode = { ->
|
|
||||||
try {
|
|
||||||
def stdout = new ByteArrayOutputStream()
|
|
||||||
exec {
|
|
||||||
commandLine 'git', 'rev-list', 'HEAD', '--count'
|
|
||||||
standardOutput = stdout
|
|
||||||
}
|
|
||||||
return Integer.parseInt(stdout.toString().trim())
|
|
||||||
}
|
|
||||||
catch (ignored) {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def getVersionName = { ->
|
def getVersionName = { ->
|
||||||
try {
|
try {
|
||||||
def stdout = new ByteArrayOutputStream()
|
def stdout = new ByteArrayOutputStream()
|
||||||
exec {
|
exec {
|
||||||
commandLine 'git', 'describe', '--tags', '--dirty'
|
commandLine 'git', 'describe', '--tags'
|
||||||
standardOutput = stdout
|
standardOutput = stdout
|
||||||
}
|
}
|
||||||
return stdout.toString().trim()
|
exec {
|
||||||
|
commandLine 'git', 'log', '--format="%h"', '-n 1'
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
return stdout.toString().replace('\n', '-').replace('"', '').trim()
|
||||||
}
|
}
|
||||||
catch (ignored) {
|
catch (ignored) {
|
||||||
return null
|
return null
|
||||||
@@ -46,17 +36,29 @@ def getVersionName = { ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
compileSdkVersion 30
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "de.dennisguse.opentracks"
|
applicationId "de.dennisguse.opentracks"
|
||||||
//Useful for debugging.
|
manifestPlaceholders = [
|
||||||
//versionCode getVersionCode()
|
applicationLogo: "@mipmap/ic_launcher",
|
||||||
|
applicationName: "@string/app_name"
|
||||||
|
]
|
||||||
|
|
||||||
|
versionCode 3474
|
||||||
|
versionName "v3.8.1"
|
||||||
|
|
||||||
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
@@ -65,36 +67,37 @@ android {
|
|||||||
debug {
|
debug {
|
||||||
applicationIdSuffix ".debug"
|
applicationIdSuffix ".debug"
|
||||||
versionNameSuffix "-debug"
|
versionNameSuffix "-debug"
|
||||||
|
manifestPlaceholders = [
|
||||||
|
applicationLogo: "@mipmap/ic_launcher_debug",
|
||||||
|
applicationName: "OpenTracks (Debug)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
releasePlayStore {
|
||||||
|
applicationIdSuffix ".playstore"
|
||||||
|
versionNameSuffix "-PlayStore"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
variant.resValue "string", "applicationId", variant.applicationId
|
variant.resValue "string", "applicationId", variant.applicationId
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Should be removed (when LINT does not throw any errors).
|
|
||||||
lintOptions {
|
|
||||||
abortOnError false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.2'
|
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||||
|
implementation 'androidx.preference:preference:1.1.1'
|
||||||
|
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||||
|
implementation 'com.google.android.material:material:1.1.0'
|
||||||
|
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||||
|
|
||||||
androidTestImplementation 'androidx.test:core:1.2.0'
|
androidTestImplementation 'androidx.test:core:1.2.0'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'
|
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||||
androidTestImplementation 'androidx.test:rules:1.2.0'
|
androidTestImplementation 'androidx.test:rules:1.2.0'
|
||||||
androidTestImplementation 'androidx.test:runner:1.2.0'
|
androidTestImplementation 'androidx.test:runner:1.2.0'
|
||||||
androidTestImplementation 'org.mockito:mockito-android:3.0.0'
|
androidTestImplementation 'org.mockito:mockito-android:3.4.4'
|
||||||
|
|
||||||
testImplementation 'androidx.test:core:1.2.0'
|
|
||||||
testImplementation 'org.mockito:mockito-core:3.0.0'
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
@startuml
|
||||||
|
title
|
||||||
|
State of OpenTracks
|
||||||
|
end title
|
||||||
|
|
||||||
|
legend right
|
||||||
|
SettingsActivity can be reached
|
||||||
|
from every activity showing a menu.
|
||||||
|
endlegend
|
||||||
|
|
||||||
|
[*] --> TrackListActivity
|
||||||
|
TrackListActivity --> TrackRecordingActivity : Start recording
|
||||||
|
TrackListActivity --> SearchListActivity
|
||||||
|
TrackListActivity --> MarkerListActivity : Show all markers
|
||||||
|
TrackListActivity --> AggregatedStatisticsActivity : Aggregated stats
|
||||||
|
TrackListActivity --> TrackRecordedActivity : Show track
|
||||||
|
TrackListActivity --> TrackDeleteActivity
|
||||||
|
|
||||||
|
SearchListActivity --> MarkerDetailActivity : Search result
|
||||||
|
SearchListActivity --> TrackRecordedActivity : Search result
|
||||||
|
|
||||||
|
TrackRecordedActivity --> TrackDeleteActivity
|
||||||
|
TrackRecordedActivity --> TrackEditActivity
|
||||||
|
TrackRecordedActivity --> MarkerListActivity
|
||||||
|
TrackRecordedActivity --> MarkerEditActivity : Add marker
|
||||||
|
TrackRecordedActivity --> CameraIntent : Add marker (with photo)
|
||||||
|
TrackRecordedActivity --> ShareFileIntent
|
||||||
|
TrackRecordedActivity --> DashboardIntent : Database cursor
|
||||||
|
TrackRecordedActivity --> TrackOnMapIntent : KMZ
|
||||||
|
TrackRecordedActivity --> TrackRecordingActivity
|
||||||
|
TrackRecordedActivity --> SettingsActivity
|
||||||
|
TrackRecordedActivity --> TrackListActivity : Back button
|
||||||
|
|
||||||
|
TrackRecordingActivity --> TrackOnMapIntent
|
||||||
|
TrackRecordingActivity --> MarkerEditActivity : Add marker
|
||||||
|
TrackRecordingActivity --> MarkerListActivity
|
||||||
|
TrackRecordingActivity --> TrackEditActivity
|
||||||
|
TrackRecordingActivity --> SettingsActivity
|
||||||
|
TrackRecordingActivity --> TrackRecordedActivity : Stop recording
|
||||||
|
TrackRecordingActivity --> TrackListActivity : Back button
|
||||||
|
|
||||||
|
MarkerListActivity --> MarkerDetailActivity
|
||||||
|
|
||||||
|
MarkerDetailActivity --> MarkerEditActivity
|
||||||
|
MarkerDetailActivity --> CoordinateOnMapIntent : URI
|
||||||
|
|
||||||
|
SettingsActivity --> AboutActivity
|
||||||
|
SettingsActivity --> HelpActivity
|
||||||
|
SettingsActivity --> ExportActivity
|
||||||
|
SettingsActivity --> DirectoryChooserActivity
|
||||||
|
SettingsActivity --> DirectoryChooserActivity
|
||||||
|
DirectoryChooserActivity$ImportDirectoryChooserActivity --> ImportActivity
|
||||||
|
DirectoryChooserActivity$ExportDirectoryChooserActivity --> ExportActivity
|
||||||
|
|
||||||
|
@enduml
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
@startuml
|
||||||
|
SensorManager --> ElevationSumManager
|
||||||
|
LocationManager --> TrackRecordingService
|
||||||
|
ElevationSumManager --> TrackRecordingService
|
||||||
|
|
||||||
|
TrackRecordingService --> TrackRecordingServiceConnection
|
||||||
|
TrackRecordingService --> Database
|
||||||
|
|
||||||
|
Database --> CustomContentProvider
|
||||||
|
CustomContentProvider --> TrackDataHub
|
||||||
|
CustomContentProvider --> ShareContentProvider
|
||||||
|
TrackDataHub --> StatisticsRecordingFragment : TrackPoints, TrackStatistics, Waypoints (push)
|
||||||
|
TrackDataHub --> StatisticsRecordedFragment : TrackPoints, TrackStatistics, Waypoints (push)
|
||||||
|
TrackDataHub --> ChartFragment --> ChartView
|
||||||
|
|
||||||
|
TrackRecordingServiceConnection --> StatisticsRecordingFragment : Sensor data (heartrate, cadence, elevation gain; pull 1s)
|
||||||
|
TrackRecordingServiceConnection --> TrackController : Start time (pull, onStart)
|
||||||
|
@enduml
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
@startuml
|
||||||
|
class Track {
|
||||||
|
-id
|
||||||
|
-name
|
||||||
|
-description
|
||||||
|
-category
|
||||||
|
-numberOfPoints
|
||||||
|
-icon
|
||||||
|
}
|
||||||
|
Track o-- TrackPoint
|
||||||
|
Track o-- Waypoint
|
||||||
|
Track "1" - "1" TripStatistics
|
||||||
|
|
||||||
|
class TripStatistics {
|
||||||
|
- startTime
|
||||||
|
- stopTime
|
||||||
|
- totalDistance
|
||||||
|
- totalTime
|
||||||
|
- movingTime
|
||||||
|
- maxSpeed
|
||||||
|
- totalElevationGain
|
||||||
|
}
|
||||||
|
|
||||||
|
class TrackPoint extends android.location.Location {
|
||||||
|
- id
|
||||||
|
- trackId
|
||||||
|
- longitude
|
||||||
|
- latitude
|
||||||
|
- time
|
||||||
|
- altitude
|
||||||
|
- accuracy
|
||||||
|
- speed
|
||||||
|
- bearing
|
||||||
|
- sensor_heartrate
|
||||||
|
- sensor_cadence
|
||||||
|
- sensor_power
|
||||||
|
}
|
||||||
|
|
||||||
|
class Waypoint {
|
||||||
|
- id
|
||||||
|
- trackId
|
||||||
|
- name
|
||||||
|
- description
|
||||||
|
- category
|
||||||
|
- icon
|
||||||
|
- length
|
||||||
|
- duration
|
||||||
|
- location
|
||||||
|
- tripStatistics
|
||||||
|
- photoUrl
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
<?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>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,71 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
height="125"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="ic_button_pause.svg">
|
||||||
|
<defs id="defs6" />
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1">
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#a31a1f;stroke-width:5.03185225;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path12"
|
||||||
|
r="59.984074" />
|
||||||
|
<rect
|
||||||
|
style="fill:#efefef;fill-opacity:0.87843137;stroke:none;stroke-width:4.82273912;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="17.940611"
|
||||||
|
id="rect837"
|
||||||
|
width="5"
|
||||||
|
x="54"
|
||||||
|
y="54.059391" />
|
||||||
|
<rect
|
||||||
|
style="fill:#efefef;fill-opacity:0.87843137;stroke:none;stroke-width:4.82273865;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="17.940611"
|
||||||
|
id="rect837-3"
|
||||||
|
width="5"
|
||||||
|
x="66"
|
||||||
|
y="54" />
|
||||||
|
</g>
|
||||||
|
<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>
|
||||||
|
<sodipodi:namedview
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
id="namedview4"
|
||||||
|
objecttolerance="10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:cx="75.030293"
|
||||||
|
inkscape:cy="72.881196"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-height="1152"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:window-width="2048"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:zoom="5.3400704" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,49 @@
|
|||||||
|
<?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="125"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs6" />
|
||||||
|
<g id="layer1">
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#a31a1f;stroke-width:5.03185225;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path12"
|
||||||
|
r="59.984074" />
|
||||||
|
<circle
|
||||||
|
style="fill:#414141;fill-opacity:0.4;stroke:none;stroke-width:6.9172821;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path835"
|
||||||
|
r="50" />
|
||||||
|
<rect
|
||||||
|
style="fill:#efefef;fill-opacity:0.87843137;stroke:none;stroke-width:4.82273912;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="17.940611"
|
||||||
|
id="rect837"
|
||||||
|
width="5"
|
||||||
|
x="54"
|
||||||
|
y="54.059391" />
|
||||||
|
<rect
|
||||||
|
style="fill:#efefef;fill-opacity:0.87843137;stroke:none;stroke-width:4.82273865;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="17.940611"
|
||||||
|
id="rect837-3"
|
||||||
|
width="5"
|
||||||
|
x="66"
|
||||||
|
y="54" />
|
||||||
|
</g>
|
||||||
|
<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>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
<?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="125"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs6" />
|
||||||
|
<g id="layer1">
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#a31a1f;stroke-width:5.03185225;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path12"
|
||||||
|
r="59.984074" />
|
||||||
|
<circle
|
||||||
|
style="fill:#9a191d;fill-opacity:1;stroke:none;stroke-width:6.9172821;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path835"
|
||||||
|
r="50" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#7e3b3d;stroke-width:1.62162137;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="61.500004"
|
||||||
|
id="path831"
|
||||||
|
r="9.189189" />
|
||||||
|
</g>
|
||||||
|
<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>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<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="125"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
fill="none"
|
||||||
|
r="59.984"
|
||||||
|
stroke="#a31a1f"
|
||||||
|
stroke-width="5.0319" />
|
||||||
|
<circle
|
||||||
|
cx="62.5"
|
||||||
|
cy="-62.5"
|
||||||
|
fill="url(#linearGradient934)"
|
||||||
|
r="50"
|
||||||
|
transform="rotate(90)" />
|
||||||
|
<circle
|
||||||
|
cx="62.5"
|
||||||
|
cy="61.5"
|
||||||
|
fill="#fff"
|
||||||
|
r="9.1892"
|
||||||
|
stroke="#7e3b3d"
|
||||||
|
stroke-width="1.6216" />
|
||||||
|
<defs>
|
||||||
|
<linearGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient934"
|
||||||
|
x1="12.5"
|
||||||
|
x2="112.5"
|
||||||
|
y1="-62.5"
|
||||||
|
y2="-62.5">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
stop-color="#721212" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
stop-color="#a21a1f" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<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>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,54 @@
|
|||||||
|
<?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:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
height="125"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs6">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient884"
|
||||||
|
osb:paint="solid">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#969696;stop-opacity:1;"
|
||||||
|
id="stop882"
|
||||||
|
offset="0" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="layer1">
|
||||||
|
<circle
|
||||||
|
style="fill:#484848;fill-opacity:1;stroke:none;stroke-width:6.9172821;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
id="path835"
|
||||||
|
r="50" />
|
||||||
|
<ellipse
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#555555;stroke-width:5.03194237;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="62.502243"
|
||||||
|
cy="63.029659"
|
||||||
|
id="path12"
|
||||||
|
rx="59.986229"
|
||||||
|
ry="59.984074"
|
||||||
|
transform="matrix(0.99996409,-0.00847427,0,1,0,0)" />
|
||||||
|
</g>
|
||||||
|
<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>
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#414141;stroke-width:1.04023623;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="17.459764"
|
||||||
|
id="rect844"
|
||||||
|
width="17.459761"
|
||||||
|
x="53.020119"
|
||||||
|
y="54.020119" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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="125"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle
|
||||||
|
cx="62.5"
|
||||||
|
cy="62.5"
|
||||||
|
fill="#2a2a2a"
|
||||||
|
r="50" />
|
||||||
|
<ellipse
|
||||||
|
cx="62.502"
|
||||||
|
cy="63.03"
|
||||||
|
fill="none"
|
||||||
|
rx="59.986"
|
||||||
|
ry="59.984"
|
||||||
|
stroke="#2a2a2a"
|
||||||
|
stroke-width="5.0319"
|
||||||
|
transform="matrix(.99996 -.0084743 0 1 0 0)" />
|
||||||
|
<metadata>
|
||||||
|
<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>
|
||||||
|
<rect
|
||||||
|
fill="#555"
|
||||||
|
height="15"
|
||||||
|
width="15"
|
||||||
|
x="54"
|
||||||
|
y="56" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1022 B |
@@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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="125"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 125 125"
|
||||||
|
width="125"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle
|
||||||
|
cx="62.5"
|
||||||
|
cy="-62.5"
|
||||||
|
fill="url(#linearGradient1053)"
|
||||||
|
r="50"
|
||||||
|
transform="rotate(90)" />
|
||||||
|
<defs>
|
||||||
|
<linearGradient
|
||||||
|
gradientTransform="translate(0,-125)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient1053"
|
||||||
|
x1="12.5"
|
||||||
|
x2="112.5"
|
||||||
|
y1="62.5"
|
||||||
|
y2="62.5">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
stop-color="#404040" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
stop-color="#555" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<ellipse
|
||||||
|
cx="62.502"
|
||||||
|
cy="63.03"
|
||||||
|
fill="none"
|
||||||
|
rx="59.986"
|
||||||
|
ry="59.984"
|
||||||
|
stroke="#555"
|
||||||
|
stroke-width="5.0319"
|
||||||
|
transform="matrix(.99996 -.0084743 0 1 0 0)" />
|
||||||
|
<metadata>
|
||||||
|
<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>
|
||||||
|
<rect
|
||||||
|
fill="#dbdbdb"
|
||||||
|
height="17.46"
|
||||||
|
stroke="#414141"
|
||||||
|
stroke-width="1.0402"
|
||||||
|
width="17.46"
|
||||||
|
x="53.02"
|
||||||
|
y="54.02" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,116 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="210mm"
|
||||||
|
height="297mm"
|
||||||
|
viewBox="0 0 210 297"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
sodipodi:docname="ic_marker_orange_pushpin_with_shadow.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient871"
|
||||||
|
|
||||||
|
x1="91.712517"
|
||||||
|
y1="266.48581"
|
||||||
|
x2="95.902588"
|
||||||
|
y2="266.72339"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="rotate(22.027833,208.46275,168.26892)"
|
||||||
|
|
||||||
|
|
||||||
|
>
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop867" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#898d8d;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop869" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.49497475"
|
||||||
|
inkscape:cx="298.98541"
|
||||||
|
inkscape:cy="561.0427"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1012"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="1080"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
d="m 108.52826,213.29755 a 56.035402,7.0061195 5.281088 0 0 -22.425508,2.5321 56.035402,7.0061195 5.281088 0 0 -0.233576,0.17697 l -0.206706,-0.0237 c -0.04471,0.11554 -0.07454,0.2314 -0.09612,0.34752 a 56.035402,7.0061195 5.281088 0 0 0.337963,1.58159 c 0.980726,1.70884 3.760629,3.46326 6.583579,5.2188 l -22.744347,15.50009 a 67.064653,11.556784 4.2275244 0 0 -39.967588,5.26867 67.064653,11.556784 4.2275244 0 0 -0.729154,0.57564 67.064653,11.556784 4.2275244 0 0 -2.754353,1.36358 67.064653,11.556784 4.2275244 0 0 38.908736,16.04324 l -32.176847,27.0646 52.228334,-24.74551 a 67.064653,11.556784 4.2275244 0 0 71.411147,-3.8186 67.064653,11.556784 4.2275244 0 0 0.72812,-0.57507 67.064653,11.556784 4.2275244 0 0 2.75539,-1.36415 67.064653,11.556784 4.2275244 0 0 -12.38374,-10.59818 40.033569,5.0733922 5.2502179 0 0 0.0563,-0.0369 40.033569,5.0733922 5.2502179 0 0 0.37672,-0.34325 l 22.45186,-15.30075 c 8.23597,-0.65161 17.65581,-1.47811 22.94433,-3.00957 a 56.035402,7.0061195 5.281088 0 0 2.65514,-1.03772 56.035402,7.0061195 5.281088 0 0 -46.08401,-12.26953 56.035402,7.0061195 5.281088 0 0 -41.6357,-2.54991 z"
|
||||||
|
style="fill:#333333;fill-opacity:0.49421525;stroke:#000000;stroke-width:0.138931px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.265501"
|
||||||
|
id="path839" />
|
||||||
|
<path
|
||||||
|
style="fill:url(#linearGradient871);fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.265501"
|
||||||
|
d="M 70.603317,174.30832 33.024148,288.94657 94.566672,183.19473 Z"
|
||||||
|
id="path865"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<ellipse
|
||||||
|
cx="144.42586"
|
||||||
|
cy="113.06232"
|
||||||
|
rx="70.318817"
|
||||||
|
ry="39.974442"
|
||||||
|
id="ellipse26"
|
||||||
|
style="fill:#d45500;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583"
|
||||||
|
transform="rotate(22.027833)" />
|
||||||
|
<ellipse
|
||||||
|
style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583"
|
||||||
|
id="ellipse30"
|
||||||
|
ry="39.974442"
|
||||||
|
rx="70.318817"
|
||||||
|
cy="105.23625"
|
||||||
|
cx="145.017"
|
||||||
|
transform="rotate(22.027833)" />
|
||||||
|
<path
|
||||||
|
id="rect28"
|
||||||
|
style="fill:#d45500;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583"
|
||||||
|
d="m 85.662408,24.322061 c -0.890996,8.350369 2.928035,17.133472 6.825491,25.923906 l -23.333902,57.672763 -0.730686,1.80598 0.248621,0.10059 a 42.43035,17.360788 22.027833 0 0 33.303948,30.10067 42.43035,17.360788 22.027833 0 0 44.86507,1.52585 l 0.13892,0.0562 0.24519,-0.60599 a 42.43035,17.360788 22.027833 0 0 0.59472,-1.15581 42.43035,17.360788 22.027833 0 0 0.37668,-1.24514 l 22.45185,-55.492655 c 9.28986,-2.66566 20.09069,-6.13552 24.76397,-13.17485 z" />
|
||||||
|
<ellipse
|
||||||
|
style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583"
|
||||||
|
id="path24"
|
||||||
|
ry="23.966745"
|
||||||
|
rx="59.409279"
|
||||||
|
cy="-10.262156"
|
||||||
|
cx="148.14029"
|
||||||
|
transform="rotate(22.027833)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
height="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 48 48"
|
||||||
|
width="48"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="ic_track_paused.svg">
|
||||||
|
<defs id="defs6" />
|
||||||
|
<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>
|
||||||
|
<rect
|
||||||
|
style="fill:#a31a1f;fill-opacity:1;stroke-width:1.01154423"
|
||||||
|
height="20"
|
||||||
|
id="rect12"
|
||||||
|
width="5"
|
||||||
|
x="15"
|
||||||
|
y="14" />
|
||||||
|
<rect
|
||||||
|
style="fill:#a31a1f;fill-opacity:1;stroke-width:1.01154423"
|
||||||
|
height="20"
|
||||||
|
id="rect12-3"
|
||||||
|
width="5"
|
||||||
|
x="27"
|
||||||
|
y="14" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
id="namedview4"
|
||||||
|
objecttolerance="10"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:cx="21.262539"
|
||||||
|
inkscape:cy="30.645051"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-height="1152"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:window-width="2048"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:zoom="9.8333333">
|
||||||
|
<inkscape:grid
|
||||||
|
id="grid16"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,29 @@
|
|||||||
|
<?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="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 48 48"
|
||||||
|
width="48"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs6" />
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#a31a1f;fill-opacity:1;stroke-width:0.03607465"
|
||||||
|
d="m 22.92317,31.9906 c -0.06948,-0.0081 -0.277422,-0.03235 -0.46209,-0.05384 -2.147889,-0.249888 -4.249982,-1.419727 -5.59965,-3.116269 -0.961167,-1.208194 -1.554689,-2.572853 -1.795388,-4.128058 -0.08907,-0.575498 -0.08782,-1.835731 0.0024,-2.415668 0.223761,-1.438345 0.765805,-2.731082 1.632716,-3.893914 0.353204,-0.473771 1.18254,-1.30549 1.649602,-1.654344 0.947391,-0.707615 1.928391,-1.18098 3.033216,-1.463629 0.649731,-0.166221 1.126538,-0.233843 1.827948,-0.259242 1.94015,-0.07026 3.814111,0.517516 5.397189,1.692835 0.484944,0.360035 1.31879,1.186156 1.663737,1.648325 0.890877,1.193617 1.438199,2.499896 1.661736,3.966023 0.07887,0.517263 0.08854,1.773309 0.01737,2.253423 -0.23912,1.612873 -0.846098,3.039393 -1.810255,4.254461 -0.293648,0.370069 -0.946591,1.022292 -1.317069,1.315618 -1.186276,0.939234 -2.594384,1.549011 -4.122093,1.785059 -0.343493,0.05308 -1.524586,0.09902 -1.779366,0.06922 z"
|
||||||
|
id="path85" />
|
||||||
|
</g>
|
||||||
|
<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>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
# This file contains the fastlane.tools configuration
|
||||||
|
# You can find the documentation at https://docs.fastlane.tools
|
||||||
|
#
|
||||||
|
# For a list of all available actions, check out
|
||||||
|
#
|
||||||
|
# https://docs.fastlane.tools/actions
|
||||||
|
#
|
||||||
|
# For a list of all available plugins, check out
|
||||||
|
#
|
||||||
|
# https://docs.fastlane.tools/plugins/available-plugins
|
||||||
|
#
|
||||||
|
|
||||||
|
# Uncomment the line if you want fastlane to automatically update itself
|
||||||
|
# update_fastlane
|
||||||
|
|
||||||
|
default_platform(:android)
|
||||||
|
|
||||||
|
platform :android do
|
||||||
|
desc "Runs all the tests"
|
||||||
|
lane :test do
|
||||||
|
gradle(task: "test")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Submit a new Beta Build to Crashlytics Beta"
|
||||||
|
lane :beta do
|
||||||
|
gradle(task: "clean assembleRelease")
|
||||||
|
crashlytics
|
||||||
|
|
||||||
|
# sh "your_script.sh"
|
||||||
|
# You can also use other beta testing services here
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Deploy a new version to the Google Play"
|
||||||
|
lane :deploy do
|
||||||
|
gradle(task: "clean assembleRelease")
|
||||||
|
upload_to_play_store
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
OpenTracks – ein GPS-Tracker, der deine Daten für sich behält.
|
||||||
|
Erfasst deine Kilometer, ohne dass es jemand anderes tut.
|
||||||
|
|
||||||
|
Funktionen & Features:
|
||||||
|
* zeichnet Sport und andere Outdooraktivitäten auf
|
||||||
|
* unterstützt das Markieren interessanter Orte, inkl. Foto-Funktion
|
||||||
|
* zeichnet deine Herzfrequenz auf (Bluetooth LE)
|
||||||
|
* nutze beim Radfahren deine Trittfrequenz- und Geschwindigkeitssensoren (Bluetooth LE)
|
||||||
|
* exportiert deine Daten als KML oder GPX
|
||||||
|
* funktioniert ganz ohne Internet
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
OpenTracks – ein GPS-Tracker, der deine Daten für sich behält.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
v3.1.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Added show track in map apps (tested with OsmAnd and Maps.ME)
|
||||||
|
- Added while tracking, show track statistics without unlocking the device
|
||||||
|
- Removed landscape mode for track detail view (was buggy)
|
||||||
|
- Removed search suggestions history
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Request storage permission for import all/export all
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Upgrade to Gradle 5.6
|
||||||
|
- Do not minify release builds
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
v3.2.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Removed Widget
|
||||||
|
- Introduced material design icons
|
||||||
|
- Removed snowboarding and skiing (need new icons)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fixed search functionality
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Fixed (some) test cases
|
||||||
|
- Removed unused parcelable functionality
|
||||||
|
- Major cleanup and reformatting
|
||||||
|
- Do not use broadcast for app to widget communication
|
||||||
|
- stats_content.xml does not include other files
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
v3.2.1: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Settings are now on a single page
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Settings moved to Androidx compat (uses fragments)
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
v3.2.2: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Removed aggregated stats
|
||||||
|
- Migrated to Material Design
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fixed export of sensor data
|
||||||
|
- Fixed import of incomplete sensor data
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Replaced actionbar with toolbar
|
||||||
|
- Migrated to androidx appcompat (incl. Material Design)
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
v3.2.3: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Sharing: use Android Sharesheet
|
||||||
|
- Sharing: share multiple tracks as individual files
|
||||||
|
- Use Android ShareSheet
|
||||||
|
- Heart rate sensor (Bluetooth LE): automatic reconnect
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Heart rate sensor (Bluetooth LE): disconnect properly
|
||||||
|
- Heart rate wasn't always shown while recording
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Enabled TravisCI instrumentation tests
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
v3.2.4: OpenTracks
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Settings activity crashes
|
||||||
|
Removed possibility to change voice/split frequency from the context menu
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
v3.2.5: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Disable activity change
|
||||||
|
- Add permission for Android 10: recording location data
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fix reset settings
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Preferences
|
||||||
|
- if Settings cannot be loaded reset all preferences
|
||||||
|
- moved access to preferences to PreferencesUtil
|
||||||
|
- moved default of preferences from code to xml
|
||||||
|
- use SummaryProvider
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
v3.2.6: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Heart rate monitor: scan for available devices
|
||||||
|
- Remove shortcut to Bluetooth settings
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Preferences: moved default of preferences from code to xml
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
v3.2.7: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Notification show GPS accuracy
|
||||||
|
- Show heads-up notification if GPS accuracy drops beyond threshold
|
||||||
|
- Always show chart by time as well as by distance
|
||||||
|
- Added help (in Settings)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- TrackDetailActivity: disabled non-working landscape mode (temporary)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
v3.2.8: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Chart: zoom via gestures
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Export via KMZ did not export picture filenames correctly
|
||||||
|
- Sharing multiple tracks did not include KMZ files
|
||||||
|
- MarkerDetailActivity's UI was not shown
|
||||||
|
- Settings crashed if preference of heart rate was not initialized
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
v3.2.9: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Option to keep screen on while recording
|
||||||
|
- Markers: removed split markers completely
|
||||||
|
- Voice announcement now work without READ_PHONE_STATE permission
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Statistics: heart rate was not shown
|
||||||
|
- Statistics: time was briefly reset to 0s
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
v3.2.10: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- ChartView is not configurable anymore
|
||||||
|
- After reboot: removed automatic restart of an unfinished recording
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Speech announcements use MAY_DUCK (again)
|
||||||
|
- ChartView shows markers (again)
|
||||||
|
- Fixed landscape layout of TrackListActivity
|
||||||
|
- Request legacy file API behavior (necessary for Android 10)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
v3.2.11: OpenTracks
|
||||||
|
|
||||||
|
Bug:
|
||||||
|
- Max speed is identical to avg speed
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Crash on heart rate sensor selection
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Replaced TabHost by TabsLayout
|
||||||
|
- Removed special first waypoint
|
||||||
|
- Removed duplicate translations
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
v3.3.0: OpenTracks
|
||||||
|
|
||||||
|
Breaking changes:
|
||||||
|
- Pictures are now stored in app-private storage (do not show up other picture apps)
|
||||||
|
NOTE: Pictures taking with previous version cannot be shown
|
||||||
|
- Localization for Spanish (Latin America) only works on Android 7.0 or later
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Import/Export via Storage Access Framework (avoids READ/WRITE_EXTERNAL_STORAGE permission)
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Cleaned internal data structures
|
||||||
|
- Use separate icons/app names for debug version
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
v3.3.1: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Android 10: on uninstall allow to keep app data
|
||||||
|
- Introduced Dashboard API: map icon can be used to open current track in external app
|
||||||
|
(requires installation of another app like OSMDashboard)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- App label was broken (introduced in v3.3.0)
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Documentation for Dashboard API can be found in README_DEVELOPER.md
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
v3.3.2: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Export: overwrites files now
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Always remove recording notification
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- On API 26+ java.time is used for parsing and writing dates
|
||||||
|
- Refactoring of TrackRecordingService
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
v3.4.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Dashboard API: multiple tracks
|
||||||
|
- Updated help
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fixed crash on fragment re-creation
|
||||||
|
- When paused: prevent stopping app
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Enable testing via CI (Github Actions and TravisCI)
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
v3.5.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Marker: select pictures from gallery
|
||||||
|
- Marker: share picture
|
||||||
|
- Use track name as filename when sharing
|
||||||
|
- Removed elevation min/max (was imprecise)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Charts use preferred units and rate
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Database: remove unused columns
|
||||||
|
- Database: add indices
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
v3.6.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Stopped tracks can now be resumed
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Import of KMZ did not process the photo URL correctly
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Simplified data processing
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
v3.6.1: OpenTracks
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- KMZ import: store correct picture path
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
v3.6.2: OpenTracks
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Charts were not shown correctly (introduced in v3.6.0)
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
v3.7.0: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Report speed/pace by activity type
|
||||||
|
- Added workaround for GPS week rollover
|
||||||
|
- (Experimental) Support for Bluetooth LE cycling sensors (cadence and speed)
|
||||||
|
- KMZ/KML import enhanced
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- KMZ import: only import used images
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Refactored TrackRecordingService
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
v3.7.1: OpenTracks
|
||||||
|
|
||||||
|
Workaround:
|
||||||
|
- Hide start GPS button
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fixed null pointer
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
v3.7.2: OpenTracks
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Re-added start GPS button
|
||||||
|
- Track name is not overwritten at the end of a recording
|
||||||
|
- Markers: removing a photo also deletes the file
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
v3.7.3: OpenTracks
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Fixed computation of cadence and speed (via Bluetooth LE sensor)
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Removed unused translations
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
v3.7.4: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Sharing/export format configurable
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- Wheel diameter not stored correctly (for speed sensor)
|
||||||
|
- Help: links are clickable
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Split TrackDetailActivity
|
||||||
|
- StatsFragement successor uses ConstraintLayout
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
v3.7.5: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Added aggregated statistics summary (from main the screen's menu)
|
||||||
|
- Dashboard API: pass "show on lock screen"- and "keep screen on"-setting
|
||||||
|
- Updated translations
|
||||||
|
- Import: be lenient with ISO8601 date format
|
||||||
|
- Show track on map: file format can be selected and opening dashboard works on Android R (API 30+)
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
- App icon now correctly implemented
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
v3.7.6: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Landscape mode
|
||||||
|
- Track deletion UI is now only a spinner
|
||||||
|
- Speed is exported and imported (GPX/KML/KMZ)
|
||||||
|
- Default export format is KMZ incl. all data and pictures
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Replaced AsyncTasks with Threads
|
||||||
|
- Synchronization: UUID is generated per track (not yet exported)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
v3.8.0: OpenTracks
|
||||||
|
|
||||||
|
Breaking change:
|
||||||
|
- GPX import/export speed, cadence, and heartrate via TrackPointExtension/v2
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- Dashboard API: provide access to markers (incl. callback to show in OpenTracks)
|
||||||
|
- New marker icon (orange push pin, SVG)
|
||||||
|
- Files to import can be selected via file manager
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Aggregated stats UI respects preferred rate
|
||||||
|
- Editing a marker failed on orientation change
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
- Refactored TrackRecordingService
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
v3.8.1: OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
- While recording: add option for fullscreen
|
||||||
|
- Dashboard is started on the same task
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Intent filters for importing files were far too optimistic
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
(tbd): OpenTracks
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
-
|
||||||
|
|
||||||
|
Bugfix:
|
||||||
|
-
|
||||||
|
|
||||||
|
Developer:
|
||||||
|
-
|
||||||
@@ -3,6 +3,8 @@ OpenTracks is a sport tracking application that completely respects your privacy
|
|||||||
Features:
|
Features:
|
||||||
* Sport tracking: track your sport and outdoor activities
|
* Sport tracking: track your sport and outdoor activities
|
||||||
* Photos and markers: mark interesting locations while tracking
|
* Photos and markers: mark interesting locations while tracking
|
||||||
* Heart rate: supports bluetooth LE sensors
|
* Supports Bluetooth LE sensors:
|
||||||
* Export data: Export tracks either as KML or GPX
|
* heart rate
|
||||||
|
* cycling: speed and cadence
|
||||||
|
* Export data: export tracks either as KML or GPX
|
||||||
* No Internet access: Internet is not used
|
* No Internet access: Internet is not used
|
||||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 168 KiB |
@@ -0,0 +1 @@
|
|||||||
|
OpenTracks
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
OpenTracks es un tracker deportivo que respeta tu privacidad.
|
||||||
|
|
||||||
|
Funciones:
|
||||||
|
* Tracker deportivo: haz un seguimiento de tus actividades al aire libre
|
||||||
|
* Marca lugares de interés, incluso agrega fotos a los marcadores
|
||||||
|
* Pulsómetro (compatible con dispositivos Bluetooth LE)
|
||||||
|
* Exporta tus rutas como KML o GPX
|
||||||
|
* Completamente offline, no necesitas internet
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
OpenTracks es un tracker deportivo que respeta tu privacidad.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
OpenTracks
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
OpenTracks est une application de suivi d'activités sportives qui respecte totalement votre vie privée.
|
||||||
|
|
||||||
|
Fonctionnalités :
|
||||||
|
|
||||||
|
* Suivi d'activité : enregistre vos activités sportives et de plein air
|
||||||
|
* Photos et repères : ajout de photos et de repères pendant l'enregistrement de l'activité
|
||||||
|
* Rythme cardiaque : support des capteurs Bluetooth LE
|
||||||
|
* Export : export des traces au format KML ou GPX
|
||||||
|
* Pas d'accès internet requis : Internet n'est pas nécessaire pour le fonctionnement de l'application
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
OpenTracks - Suivi d'activités sportives respectueux de votre vie privée.
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
#Mon Aug 26 18:59:08 CEST 2019
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-all.zip
|
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright 2015 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##
|
##
|
||||||
## Gradle start up script for UN*X
|
## Gradle start up script for UN*X
|
||||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
|||||||
APP_BASE_NAME=`basename "$0"`
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# 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"
|
||||||
@@ -66,6 +82,7 @@ esac
|
|||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
@@ -109,10 +126,11 @@ if $darwin; then
|
|||||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# For Cygwin, switch paths to Windows format before running java
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
if $cygwin ; then
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
|
||||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
@@ -138,19 +156,19 @@ if $cygwin ; then
|
|||||||
else
|
else
|
||||||
eval `echo args$i`="\"$arg\""
|
eval `echo args$i`="\"$arg\""
|
||||||
fi
|
fi
|
||||||
i=$((i+1))
|
i=`expr $i + 1`
|
||||||
done
|
done
|
||||||
case $i in
|
case $i in
|
||||||
(0) set -- ;;
|
0) set -- ;;
|
||||||
(1) set -- "$args0" ;;
|
1) set -- "$args0" ;;
|
||||||
(2) set -- "$args0" "$args1" ;;
|
2) set -- "$args0" "$args1" ;;
|
||||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -159,14 +177,9 @@ save () {
|
|||||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
echo " "
|
echo " "
|
||||||
}
|
}
|
||||||
APP_ARGS=$(save "$@")
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
|
||||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$JAVACMD" "$@"
|
exec "$JAVACMD" "$@"
|
||||||
|
|||||||
@@ -1,84 +1,104 @@
|
|||||||
@if "%DEBUG%" == "" @echo off
|
@rem
|
||||||
@rem ##########################################################################
|
@rem Copyright 2015 the original author or authors.
|
||||||
@rem
|
@rem
|
||||||
@rem Gradle startup script for Windows
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@rem
|
@rem you may not use this file except in compliance with the License.
|
||||||
@rem ##########################################################################
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
@rem Set local scope for the variables with windows NT shell
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
set DIRNAME=%~dp0
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
set APP_BASE_NAME=%~n0
|
@rem See the License for the specific language governing permissions and
|
||||||
set APP_HOME=%DIRNAME%
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
set DEFAULT_JVM_OPTS="-Xmx64m"
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
@rem Find java.exe
|
@rem
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
set JAVA_EXE=java.exe
|
@rem ##########################################################################
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if "%ERRORLEVEL%" == "0" goto init
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
set DIRNAME=%~dp0
|
||||||
echo.
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
set APP_BASE_NAME=%~n0
|
||||||
echo location of your Java installation.
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
goto fail
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto init
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
set JAVA_EXE=java.exe
|
||||||
echo.
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
echo location of your Java installation.
|
|
||||||
|
echo.
|
||||||
goto fail
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
:init
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
@rem Get command-line arguments, handling Windows variants
|
echo location of your Java installation.
|
||||||
|
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
goto fail
|
||||||
|
|
||||||
:win9xME_args
|
:findJavaFromJavaHome
|
||||||
@rem Slurp the command line arguments.
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
set CMD_LINE_ARGS=
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
set _SKIP=2
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
:win9xME_args_slurp
|
|
||||||
if "x%~1" == "x" goto execute
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
set CMD_LINE_ARGS=%*
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
:execute
|
echo location of your Java installation.
|
||||||
@rem Setup the command line
|
|
||||||
|
goto fail
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
||||||
|
:init
|
||||||
@rem Execute Gradle
|
@rem Get command-line arguments, handling Windows variants
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
:end
|
|
||||||
@rem End local scope for the variables with windows NT shell
|
:win9xME_args
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
:fail
|
set _SKIP=2
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
||||||
rem the _cmd.exe /c_ return code!
|
:win9xME_args_slurp
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
if "x%~1" == "x" goto execute
|
||||||
exit /b 1
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
:mainEnd
|
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
:omega
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
(tbd): OpenTracks
|
|
||||||
|
|
||||||
Changes:
|
|
||||||
- Added show track in map apps (tested with OsmAnd and Maps.ME)
|
|
||||||
- Removed landscape mode for track detail view (was buggy)
|
|
||||||
- Removed search suggestions history
|
|
||||||
|
|
||||||
Bugfix:
|
|
||||||
-
|
|
||||||
|
|
||||||
Developer:
|
|
||||||
-
|
|
||||||
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 125 KiB |
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012 Google Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
||||||
* use this file except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
package de.dennisguse.opentracks;
|
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.app.ActivityManager.RunningServiceInfo;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for the BootReceiver.
|
|
||||||
*
|
|
||||||
* @author Youtao Liu
|
|
||||||
*/
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class BootReceiverTest {
|
|
||||||
private static final String SERVICE_NAME = "de.dennisguse.opentracks.services.TrackRecordingService";
|
|
||||||
|
|
||||||
private Context context = InstrumentationRegistry.getInstrumentation().getContext();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the behavior when receive notification which is the phone boot.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testOnReceive_startService() {
|
|
||||||
// Make sure no TrackRecordingService
|
|
||||||
Intent stopIntent = new Intent(context, TrackRecordingService.class);
|
|
||||||
context.stopService(stopIntent);
|
|
||||||
Assert.assertFalse(isServiceExisted(context));
|
|
||||||
|
|
||||||
BootReceiver bootReceiver = new BootReceiver();
|
|
||||||
Intent intent = new Intent();
|
|
||||||
intent.setAction(Intent.ACTION_BOOT_COMPLETED);
|
|
||||||
bootReceiver.onReceive(context, intent);
|
|
||||||
// Check if the service is started
|
|
||||||
Assert.assertFalse(isServiceExisted(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the behavior when receive notification which is not the phone boot.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testOnReceive_noStartService() {
|
|
||||||
// Make sure no TrackRecordingService
|
|
||||||
Intent stopIntent = new Intent(context, TrackRecordingService.class);
|
|
||||||
context.stopService(stopIntent);
|
|
||||||
Assert.assertFalse(isServiceExisted(context));
|
|
||||||
|
|
||||||
BootReceiver bootReceiver = new BootReceiver();
|
|
||||||
Intent intent = new Intent();
|
|
||||||
intent.setAction(Intent.ACTION_BUG_REPORT);
|
|
||||||
bootReceiver.onReceive(context, intent);
|
|
||||||
|
|
||||||
// Check if the service is not started
|
|
||||||
Assert.assertFalse(isServiceExisted(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a service is started in a context.
|
|
||||||
*
|
|
||||||
* @param context the context for checking a service
|
|
||||||
*/
|
|
||||||
private boolean isServiceExisted(Context context) {
|
|
||||||
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
|
|
||||||
List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(Integer.MAX_VALUE);
|
|
||||||
|
|
||||||
for (int i = 0; i < serviceList.size(); i++) {
|
|
||||||
RunningServiceInfo serviceInfo = serviceList.get(i);
|
|
||||||
ComponentName componentName = serviceInfo.service;
|
|
||||||
if (componentName.getClassName().equals(SERVICE_NAME)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,13 +18,10 @@ package de.dennisguse.opentracks;
|
|||||||
|
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.content.SensorDataSetLocation;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.Track;
|
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Commons utilities for creating stubs of track, location. The class will be
|
* Commons utilities for creating stubs of track, location.
|
||||||
* enriched if needs more similar stubs for test.
|
|
||||||
*
|
*
|
||||||
* @author Youtao Liu
|
* @author Youtao Liu
|
||||||
*/
|
*/
|
||||||
@@ -38,52 +35,31 @@ public class TrackStubUtils {
|
|||||||
private static final float INITIAL_ACCURACY = 5;
|
private static final float INITIAL_ACCURACY = 5;
|
||||||
private static final float INITIAL_SPEED = 10;
|
private static final float INITIAL_SPEED = 10;
|
||||||
private static final float INITIAL_BEARING = 3.0f;
|
private static final float INITIAL_BEARING = 3.0f;
|
||||||
// Used to change the value of latitude, longitude, and altitude.
|
|
||||||
private static final double DIFFERENCE = 0.01;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a a {@link Track} stub with specified number of locations.
|
|
||||||
*
|
|
||||||
* @param numberOfLocations the number of locations for the track
|
|
||||||
* @return a track stub.
|
|
||||||
*/
|
|
||||||
public static Track createTrack(int numberOfLocations) {
|
|
||||||
Track track = new Track();
|
|
||||||
for (int i = 0; i < numberOfLocations; i++) {
|
|
||||||
track.addLocation(createSensorDataSetLocation(INITIAL_LATITUDE + i * DIFFERENCE, INITIAL_LONGITUDE
|
|
||||||
+ i * DIFFERENCE, INITIAL_ALTITUDE + i * DIFFERENCE));
|
|
||||||
}
|
|
||||||
|
|
||||||
return track;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a MyTracks location with default values.
|
* Create a MyTracks location with default values.
|
||||||
*
|
*
|
||||||
* @return a track stub.
|
* @return a track stub.
|
||||||
*/
|
*/
|
||||||
public static SensorDataSetLocation createSensorDataSetLocation() {
|
public static TrackPoint createDefaultTrackPoint() {
|
||||||
return createSensorDataSetLocation(INITIAL_LATITUDE, INITIAL_LONGITUDE, INITIAL_ALTITUDE);
|
return createDefaultTrackPoint(INITIAL_LATITUDE, INITIAL_LONGITUDE, INITIAL_ALTITUDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link SensorDataSetLocation} stub with specified values.
|
* Creates a {@link TrackPoint} stub with specified values.
|
||||||
*
|
*
|
||||||
* @return a SensorDataSetLocation stub.
|
* @return a SensorDataSetLocation stub.
|
||||||
*/
|
*/
|
||||||
public static SensorDataSetLocation createSensorDataSetLocation(double latitude, double longitude, double altitude) {
|
private static TrackPoint createDefaultTrackPoint(double latitude, double longitude, double altitude) {
|
||||||
// Initial Location
|
Location location = new Location(LOCATION_PROVIDER);
|
||||||
Location loc = new Location(LOCATION_PROVIDER);
|
location.setLatitude(latitude);
|
||||||
loc.setLatitude(latitude);
|
location.setLongitude(longitude);
|
||||||
loc.setLongitude(longitude);
|
location.setAltitude(altitude);
|
||||||
loc.setAltitude(altitude);
|
location.setAccuracy(INITIAL_ACCURACY);
|
||||||
loc.setAccuracy(INITIAL_ACCURACY);
|
location.setSpeed(INITIAL_SPEED);
|
||||||
loc.setSpeed(INITIAL_SPEED);
|
location.setTime(INITIAL_TIME);
|
||||||
loc.setTime(INITIAL_TIME);
|
location.setBearing(INITIAL_BEARING);
|
||||||
loc.setBearing(INITIAL_BEARING);
|
|
||||||
SensorDataSet sd = new SensorDataSet(Float.NaN, Float.NaN);
|
|
||||||
|
|
||||||
return new SensorDataSetLocation(loc, sd);
|
return new TrackPoint(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,9 @@
|
|||||||
* License for the specific language governing permissions and limitations under
|
* License for the specific language governing permissions and limitations under
|
||||||
* the License.
|
* the License.
|
||||||
*/
|
*/
|
||||||
package de.dennisguse.opentracks;
|
package de.dennisguse.opentracks.chart;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
|
||||||
@@ -23,6 +24,8 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link ChartValueSeries}.
|
* Tests {@link ChartValueSeries}.
|
||||||
*
|
*
|
||||||
@@ -42,7 +45,17 @@ public class ChartValueSeriesTest {
|
|||||||
R.string.description_elevation_metric,
|
R.string.description_elevation_metric,
|
||||||
R.string.description_elevation_imperial,
|
R.string.description_elevation_imperial,
|
||||||
R.color.chart_elevation_fill,
|
R.color.chart_elevation_fill,
|
||||||
R.color.chart_elevation_border);
|
R.color.chart_elevation_border) {
|
||||||
|
@Override
|
||||||
|
double extractDataFromChartPoint(@NonNull ChartPoint chartPoint) {
|
||||||
|
return chartPoint.getElevation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean drawIfChartPointHasNoData() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -61,8 +74,8 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSmallUpdates() {
|
public void testSmallUpdates() {
|
||||||
series.update(0);
|
series.update(new ChartPoint(0));
|
||||||
series.update(10);
|
series.update(new ChartPoint(10));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
Assert.assertEquals(100, series.getInterval());
|
Assert.assertEquals(100, series.getInterval());
|
||||||
Assert.assertEquals(0, series.getMinMarkerValue());
|
Assert.assertEquals(0, series.getMinMarkerValue());
|
||||||
@@ -71,8 +84,8 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBigUpdates() {
|
public void testBigUpdates() {
|
||||||
series.update(0);
|
series.update(new ChartPoint(0));
|
||||||
series.update(901);
|
series.update(new ChartPoint(901));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
Assert.assertEquals(1000, series.getInterval());
|
Assert.assertEquals(1000, series.getInterval());
|
||||||
Assert.assertEquals(0, series.getMinMarkerValue());
|
Assert.assertEquals(0, series.getMinMarkerValue());
|
||||||
@@ -81,8 +94,8 @@ public class ChartValueSeriesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotZeroBasedUpdates() {
|
public void testNotZeroBasedUpdates() {
|
||||||
series.update(220);
|
series.update(new ChartPoint(220));
|
||||||
series.update(250);
|
series.update(new ChartPoint(250));
|
||||||
series.updateDimension();
|
series.updateDimension();
|
||||||
Assert.assertEquals(100, series.getInterval());
|
Assert.assertEquals(100, series.getInterval());
|
||||||
Assert.assertEquals(200, series.getMinMarkerValue());
|
Assert.assertEquals(200, series.getMinMarkerValue());
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012 Google Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
||||||
* use this file except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.dennisguse.opentracks.content;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
|
||||||
import android.net.Uri;
|
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.content.CustomContentProvider.DatabaseHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link CustomContentProvider}.
|
|
||||||
*
|
|
||||||
* @author Youtao Liu
|
|
||||||
*/
|
|
||||||
public class CustomContentProviderTest {
|
|
||||||
|
|
||||||
private static final String DATABASE_NAME = "test.db";
|
|
||||||
|
|
||||||
private SQLiteDatabase db;
|
|
||||||
private CustomContentProvider customContentProvider;
|
|
||||||
private Context context = ApplicationProvider.getApplicationContext();
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
context.deleteDatabase(DATABASE_NAME);
|
|
||||||
db = (new DatabaseHelper(context, DATABASE_NAME)).getWritableDatabase();
|
|
||||||
customContentProvider = new CustomContentProvider() {
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link CustomContentProvider.DatabaseHelper#onCreate(SQLiteDatabase)}.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testDatabaseHelper_OnCreate() {
|
|
||||||
Assert.assertTrue(hasTable(TracksColumns.TABLE_NAME));
|
|
||||||
Assert.assertTrue(hasTable(TrackPointsColumns.TABLE_NAME));
|
|
||||||
Assert.assertTrue(hasTable(WaypointsColumns.TABLE_NAME));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link CustomContentProvider#onCreate(android.content.Context)}.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testOnCreate() {
|
|
||||||
Assert.assertTrue(customContentProvider.onCreate(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link CustomContentProvider#getType(Uri)}.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testGetType() {
|
|
||||||
Assert.assertEquals(TracksColumns.CONTENT_TYPE, customContentProvider.getType(TracksColumns.CONTENT_URI));
|
|
||||||
Assert.assertEquals(TrackPointsColumns.CONTENT_TYPE, customContentProvider.getType(TrackPointsColumns.CONTENT_URI));
|
|
||||||
Assert.assertEquals(WaypointsColumns.CONTENT_TYPE, customContentProvider.getType(WaypointsColumns.CONTENT_URI));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a table, containing one column.
|
|
||||||
*
|
|
||||||
* @param table the table name
|
|
||||||
*/
|
|
||||||
private void createTable(String table) {
|
|
||||||
db.execSQL("CREATE TABLE " + table + " (test INTEGER)");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Drops a table in database.
|
|
||||||
*
|
|
||||||
* @param table the table name
|
|
||||||
*/
|
|
||||||
private void dropTable(String table) {
|
|
||||||
db.execSQL("Drop TABLE " + table);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the table exists.
|
|
||||||
*
|
|
||||||
* @param table the table name
|
|
||||||
*/
|
|
||||||
private boolean hasTable(String table) {
|
|
||||||
try {
|
|
||||||
db.rawQuery("select count(*) from " + table, null);
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the column in the table exists.
|
|
||||||
*
|
|
||||||
* @param table the table name
|
|
||||||
* @param column the column name
|
|
||||||
*/
|
|
||||||
private boolean hasColumn(String table, String column) {
|
|
||||||
try {
|
|
||||||
db.execSQL("SElECT count(*) from " + table + " order by " + column);
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (e.getMessage().contains("no such column")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets up upgrade.
|
|
||||||
*
|
|
||||||
* @param oldVersion thd old database version
|
|
||||||
*/
|
|
||||||
private void setupUpgrade(int oldVersion) {
|
|
||||||
dropTable(TracksColumns.TABLE_NAME);
|
|
||||||
dropTable(TrackPointsColumns.TABLE_NAME);
|
|
||||||
dropTable(WaypointsColumns.TABLE_NAME);
|
|
||||||
createTable(TracksColumns.TABLE_NAME);
|
|
||||||
createTable(TrackPointsColumns.TABLE_NAME);
|
|
||||||
createTable(WaypointsColumns.TABLE_NAME);
|
|
||||||
|
|
||||||
DatabaseHelper databaseHelper = new DatabaseHelper(context);
|
|
||||||
databaseHelper.onUpgrade(db, oldVersion, CustomContentProvider.DATABASE_VERSION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||